[hdf5] 04/12: Imported Upstream version 1.10.0~pre1+docs

Gilles Filippini pini at debian.org
Tue Mar 29 18:39:59 UTC 2016


This is an automated email from the git hooks/post-receive script.

pini pushed a commit to branch master-1.10
in repository hdf5.

commit e21bd7ad7e80e000a7300ec8e01ea3ce0d4e936e
Author: Gilles Filippini <pini at debian.org>
Date:   Fri Mar 18 23:48:55 2016 +0100

    Imported Upstream version 1.10.0~pre1+docs
---
 ACKNOWLEDGMENTS                                    |   15 +-
 BRANCH.txt                                         |   15 -
 CMakeLists.txt                                     |  165 +-
 COPYING                                            |    2 +-
 MANIFEST                                           |  393 +-
 Makefile.am                                        |    9 +-
 Makefile.in                                        |   62 +-
 README.txt                                         |    2 +-
 aclocal.m4                                         |   13 +
 bin/cmakehdf5                                      |   12 +-
 c++/Makefile.in                                    |   56 +-
 c++/examples/Makefile.in                           |   56 +-
 c++/src/CMakeLists.txt                             |    2 +-
 c++/src/H5AbstractDs.cpp                           |    5 +-
 c++/src/H5AbstractDs.h                             |    2 +-
 c++/src/H5ArrayType.cpp                            |  166 +-
 c++/src/H5ArrayType.h                              |    6 +
 c++/src/H5Attribute.cpp                            |   27 +-
 c++/src/H5CommonFG.cpp                             |  101 +-
 c++/src/H5CompType.cpp                             |   11 +-
 c++/src/H5DataSet.cpp                              |   59 +-
 c++/src/H5DataSpace.cpp                            |   21 +-
 c++/src/H5DataType.cpp                             |   42 +-
 c++/src/H5Exception.cpp                            |    6 +-
 c++/src/H5FaccProp.cpp                             |   45 +-
 c++/src/H5File.cpp                                 |   18 +-
 c++/src/H5Group.cpp                                |    6 +-
 c++/src/H5Library.cpp                              |    4 +-
 c++/src/H5Location.cpp                             |   12 +-
 c++/src/H5Object.cpp                               |    2 +-
 c++/src/H5PropList.cpp                             |    5 +-
 c++/src/H5StrType.cpp                              |   21 +-
 c++/src/Makefile.in                                |   56 +-
 c++/src/cpp_doc_config                             |    2 +-
 c++/test/CMakeLists.txt                            |    1 +
 c++/test/Makefile.am                               |    7 +-
 c++/test/Makefile.in                               |   73 +-
 c++/test/dsets.cpp                                 |   56 +-
 c++/test/h5cpputil.cpp                             |    2 +-
 c++/test/h5cpputil.h                               |    2 +
 c++/test/tarray.cpp                                |  394 +
 c++/test/testhdf5.cpp                              |    2 +-
 c++/test/ttypes.cpp                                |    1 -
 config/cce-fflags                                  |   19 +-
 config/cce-flags                                   |   24 +-
 config/cmake/CMakeFindJavaCommon.cmake             |   41 +
 config/cmake/ConfigureChecks.cmake                 |    9 -
 config/cmake/FindHDFJAVA.cmake.in                  |   68 +
 config/cmake/FindJNI.cmake                         |  342 +
 config/cmake/H5pubconf.h.in                        |    4 -
 config/cmake/HDF518_Examples.cmake.in              |    4 +
 config/cmake/HDF5Macros.cmake                      |   11 +-
 config/cmake/HDF5_Examples.cmake.in                |   19 +-
 config/cmake/README.txt.cmake.in                   |    1 +
 config/cmake/UseJava.cmake                         | 1350 +++
 config/cmake/UseJavaClassFilelist.cmake            |   58 +
 config/cmake/UseJavaSymlinks.cmake                 |   38 +
 config/cmake/cacheinit.cmake                       |    2 +
 config/cmake/hdf5-config.cmake.in                  |   14 +
 config/cmake/jrunTest.cmake                        |  212 +
 config/cmake/libhdf5.settings.cmake.in             |   56 +-
 config/cmake/mccacheinit.cmake                     |    2 +
 config/cmake/scripts/HDF5config.cmake              |   29 +-
 config/cmake/vfdTest.cmake                         |    4 +-
 config/cmake_ext_mod/prunTest.cmake                |    4 +-
 config/cmake_ext_mod/runTest.cmake                 |   12 +-
 config/commence.am                                 |    1 +
 config/gnu-cxxflags                                |  830 ++
 config/gnu-fflags                                  |   23 +-
 config/gnu-flags                                   |   47 +-
 config/i686-pc-cygwin                              |   22 +-
 config/ibm-aix                                     |   49 +-
 config/ibm-flags                                   |   29 +-
 config/intel-fflags                                |   17 +-
 config/intel-flags                                 |   25 +-
 config/linux-gnulibc1                              |   31 +-
 config/pgi-fflags                                  |   19 +-
 config/pgi-flags                                   |   42 +-
 config/solaris                                     |   91 +-
 config/x86_64-pc-cygwin                            |   23 +-
 configure                                          | 2390 +++--
 configure.ac                                       | 1183 ++-
 examples/Makefile.in                               |   56 +-
 fortran/Makefile.in                                |   56 +-
 fortran/examples/Makefile.in                       |   56 +-
 fortran/robodoc.rc                                 |    5 +-
 fortran/src/CMakeLists.txt                         |    5 +-
 fortran/src/H5Dff.F90                              |    6 +-
 fortran/src/H5Eff.F90                              |    2 +-
 fortran/src/H5Fff.F90                              |    2 +-
 fortran/src/H5Gff.F90                              |    2 +-
 fortran/src/H5Off.F90                              |    2 +-
 fortran/src/H5Pf.c                                 |    2 +-
 fortran/src/H5Pff.F90                              |  699 +-
 fortran/src/H5Rff.F90                              |    2 +-
 fortran/src/H5Sff.F90                              |  122 +-
 fortran/src/H5_buildiface.F90                      |   49 +-
 fortran/src/H5_f.c                                 |    4 +
 fortran/src/H5f90.h                                |    2 +-
 fortran/src/H5f90global.F90                        |   24 +-
 fortran/src/H5fortkit.F90                          |   66 +
 fortran/src/H5match_types.c                        |    4 +-
 fortran/src/HDF5.F90                               |    2 +-
 fortran/src/Makefile.am                            |    6 +-
 fortran/src/Makefile.in                            |   81 +-
 fortran/src/hdf5_fortrandll.def.in                 |   16 +
 fortran/test/CMakeLists.txt                        |    4 +-
 fortran/test/H5_test_buildiface.F90                |   37 +-
 fortran/test/Makefile.in                           |   56 +-
 fortran/test/fortranlib_test_F03.F90               |    8 +
 fortran/test/tH5D.F90                              |    1 -
 fortran/test/tH5F.F90                              |    7 -
 fortran/test/tH5F_F03.F90                          |    6 +-
 fortran/test/tH5P_F03.F90                          |  474 +-
 fortran/test/tHDF5.F90                             |    2 +-
 fortran/test/tHDF5_1_8.F90                         |    2 +-
 fortran/test/tHDF5_F03.F90                         |    2 +-
 fortran/test/tf.F90                                |    4 +-
 fortran/testpar/Makefile.in                        |   56 +-
 fortran/testpar/hyper.f90                          |  143 +-
 fortran/testpar/ptest.f90                          |  119 +-
 hl/Makefile.in                                     |   56 +-
 hl/c++/Makefile.in                                 |   56 +-
 hl/c++/examples/Makefile.in                        |   56 +-
 hl/c++/src/CMakeLists.txt                          |    2 +-
 hl/c++/src/H5PacketTable.cpp                       |  204 +-
 hl/c++/src/H5PacketTable.h                         |  131 +-
 hl/c++/src/Makefile.in                             |   56 +-
 hl/c++/test/Makefile.in                            |   56 +-
 hl/c++/test/ptableTest.cpp                         |   53 +-
 hl/examples/Makefile.in                            |   56 +-
 hl/fortran/Makefile.in                             |   56 +-
 hl/fortran/examples/Makefile.in                    |   56 +-
 hl/fortran/src/CMakeLists.txt                      |    4 +-
 hl/fortran/src/H5HL_buildiface.F90                 |    7 -
 hl/fortran/src/Makefile.in                         |   56 +-
 hl/fortran/test/Makefile.in                        |   56 +-
 hl/fortran/test/tstlite.F90                        |    2 -
 hl/src/CMakeLists.txt                              |    2 +-
 hl/src/H5DO.c                                      |   20 +-
 hl/src/H5PT.c                                      |  528 +-
 hl/src/H5PTpublic.h                                |   68 +-
 hl/src/Makefile.in                                 |   56 +-
 hl/test/CMakeLists.txt                             |   12 +-
 hl/test/Makefile.am                                |    3 +
 hl/test/Makefile.in                                |   70 +-
 hl/test/h5hltest.h                                 |    2 +
 hl/test/test_packet.c                              |  520 +-
 hl/test/test_packet_vlen.c                         | 1694 ++++
 hl/tools/Makefile.in                               |   56 +-
 hl/tools/gif2h5/Makefile.in                        |   56 +-
 hl/tools/gif2h5/h52giftest.sh.in                   |    2 +-
 hl/tools/h5watch/Makefile.in                       |   56 +-
 hl/tools/h5watch/h5watch.c                         |    4 +-
 html/Copyright.html                                |    2 +-
 html/HL/H5LT/H5LDget_dset_dims.htm                 |  117 +
 html/HL/H5LT/H5LDget_dset_elmts.htm                |  287 +
 html/HL/H5LT/H5LDget_dset_type_size.htm            |  126 +
 html/HL/HDF5Optimized/H5DOappend.htm               |  179 +
 html/RM/APICompatMacros.html                       |  522 +-
 html/RM/H5D/H5Dflush.htm                           |  128 +
 html/RM/H5D/H5Drefresh.htm                         |  125 +
 html/RM/H5F/H5Fare_mdc_flushes_disabled.htm        |  154 +
 html/RM/H5F/H5Fdisable_mdc_flushes.htm             |  156 +
 html/RM/H5F/H5Fenable_mdc_flushes.htm              |  154 +
 html/RM/H5F/H5Fget_free_sections.htm               |  207 +-
 html/RM/H5F/H5Fget_freespace.htm                   |  109 +-
 html/RM/H5F/H5Fget_info.htm                        |  207 +-
 html/RM/H5F/H5Fget_info1.htm                       |  144 +
 html/RM/H5F/H5Fget_info2.htm                       |  157 +
 html/RM/H5F/H5Fget_intent.htm                      |  228 +-
 html/RM/H5F/H5Fget_mdc_flush_disabled_obj_ids.htm  |  163 +
 html/RM/H5F/H5Fget_metadata_read_retries_info.htm  |  415 +
 html/RM/H5F/H5Fstart_mdc_logging.htm               |  145 +
 html/RM/H5F/H5Fstart_swmr_write.htm                |  208 +
 html/RM/H5F/H5Fstop_mdc_logging.htm                |  139 +
 html/RM/H5G/H5Gflush.htm                           |  130 +
 html/RM/H5G/H5Grefresh.htm                         |  127 +
 html/RM/H5O/H5Oare_mdc_flushes_disabled.htm        |  155 +
 html/RM/H5O/H5Odisable_mdc_flushes.htm             |  171 +
 html/RM/H5O/H5Oenable_mdc_flushes.htm              |  173 +
 html/RM/H5O/H5Oflush.htm                           |  132 +
 html/RM/H5O/H5Orefresh.htm                         |  132 +
 html/RM/H5P/H5Pget_all_coll_metadata_ops.htm       |  154 +
 html/RM/H5P/H5Pget_append_flush.htm                |  222 +
 html/RM/H5P/H5Pget_coll_metadata_write.htm         |  143 +
 html/RM/H5P/H5Pget_file_space.htm                  |  188 +-
 html/RM/H5P/H5Pget_layout.htm                      |   83 +-
 html/RM/H5P/H5Pget_mdc_log_options.htm             |  155 +
 html/RM/H5P/H5Pget_mdc_logging_status.htm          |  144 +
 html/RM/H5P/H5Pget_metadata_read_attempts.htm      |  293 +
 html/RM/H5P/H5Pget_object_flush_cb.htm             |  186 +
 html/RM/H5P/H5Pget_virtual_count.htm               |  156 +
 html/RM/H5P/H5Pget_virtual_dsetname.htm            |  195 +
 html/RM/H5P/H5Pget_virtual_filename.htm            |  197 +
 html/RM/H5P/H5Pget_virtual_printf_gap.htm          |  169 +
 html/RM/H5P/H5Pget_virtual_srcspace.htm            |  165 +
 html/RM/H5P/H5Pget_virtual_view.htm                |  167 +
 html/RM/H5P/H5Pget_virtual_vspace.htm              |  165 +
 html/RM/H5P/H5Pset_all_coll_metadata_ops.htm       |  219 +
 html/RM/H5P/H5Pset_append_flush.htm                |  271 +
 html/RM/H5P/H5Pset_coll_metadata_write.htm         |  156 +
 html/RM/H5P/H5Pset_file_space.htm                  |  284 +-
 html/RM/H5P/H5Pset_layout.htm                      |   56 +-
 html/RM/H5P/H5Pset_mdc_log_options.htm             |  166 +
 html/RM/H5P/H5Pset_metadata_read_attempts.htm      |  231 +
 html/RM/H5P/H5Pset_object_flush_cb.htm             |  208 +
 html/RM/H5P/H5Pset_virtual.htm                     |  224 +
 html/RM/H5P/H5Pset_virtual_printf_gap.htm          |  187 +
 html/RM/H5P/H5Pset_virtual_view.htm                |  185 +
 html/RM/H5P/h5pget_all_coll_metadata_ops_f.htm     |   19 +
 html/RM/H5P/h5pget_coll_metadata_write_f.htm       |   19 +
 html/RM/H5P/h5pget_virtual_count_f.htm             |   19 +
 html/RM/H5P/h5pget_virtual_dsetname_f.htm          |   29 +
 html/RM/H5P/h5pget_virtual_filename_f.htm          |   30 +
 html/RM/H5P/h5pget_virtual_printf_gap_f.htm        |   21 +
 html/RM/H5P/h5pget_virtual_srcspace_f.htm          |   24 +
 html/RM/H5P/h5pget_virtual_view_f.htm              |   22 +
 html/RM/H5P/h5pget_virtual_vspace_f.htm            |   23 +
 html/RM/H5P/h5pset_all_coll_metadata_ops_f.htm     |   19 +
 html/RM/H5P/h5pset_coll_metadata_write_f.htm       |   19 +
 html/RM/H5P/h5pset_virtual_f.htm                   |   30 +
 html/RM/H5P/h5pset_virtual_printf_gap_f.htm        |   21 +
 html/RM/H5P/h5pset_virtual_view_f.htm              |   22 +
 html/RM/H5R/H5Rdereference.htm                     |  155 +-
 html/RM/H5R/H5Rdereference1.htm                    |  149 +
 html/RM/H5R/H5Rdereference2.htm                    |  145 +
 html/RM/H5S/H5Sget_regular_hyperslab.htm           |  195 +
 html/RM/H5S/H5Sis_regular_hyperslab.htm            |  166 +
 html/RM/H5S/h5sget_regular_hyperslab_f.htm         |   26 +
 html/RM/H5S/h5sis_regular_hyperslab_f.htm          |   19 +
 html/RM/H5T/H5Tflush.htm                           |  128 +
 html/RM/H5T/H5Trefresh.htm                         |  126 +
 html/RM/RM_H5D.html                                |   12 +-
 html/RM/RM_H5F.html                                |   27 +-
 html/RM/RM_H5R.html                                |   16 +-
 html/RM/Tools/h5dump.htm                           |   43 +-
 html/RM/Tools/h5format_convert.htm                 |  185 +
 html/RM/Tools/h5repack.htm                         |   49 +-
 html/RM/Tools/h5stat.htm                           |   44 +-
 html/RM/Tools/h5watch.htm                          |  292 +
 html/TechNotes.html                                |   12 +-
 java/CMakeLists.txt                                |   77 +
 java/COPYING                                       |   16 +
 java/Makefile.am                                   |   38 +
 java/Makefile.in                                   | 1432 +++
 java/examples/CMakeLists.txt                       |    7 +
 java/examples/Makefile.am                          |   31 +
 java/examples/Makefile.in                          | 1429 +++
 java/examples/datasets/CMakeLists.txt              |  138 +
 java/examples/datasets/H5Ex_D_Alloc.java           |  301 +
 java/examples/datasets/H5Ex_D_Checksum.java        |  347 +
 java/examples/datasets/H5Ex_D_Chunk.java           |  366 +
 java/examples/datasets/H5Ex_D_Compact.java         |  289 +
 java/examples/datasets/H5Ex_D_External.java        |  238 +
 java/examples/datasets/H5Ex_D_FillValue.java       |  246 +
 java/examples/datasets/H5Ex_D_Gzip.java            |  336 +
 java/examples/datasets/H5Ex_D_Hyperslab.java       |  269 +
 java/examples/datasets/H5Ex_D_Nbit.java            |  305 +
 java/examples/datasets/H5Ex_D_ReadWrite.java       |  179 +
 java/examples/datasets/H5Ex_D_Shuffle.java         |  373 +
 java/examples/datasets/H5Ex_D_Sofloat.java         |  356 +
 java/examples/datasets/H5Ex_D_Soint.java           |  335 +
 java/examples/datasets/H5Ex_D_Szip.java            |  337 +
 java/examples/datasets/H5Ex_D_Transform.java       |  250 +
 java/examples/datasets/H5Ex_D_UnlimitedAdd.java    |  393 +
 java/examples/datasets/H5Ex_D_UnlimitedGzip.java   |  504 ++
 java/examples/datasets/H5Ex_D_UnlimitedMod.java    |  379 +
 java/examples/datasets/Makefile.am                 |   78 +
 java/examples/datasets/Makefile.in                 | 1309 +++
 java/examples/datasets/runExample.sh.in            |  413 +
 java/examples/datatypes/CMakeLists.txt             |  109 +
 java/examples/datatypes/H5Ex_T_Array.java          |  282 +
 java/examples/datatypes/H5Ex_T_ArrayAttribute.java |  322 +
 java/examples/datatypes/H5Ex_T_Bit.java            |  227 +
 java/examples/datatypes/H5Ex_T_BitAttribute.java   |  267 +
 java/examples/datatypes/H5Ex_T_Commit.java         |  265 +
 java/examples/datatypes/H5Ex_T_Compound.java       |  443 +
 .../datatypes/H5Ex_T_CompoundAttribute.java        |  486 +
 java/examples/datatypes/H5Ex_T_Float.java          |  227 +
 java/examples/datatypes/H5Ex_T_FloatAttribute.java |  263 +
 java/examples/datatypes/H5Ex_T_Integer.java        |  226 +
 .../datatypes/H5Ex_T_IntegerAttribute.java         |  263 +
 .../examples/datatypes/H5Ex_T_ObjectReference.java |  347 +
 .../datatypes/H5Ex_T_ObjectReferenceAttribute.java |  389 +
 java/examples/datatypes/H5Ex_T_Opaque.java         |  270 +
 .../examples/datatypes/H5Ex_T_OpaqueAttribute.java |  307 +
 java/examples/datatypes/H5Ex_T_String.java         |  311 +
 .../examples/datatypes/H5Ex_T_StringAttribute.java |  351 +
 java/examples/datatypes/H5Ex_T_VLString.java       |  138 +
 java/examples/datatypes/Makefile.am                |   78 +
 java/examples/datatypes/Makefile.in                | 1309 +++
 java/examples/datatypes/runExample.sh.in           |  408 +
 java/examples/groups/CMakeLists.txt                |  138 +
 java/examples/groups/H5Ex_G_Compact.java           |  266 +
 java/examples/groups/H5Ex_G_Corder.java            |  121 +
 java/examples/groups/H5Ex_G_Create.java            |   94 +
 java/examples/groups/H5Ex_G_Intermediate.java      |  125 +
 java/examples/groups/H5Ex_G_Iterate.java           |  119 +
 java/examples/groups/H5Ex_G_Phase.java             |  241 +
 java/examples/groups/H5Ex_G_Traverse.java          |  167 +
 java/examples/groups/H5Ex_G_Visit.java             |  152 +
 java/examples/groups/Makefile.am                   |   68 +
 java/examples/groups/Makefile.in                   | 1298 +++
 java/examples/groups/h5ex_g_iterate.h5             |  Bin 0 -> 2928 bytes
 java/examples/groups/h5ex_g_visit.h5               |  Bin 0 -> 6312 bytes
 java/examples/groups/runExample.sh.in              |  349 +
 java/examples/intro/CMakeLists.txt                 |  112 +
 java/examples/intro/H5_CreateAttribute.java        |  145 +
 java/examples/intro/H5_CreateDataset.java          |   97 +
 java/examples/intro/H5_CreateFile.java             |   55 +
 java/examples/intro/H5_CreateGroup.java            |   76 +
 .../intro/H5_CreateGroupAbsoluteRelative.java      |  118 +
 java/examples/intro/H5_CreateGroupDataset.java     |  207 +
 java/examples/intro/H5_ReadWrite.java              |  112 +
 java/examples/intro/Makefile.am                    |   67 +
 java/examples/intro/Makefile.in                    | 1298 +++
 java/examples/intro/runExample.sh.in               |  298 +
 .../testfiles/examples.datasets.H5Ex_D_Alloc.txt   |   16 +
 .../examples.datasets.H5Ex_D_Checksum.txt          |    3 +
 .../testfiles/examples.datasets.H5Ex_D_Chunk.txt   |   26 +
 .../testfiles/examples.datasets.H5Ex_D_Compact.txt |    8 +
 .../examples.datasets.H5Ex_D_External.txt          |    7 +
 .../examples.datasets.H5Ex_D_FillValue.txt         |   20 +
 .../testfiles/examples.datasets.H5Ex_D_Gzip.txt    |    3 +
 .../examples.datasets.H5Ex_D_Hyperslab.txt         |   24 +
 .../testfiles/examples.datasets.H5Ex_D_Nbit.txt    |    3 +
 .../examples.datasets.H5Ex_D_ReadWrite.txt         |    6 +
 .../testfiles/examples.datasets.H5Ex_D_Shuffle.txt |    5 +
 .../testfiles/examples.datasets.H5Ex_D_Sofloat.txt |    6 +
 .../testfiles/examples.datasets.H5Ex_D_Soint.txt   |    3 +
 .../testfiles/examples.datasets.H5Ex_D_Szip.txt    |    3 +
 .../examples.datasets.H5Ex_D_Transform.txt         |   15 +
 .../examples.datasets.H5Ex_D_UnlimitedAdd.txt      |   14 +
 .../examples.datasets.H5Ex_D_UnlimitedGzip.txt     |   16 +
 .../examples.datasets.H5Ex_D_UnlimitedMod.txt      |   14 +
 .../testfiles/examples.datatypes.H5Ex_T_Array.txt  |   21 +
 .../examples.datatypes.H5Ex_T_ArrayAttribute.txt   |   21 +
 .../testfiles/examples.datatypes.H5Ex_T_Bit.txt    |    6 +
 .../examples.datatypes.H5Ex_T_BitAttribute.txt     |    6 +
 .../testfiles/examples.datatypes.H5Ex_T_Commit.txt |    6 +
 .../examples.datatypes.H5Ex_T_Compound.txt         |   25 +
 ...examples.datatypes.H5Ex_T_CompoundAttribute.txt |   25 +
 .../testfiles/examples.datatypes.H5Ex_T_Float.txt  |    6 +
 .../examples.datatypes.H5Ex_T_FloatAttribute.txt   |    6 +
 .../examples.datatypes.H5Ex_T_Integer.txt          |    6 +
 .../examples.datatypes.H5Ex_T_IntegerAttribute.txt |    6 +
 .../examples.datatypes.H5Ex_T_ObjectReference.txt  |    4 +
 ...s.datatypes.H5Ex_T_ObjectReferenceAttribute.txt |    4 +
 .../testfiles/examples.datatypes.H5Ex_T_Opaque.txt |    6 +
 .../examples.datatypes.H5Ex_T_OpaqueAttribute.txt  |    6 +
 .../testfiles/examples.datatypes.H5Ex_T_String.txt |    5 +
 .../examples.datatypes.H5Ex_T_StringAttribute.txt  |    5 +
 .../examples.datatypes.H5Ex_T_VLString.txt         |    4 +
 .../testfiles/examples.groups.H5Ex_G_Compact.txt   |    5 +
 .../testfiles/examples.groups.H5Ex_G_Corder.txt    |   10 +
 .../testfiles/examples.groups.H5Ex_G_Create.txt    |    0
 .../examples.groups.H5Ex_G_Intermediate.txt        |    5 +
 .../testfiles/examples.groups.H5Ex_G_Iterate.txt   |    5 +
 .../testfiles/examples.groups.H5Ex_G_Phase.txt     |   15 +
 .../testfiles/examples.groups.H5Ex_G_Visit.txt     |   19 +
 .../examples.intro.H5_CreateAttribute.txt          |    0
 .../testfiles/examples.intro.H5_CreateDataset.txt  |    0
 .../testfiles/examples.intro.H5_CreateFile.txt     |    0
 .../testfiles/examples.intro.H5_CreateGroup.txt    |    0
 ...amples.intro.H5_CreateGroupAbsoluteRelative.txt |    0
 .../examples.intro.H5_CreateGroupDataset.txt       |    0
 .../testfiles/examples.intro.H5_ReadWrite.txt      |    0
 java/lib/ext/slf4j-nop-1.7.5.jar                   |  Bin 0 -> 4091 bytes
 java/lib/ext/slf4j-simple-1.7.5.jar                |  Bin 0 -> 10680 bytes
 java/lib/hamcrest-core.jar                         |  Bin 0 -> 45024 bytes
 java/lib/junit.jar                                 |  Bin 0 -> 245039 bytes
 java/lib/simplelogger.properties                   |   36 +
 java/lib/slf4j-api-1.7.5.jar                       |  Bin 0 -> 26084 bytes
 java/src/CMakeLists.txt                            |    8 +
 java/src/Makefile.am                               |  139 +
 java/src/Makefile.in                               | 1050 +++
 java/src/hdf/CMakeLists.txt                        |    4 +
 java/src/hdf/hdf5lib/CMakeLists.txt                |  127 +
 java/src/hdf/hdf5lib/H5.java                       | 9283 ++++++++++++++++++++
 java/src/hdf/hdf5lib/HDF5Constants.java            | 1883 ++++
 java/src/hdf/hdf5lib/HDF5GroupInfo.java            |  171 +
 java/src/hdf/hdf5lib/HDFArray.java                 | 1096 +++
 java/src/hdf/hdf5lib/HDFNativeData.java            |  481 +
 java/src/hdf/hdf5lib/callbacks/Callbacks.java      |   33 +
 java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java |   23 +
 java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java  |   22 +
 java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java  |   21 +
 java/src/hdf/hdf5lib/callbacks/H5D_append_t.java   |   22 +
 java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java |   21 +
 java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java  |   22 +
 java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java    |   23 +
 java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java     |   22 +
 java/src/hdf/hdf5lib/callbacks/H5L_iterate_cb.java |   23 +
 java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java  |   22 +
 java/src/hdf/hdf5lib/callbacks/H5O_iterate_cb.java |   23 +
 java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java  |   22 +
 .../hdf5lib/callbacks/H5P_cls_close_func_cb.java   |   21 +
 .../hdf5lib/callbacks/H5P_cls_close_func_t.java    |   22 +
 .../hdf5lib/callbacks/H5P_cls_copy_func_cb.java    |   21 +
 .../hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java |   22 +
 .../hdf5lib/callbacks/H5P_cls_create_func_cb.java  |   21 +
 .../hdf5lib/callbacks/H5P_cls_create_func_t.java   |   22 +
 java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java |   21 +
 java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java  |   22 +
 .../hdf5lib/callbacks/H5P_prp_close_func_cb.java   |   21 +
 .../hdf5lib/callbacks/H5P_prp_compare_func_cb.java |   21 +
 .../hdf5lib/callbacks/H5P_prp_copy_func_cb.java    |   21 +
 .../hdf5lib/callbacks/H5P_prp_create_func_cb.java  |   21 +
 .../hdf5lib/callbacks/H5P_prp_delete_func_cb.java  |   21 +
 .../hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java |   21 +
 .../hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java |   21 +
 .../hdf/hdf5lib/exceptions/HDF5AtomException.java  |   44 +
 .../hdf5lib/exceptions/HDF5AttributeException.java |   42 +
 .../hdf/hdf5lib/exceptions/HDF5BtreeException.java |   42 +
 .../exceptions/HDF5DataFiltersException.java       |   42 +
 .../exceptions/HDF5DataStorageException.java       |   43 +
 .../exceptions/HDF5DatasetInterfaceException.java  |   42 +
 .../HDF5DataspaceInterfaceException.java           |   43 +
 .../exceptions/HDF5DatatypeInterfaceException.java |   43 +
 java/src/hdf/hdf5lib/exceptions/HDF5Exception.java |   68 +
 .../exceptions/HDF5ExternalFileListException.java  |   43 +
 .../exceptions/HDF5FileInterfaceException.java     |   43 +
 .../exceptions/HDF5FunctionArgumentException.java  |   43 +
 .../exceptions/HDF5FunctionEntryExitException.java |   43 +
 .../hdf/hdf5lib/exceptions/HDF5HeapException.java  |   43 +
 .../exceptions/HDF5InternalErrorException.java     |   43 +
 .../hdf/hdf5lib/exceptions/HDF5JavaException.java  |   45 +
 .../hdf5lib/exceptions/HDF5LibraryException.java   |  383 +
 .../exceptions/HDF5LowLevelIOException.java        |   43 +
 .../exceptions/HDF5MetaDataCacheException.java     |   43 +
 .../exceptions/HDF5ObjectHeaderException.java      |   43 +
 .../HDF5PropertyListInterfaceException.java        |   43 +
 .../hdf5lib/exceptions/HDF5ReferenceException.java |   37 +
 .../HDF5ResourceUnavailableException.java          |   43 +
 .../exceptions/HDF5SymbolTableException.java       |   43 +
 .../hdf/hdf5lib/structs/H5AC_cache_config_t.java   |   99 +
 java/src/hdf/hdf5lib/structs/H5A_info_t.java       |   34 +
 java/src/hdf/hdf5lib/structs/H5E_error2_t.java     |   41 +
 java/src/hdf/hdf5lib/structs/H5F_info2_t.java      |   47 +
 java/src/hdf/hdf5lib/structs/H5G_info_t.java       |   27 +
 java/src/hdf/hdf5lib/structs/H5L_info_t.java       |   38 +
 java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java   |   49 +
 java/src/hdf/hdf5lib/structs/H5O_info_t.java       |   54 +
 java/src/hdf/hdf5lib/structs/H5_ih_info_t.java     |   31 +
 java/src/hdf/overview.html                         |   96 +
 java/src/jni/CMakeLists.txt                        |   85 +
 java/src/jni/Makefile.am                           |   44 +
 java/src/jni/Makefile.in                           | 1486 ++++
 java/src/jni/exceptionImp.c                        |  414 +
 java/src/jni/exceptionImp.h                        |   67 +
 java/src/jni/h5Constants.c                         |  694 ++
 java/src/jni/h5Imp.c                               |  181 +
 java/src/jni/h5Imp.h                               |   95 +
 java/src/jni/h5aImp.c                              |  879 ++
 java/src/jni/h5aImp.h                              |  273 +
 java/src/jni/h5dImp.c                              | 1758 ++++
 java/src/jni/h5dImp.h                              |  319 +
 java/src/jni/h5eImp.c                              |  524 ++
 java/src/jni/h5eImp.h                              |  167 +
 java/src/jni/h5fImp.c                              |  589 ++
 java/src/jni/h5fImp.h                              |  230 +
 java/src/jni/h5gImp.c                              |  257 +
 java/src/jni/h5gImp.h                              |   96 +
 java/src/jni/h5iImp.c                              |  289 +
 java/src/jni/h5iImp.h                              |  143 +
 java/src/jni/h5jni.h                               |  249 +
 java/src/jni/h5lImp.c                              |  736 ++
 java/src/jni/h5lImp.h                              |  183 +
 java/src/jni/h5oImp.c                              |  766 ++
 java/src/jni/h5oImp.h                              |  175 +
 java/src/jni/h5pImp.c                              | 5506 ++++++++++++
 java/src/jni/h5pImp.h                              | 1337 +++
 java/src/jni/h5plImp.c                             |   64 +
 java/src/jni/h5plImp.h                             |   46 +
 java/src/jni/h5rImp.c                              |  324 +
 java/src/jni/h5rImp.h                              |   78 +
 java/src/jni/h5sImp.c                              | 1408 +++
 java/src/jni/h5sImp.h                              |  288 +
 java/src/jni/h5tImp.c                              | 1588 ++++
 java/src/jni/h5tImp.h                              |  550 ++
 java/src/jni/h5util.c                              | 2592 ++++++
 java/src/jni/h5util.h                              |  108 +
 java/src/jni/h5zImp.c                              |   84 +
 java/src/jni/h5zImp.h                              |   55 +
 java/src/jni/nativeData.c                          | 1195 +++
 java/src/jni/nativeData.h                          |  115 +
 java/test/CMakeLists.txt                           |  117 +
 java/test/JUnit-interface.ert                      |    2 +
 java/test/JUnit-interface.txt                      |  652 ++
 java/test/Makefile.am                              |  104 +
 java/test/Makefile.in                              | 1336 +++
 java/test/TestAll.java                             |   40 +
 java/test/TestH5.java                              |  257 +
 java/test/TestH5A.java                             | 1119 +++
 java/test/TestH5D.java                             |  944 ++
 java/test/TestH5Dparams.java                       |  134 +
 java/test/TestH5Dplist.java                        |  216 +
 java/test/TestH5E.java                             |  553 ++
 java/test/TestH5Edefault.java                      |  564 ++
 java/test/TestH5Eregister.java                     |   78 +
 java/test/TestH5F.java                             |  332 +
 java/test/TestH5Fbasic.java                        |  320 +
 java/test/TestH5Fparams.java                       |  215 +
 java/test/TestH5Fswmr.java                         |   93 +
 java/test/TestH5G.java                             |  505 ++
 java/test/TestH5Gbasic.java                        |  371 +
 java/test/TestH5Giterate.java                      |  136 +
 java/test/TestH5Lbasic.java                        |  371 +
 java/test/TestH5Lcreate.java                       |  819 ++
 java/test/TestH5Lparams.java                       |  231 +
 java/test/TestH5Obasic.java                        |  488 +
 java/test/TestH5Ocopy.java                         |  365 +
 java/test/TestH5Ocreate.java                       |  562 ++
 java/test/TestH5Oparams.java                       |  154 +
 java/test/TestH5P.java                             | 1221 +++
 java/test/TestH5PData.java                         |  170 +
 java/test/TestH5PL.java                            |   61 +
 java/test/TestH5Pfapl.java                         | 1381 +++
 java/test/TestH5Plist.java                         | 1013 +++
 java/test/TestH5Pvirtual.java                      |  433 +
 java/test/TestH5R.java                             |  335 +
 java/test/TestH5S.java                             |  590 ++
 java/test/TestH5Sbasic.java                        |  247 +
 java/test/TestH5T.java                             |  459 +
 java/test/TestH5Tbasic.java                        |  161 +
 java/test/TestH5Tparams.java                       |  389 +
 java/test/TestH5Z.java                             |  100 +
 java/test/h5ex_g_iterate.hdf                       |  Bin 0 -> 2928 bytes
 java/test/junit.sh.in                              |  262 +
 m4/ax_check_class.m4                               |  144 +
 m4/ax_check_classpath.m4                           |   60 +
 m4/ax_check_java_home.m4                           |   80 +
 m4/ax_check_junit.m4                               |   70 +
 m4/ax_check_rqrd_class.m4                          |   62 +
 m4/ax_java_check_class.m4                          |   85 +
 m4/ax_java_options.m4                              |   48 +
 m4/ax_jni_include_dir.m4                           |  132 +
 m4/ax_prog_jar.m4                                  |   49 +
 m4/ax_prog_java.m4                                 |  115 +
 m4/ax_prog_java_cc.m4                              |  104 +
 m4/ax_prog_java_works.m4                           |  134 +
 m4/ax_prog_javac.m4                                |   79 +
 m4/ax_prog_javac_works.m4                          |   72 +
 m4/ax_prog_javadoc.m4                              |   50 +
 m4/ax_prog_javah.m4                                |   64 +
 m4/ax_try_compile_java.m4                          |   55 +
 m4/ax_try_run_java.m4                              |   56 +
 release_docs/HISTORY-1_8_0-1_10_0.txt              | 1742 ++++
 release_docs/HISTORY-1_9.txt                       |    6 -
 release_docs/INSTALL                               |    6 +-
 release_docs/INSTALL_CMake.txt                     |  127 +-
 release_docs/INSTALL_Cygwin.txt                    |    8 +-
 release_docs/RELEASE.txt                           |  270 +-
 release_docs/USING_CMake_Examples.txt              |    2 +-
 release_docs/USING_HDF5_CMake.txt                  |   93 +-
 release_docs/USING_HDF5_VS.txt                     |    4 +-
 src/CMakeLists.txt                                 |   10 +-
 src/H5.c                                           |  141 +-
 src/H5A.c                                          |  132 +-
 src/H5AC.c                                         |  198 +-
 src/H5ACmpio.c                                     |   52 +-
 src/H5ACprivate.h                                  |   33 +-
 src/H5Abtree2.c                                    |   41 +-
 src/H5Adeprec.c                                    |   10 +-
 src/H5Aint.c                                       |    6 +-
 src/H5Atest.c                                      |    2 +-
 src/H5B.c                                          |   13 +-
 src/H5B2.c                                         |  148 +-
 src/H5B2cache.c                                    |    4 -
 src/H5B2dbg.c                                      |   44 +-
 src/H5B2hdr.c                                      |    4 +-
 src/H5B2int.c                                      |  648 +-
 src/H5B2pkg.h                                      |   38 +-
 src/H5B2private.h                                  |    7 +-
 src/H5B2test.c                                     |  187 +-
 src/H5Bcache.c                                     |    2 -
 src/H5C.c                                          |  961 +-
 src/H5Cmpio.c                                      |  210 +-
 src/H5Cpkg.h                                       |   15 +-
 src/H5Cprivate.h                                   |   11 +-
 src/H5D.c                                          |   76 +-
 src/H5Dbtree2.c                                    |  174 +-
 src/H5Dchunk.c                                     |  299 +-
 src/H5Dcompact.c                                   |    2 +-
 src/H5Dcontig.c                                    |   58 +-
 src/H5Ddbg.c                                       |    2 +-
 src/H5Ddeprec.c                                    |   21 +-
 src/H5Defl.c                                       |  172 +-
 src/H5Dfill.c                                      |    6 +-
 src/H5Dint.c                                       |  331 +-
 src/H5Dio.c                                        |  128 +-
 src/H5Dlayout.c                                    |   12 +-
 src/H5Dmpio.c                                      |   24 +-
 src/H5Dpkg.h                                       |   44 +-
 src/H5Dprivate.h                                   |    1 +
 src/H5Dscatgath.c                                  |    8 +-
 src/H5Dselect.c                                    |    2 +-
 src/H5Dvirtual.c                                   |   15 +-
 src/H5F.c                                          |  111 +-
 src/H5FDcore.c                                     |    4 -
 src/H5FDint.c                                      |   39 +
 src/H5FDmpio.c                                     |    6 -
 src/H5FDmulti.c                                    |   12 +-
 src/H5FDprivate.h                                  |   19 +
 src/H5FDstdio.c                                    |   21 +-
 src/H5FS.c                                         |    4 +-
 src/H5FScache.c                                    |    6 +-
 src/H5FSpkg.h                                      |    4 +-
 src/H5FSprivate.h                                  |    2 +-
 src/H5FSsection.c                                  |    8 +-
 src/H5Faccum.c                                     |   47 +-
 src/H5Fdeprec.c                                    |    4 +-
 src/H5Fint.c                                       |   58 +-
 src/H5Fio.c                                        |   30 +-
 src/H5Fmount.c                                     |    4 +-
 src/H5Fmpi.c                                       |   69 +
 src/H5Fpkg.h                                       |    5 +-
 src/H5Fprivate.h                                   |   16 +-
 src/H5Fpublic.h                                    |   36 +-
 src/H5Fquery.c                                     |   30 +-
 src/H5Fsuper.c                                     |    6 +-
 src/H5Fsuper_cache.c                               |    3 -
 src/H5Ftest.c                                      |    2 +-
 src/H5G.c                                          |   36 +-
 src/H5Gbtree2.c                                    |   53 +-
 src/H5Gcache.c                                     |    2 -
 src/H5Gdeprec.c                                    |   36 +-
 src/H5Gint.c                                       |   14 +-
 src/H5Gprivate.h                                   |    7 -
 src/H5Gtest.c                                      |   16 +-
 src/H5HFbtree2.c                                   |  109 +-
 src/H5HFcache.c                                    |   61 +-
 src/H5HFdblock.c                                   |    4 +-
 src/H5HFhuge.c                                     |    6 +-
 src/H5HFiblock.c                                   |    8 +-
 src/H5HFsection.c                                  |   13 +-
 src/H5HFtiny.c                                     |    5 +-
 src/H5HG.c                                         |   16 +-
 src/H5HLcache.c                                    |    2 -
 src/H5HLdblk.c                                     |    2 +-
 src/H5I.c                                          |    2 +-
 src/H5Itest.c                                      |    2 +-
 src/H5L.c                                          |  310 +-
 src/H5Lexternal.c                                  |   31 +-
 src/H5Lprivate.h                                   |    2 +
 src/H5MF.c                                         |  189 +-
 src/H5MFprivate.h                                  |   10 +-
 src/H5MFsection.c                                  |    4 +-
 src/H5MM.c                                         |   44 +-
 src/H5O.c                                          |   98 +-
 src/H5Obogus.c                                     |   30 +-
 src/H5Ocache.c                                     |   19 +-
 src/H5Ocopy.c                                      |   29 +-
 src/H5Ofill.c                                      |    6 +-
 src/H5Oflush.c                                     |   16 +-
 src/H5Olayout.c                                    |    2 +-
 src/H5Opkg.h                                       |    6 +-
 src/H5Oprivate.h                                   |   13 +-
 src/H5Oproxy.c                                     |    6 +-
 src/H5Otest.c                                      |   50 +-
 src/H5Pdapl.c                                      |  385 +-
 src/H5Pdcpl.c                                      |   33 +-
 src/H5Pdxpl.c                                      |   35 +-
 src/H5Pfapl.c                                      |  108 +-
 src/H5Pint.c                                       |  107 +-
 src/H5Plapl.c                                      |   12 +-
 src/H5Ppkg.h                                       |   27 -
 src/H5Pprivate.h                                   |   48 +-
 src/H5Ppublic.h                                    |    6 +-
 src/H5R.c                                          |   21 +-
 src/H5Rdeprec.c                                    |    4 +-
 src/H5SM.c                                         |   68 +-
 src/H5SMbtree2.c                                   |   44 +-
 src/H5SMcache.c                                    |    3 +-
 src/H5SMmessage.c                                  |   39 +-
 src/H5SMpkg.h                                      |    2 +-
 src/H5STprivate.h                                  |    4 +-
 src/H5T.c                                          |  368 +-
 src/H5TS.c                                         |   17 +-
 src/H5Tcommit.c                                    |   20 +-
 src/H5Tdeprec.c                                    |    4 +-
 src/H5Tnative.c                                    |    4 +-
 src/H5Tvlen.c                                      |    8 +-
 src/H5Z.c                                          |    2 +-
 src/H5Zscaleoffset.c                               |    6 +-
 src/H5Ztrans.c                                     |    4 +-
 src/H5config.h.in                                  |   44 +-
 src/H5private.h                                    |   86 +-
 src/H5public.h                                     |    4 +-
 src/H5system.c                                     |  129 +-
 src/H5win32defs.h                                  |   23 +-
 src/Makefile.in                                    |   56 +-
 src/libhdf5.settings.in                            |   75 +-
 test/CMakeLists.txt                                |   97 +-
 test/Makefile.am                                   |    6 +-
 test/Makefile.in                                   |   72 +-
 test/accum.c                                       |   20 +-
 test/accum_swmr_reader.c                           |    2 +-
 test/btree2.c                                      | 2984 ++++++-
 test/cache.c                                       |  112 +-
 test/cache_common.c                                |   78 +-
 test/cache_tagging.c                               |   14 +-
 test/dsets.c                                       |  366 +-
 test/dtypes.c                                      |   99 +-
 test/earray.c                                      |  142 +-
 test/efc.c                                         |    4 +-
 test/external.c                                    | 1830 ++--
 test/farray.c                                      |  114 +-
 test/fheap.c                                       |  342 +-
 test/file_image.c                                  |    4 +-
 test/freespace.c                                   |  298 +-
 test/gen_bogus.c                                   |   68 +-
 test/gen_udlinks.c                                 |    3 -
 test/gheap.c                                       |   23 +-
 test/h5test.c                                      |  294 +
 test/h5test.h                                      |   17 +
 test/lheap.c                                       |    8 +-
 test/links.c                                       |   59 +-
 test/mf.c                                          |  680 +-
 test/objcopy.c                                     |  162 +-
 test/ohdr.c                                        |  755 +-
 test/set_extent.c                                  |  292 +-
 test/swmr_addrem_writer.c                          |   68 +-
 test/swmr_check_compat_vfd.c                       |    9 +-
 test/swmr_common.c                                 |   46 +-
 test/swmr_common.h                                 |   12 +-
 test/swmr_generator.c                              |   56 +-
 test/swmr_reader.c                                 |  117 +-
 test/swmr_remove_reader.c                          |  119 +-
 test/swmr_remove_writer.c                          |   80 +-
 test/swmr_sparse_reader.c                          |  102 +-
 test/swmr_sparse_writer.c                          |   57 +-
 test/swmr_start_write.c                            |  166 +-
 test/swmr_writer.c                                 |   76 +-
 test/tbogus.h5                                     |  Bin 2216 -> 4512 bytes
 test/testswmr.sh.in                                |   24 +-
 test/tfile.c                                       |   61 +-
 test/tgenprop.c                                    |    4 +-
 test/tmisc.c                                       |   16 +-
 test/tvlstr.c                                      |   11 +-
 test/vds.c                                         |  160 +-
 test/vds_swmr_reader.c                             |    2 +-
 test/vds_swmr_writer.c                             |    6 +-
 testpar/Makefile.in                                |   56 +-
 testpar/t_cache.c                                  |   21 +-
 testpar/t_file.c                                   |  116 +
 testpar/t_mdset.c                                  |    3 +-
 testpar/t_shapesame.c                              |    4 +-
 testpar/testphdf5.c                                |    7 +-
 testpar/testphdf5.h                                |    1 +
 tools/Makefile.in                                  |   56 +-
 tools/h5copy/Makefile.in                           |   56 +-
 tools/h5diff/Makefile.in                           |   56 +-
 tools/h5dump/CMakeTests.cmake                      |   25 +
 tools/h5dump/CMakeTestsVDS.cmake                   |   28 +
 tools/h5dump/Makefile.in                           |   56 +-
 tools/h5dump/errfiles/tdset-2.err                  |    2 +-
 tools/h5dump/errfiles/tperror.err                  |    2 +-
 tools/h5dump/h5dump.c                              |   18 +-
 tools/h5dump/h5dump.h                              |    2 +
 tools/h5dump/h5dump_ddl.c                          |  306 +-
 tools/h5dump/h5dump_extern.h                       |    2 +
 tools/h5dump/h5dumpgentest.c                       |  177 +-
 tools/h5dump/testh5dump.sh.in                      |   13 +
 tools/h5dump/testh5dumpvds.sh.in                   |   18 +
 tools/h5format_convert/Makefile.in                 |   56 +-
 tools/h5format_convert/h5fc_gentest.c              |  683 +-
 tools/h5format_convert/h5format_convert.c          |  136 +-
 tools/h5format_convert/testfiles/h5fc_d_file.ddl   |   14 +-
 tools/h5format_convert/testfiles/h5fc_dname.ddl    |   14 +-
 tools/h5format_convert/testfiles/h5fc_ext1_f.ddl   |   58 +
 tools/h5format_convert/testfiles/h5fc_ext1_f.h5    |  Bin 0 -> 6760 bytes
 tools/h5format_convert/testfiles/h5fc_ext1_i.ddl   |   58 +
 tools/h5format_convert/testfiles/h5fc_ext1_i.h5    |  Bin 0 -> 6526 bytes
 tools/h5format_convert/testfiles/h5fc_ext1_s.ddl   |   58 +
 tools/h5format_convert/testfiles/h5fc_ext1_s.h5    |  Bin 0 -> 6592 bytes
 tools/h5format_convert/testfiles/h5fc_ext2_if.ddl  |   58 +
 tools/h5format_convert/testfiles/h5fc_ext2_if.h5   |  Bin 0 -> 6526 bytes
 tools/h5format_convert/testfiles/h5fc_ext2_is.ddl  |   58 +
 tools/h5format_convert/testfiles/h5fc_ext2_is.h5   |  Bin 0 -> 6642 bytes
 tools/h5format_convert/testfiles/h5fc_ext2_sf.ddl  |   58 +
 tools/h5format_convert/testfiles/h5fc_ext2_sf.h5   |  Bin 0 -> 5076 bytes
 tools/h5format_convert/testfiles/h5fc_ext3_isf.ddl |   58 +
 tools/h5format_convert/testfiles/h5fc_ext3_isf.h5  |  Bin 0 -> 6679 bytes
 tools/h5format_convert/testfiles/h5fc_ext_none.h5  |  Bin 0 -> 6474 bytes
 tools/h5format_convert/testfiles/h5fc_help.ddl     |   14 +-
 tools/h5format_convert/testfiles/h5fc_latest_v3.h5 |  Bin 6130 -> 0 bytes
 tools/h5format_convert/testfiles/h5fc_non_v3.h5    |  Bin 4336 -> 6896 bytes
 tools/h5format_convert/testfiles/h5fc_nooption.ddl |   14 +-
 tools/h5format_convert/testfiles/h5fc_v1.h5        |  Bin 8252 -> 0 bytes
 tools/h5format_convert/testfiles/h5fc_v_all.ddl    |   68 +-
 tools/h5format_convert/testfiles/h5fc_v_bt1.ddl    |    8 +-
 tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl   |    6 +-
 tools/h5format_convert/testfiles/h5fc_v_n_all.ddl  |   34 +-
 .../testfiles/h5fc_v_ndata_bt1.ddl                 |    8 +-
 .../testfiles/h5fc_v_non_chunked.ddl               |    8 +-
 .../h5format_convert/testfiles/old_h5fc_ext1_f.ddl |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext1_f.h5  |  Bin 0 -> 19987 bytes
 .../h5format_convert/testfiles/old_h5fc_ext1_i.ddl |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext1_i.h5  |  Bin 0 -> 32716 bytes
 .../h5format_convert/testfiles/old_h5fc_ext1_s.ddl |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext1_s.h5  |  Bin 0 -> 20032 bytes
 .../testfiles/old_h5fc_ext2_if.ddl                 |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext2_if.h5 |  Bin 0 -> 32720 bytes
 .../testfiles/old_h5fc_ext2_is.ddl                 |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext2_is.h5 |  Bin 0 -> 32872 bytes
 .../testfiles/old_h5fc_ext2_sf.ddl                 |   58 +
 .../h5format_convert/testfiles/old_h5fc_ext2_sf.h5 |  Bin 0 -> 18512 bytes
 .../testfiles/old_h5fc_ext3_isf.ddl                |   58 +
 .../testfiles/old_h5fc_ext3_isf.h5                 |  Bin 0 -> 32896 bytes
 .../testfiles/old_h5fc_ext_none.h5                 |  Bin 0 -> 19912 bytes
 tools/h5format_convert/testh5fc.sh.in              |  188 +-
 tools/h5import/Makefile.in                         |   56 +-
 tools/h5jam/Makefile.in                            |   56 +-
 tools/h5ls/Makefile.in                             |   56 +-
 tools/h5ls/h5ls.c                                  |    5 +-
 tools/h5repack/CMakeLists.txt                      |   11 +-
 tools/h5repack/Makefile.in                         |   56 +-
 .../testfiles/deflate_limit.h5repack_layout.h5.ddl |   14 +-
 .../h5repack_layout.UD.h5-plugin_none.ddl          |   14 +-
 .../testfiles/h5repack_layout.h5-plugin_test.ddl   |   14 +-
 tools/h5stat/Makefile.in                           |   56 +-
 tools/lib/CMakeLists.txt                           |   18 +-
 tools/lib/Makefile.in                              |   56 +-
 tools/lib/h5tools_dump.c                           |  347 +-
 tools/lib/h5tools_utils.c                          |   51 +-
 tools/misc/Makefile.in                             |   56 +-
 tools/misc/h5debug.c                               |   60 +-
 tools/misc/vds/Makefile.in                         |   56 +-
 tools/perform/Makefile.in                          |   56 +-
 tools/testfiles/h5dump-help.txt                    |    4 +-
 .../pbits/tnofilename-with-packed-bits.ddl         |    4 +-
 tools/testfiles/pbits/tpbitsIncomplete.ddl         |    4 +-
 tools/testfiles/pbits/tpbitsLengthExceeded.ddl     |    4 +-
 tools/testfiles/pbits/tpbitsLengthPositive.ddl     |    4 +-
 tools/testfiles/pbits/tpbitsMaxExceeded.ddl        |    4 +-
 tools/testfiles/pbits/tpbitsOffsetExceeded.ddl     |    4 +-
 tools/testfiles/pbits/tpbitsOffsetNegative.ddl     |    4 +-
 tools/testfiles/tallfilters.ddl                    |    2 +-
 tools/testfiles/tchunked.ddl                       |    2 +-
 tools/testfiles/tcompact.ddl                       |    2 +-
 tools/testfiles/tcontiguos.ddl                     |    2 +-
 tools/testfiles/tdeflate.ddl                       |    2 +-
 tools/testfiles/texternal.ddl                      |    2 +-
 tools/testfiles/tfill.ddl                          |    6 +-
 tools/testfiles/tfletcher32.ddl                    |    2 +-
 tools/testfiles/tints4dims.ddl                     |  202 +
 tools/testfiles/tints4dims.h5                      |  Bin 0 -> 9824 bytes
 tools/testfiles/tints4dimsBlock2.ddl               |   16 +
 tools/testfiles/tints4dimsBlockEq.ddl              |   30 +
 tools/testfiles/tints4dimsCount2.ddl               |   22 +
 tools/testfiles/tints4dimsCountEq.ddl              |   30 +
 tools/testfiles/tints4dimsStride2.ddl              |   22 +
 tools/testfiles/tnbit.ddl                          |    2 +-
 tools/testfiles/tscaleoffset.ddl                   |    2 +-
 tools/testfiles/tshuffle.ddl                       |    2 +-
 tools/testfiles/tszip.ddl                          |    2 +-
 tools/testfiles/tuserfilter.ddl                    |    2 +-
 tools/testfiles/vds/a.h5                           |  Bin 0 -> 7736 bytes
 tools/testfiles/vds/b.h5                           |  Bin 0 -> 7736 bytes
 tools/testfiles/vds/c.h5                           |  Bin 0 -> 7736 bytes
 tools/testfiles/vds/d.h5                           |  Bin 0 -> 7736 bytes
 tools/testfiles/vds/f-0.h5                         |  Bin 0 -> 4144 bytes
 tools/testfiles/vds/f-3.h5                         |  Bin 0 -> 4144 bytes
 tools/testfiles/vds/tvds_layout-1.ddl              |    6 -
 tools/testfiles/vds/tvds_layout-2.ddl              |    6 -
 tools/testfiles/vds/tvds_layout-3_1.ddl            |    6 -
 tools/testfiles/vds/tvds_layout-3_2.ddl            |    6 -
 tools/testfiles/vds/tvds_layout-4.ddl              |    6 -
 tools/testfiles/vds/tvds_layout-5.ddl              |    6 -
 tools/testfiles/vds/vds-eiger.h5                   |  Bin 0 -> 5496 bytes
 tools/testfiles/vds/vds-first.ddl                  |  210 +
 tools/testfiles/vds/vds-gap1.ddl                   |   58 +
 tools/testfiles/vds/vds-gap2.ddl                   |  210 +
 tools/testfiles/vds/vds-percival-unlim-maxmin.h5   |  Bin 0 -> 5496 bytes
 tools/testfiles/vds/vds_layout-eiger.ddl           |   81 +
 tools/testfiles/vds/vds_layout-maxmin.ddl          |  416 +
 878 files changed, 128826 insertions(+), 10955 deletions(-)

diff --git a/ACKNOWLEDGMENTS b/ACKNOWLEDGMENTS
index f1b5b45..eadbf08 100644
--- a/ACKNOWLEDGMENTS
+++ b/ACKNOWLEDGMENTS
@@ -1,8 +1,14 @@
-Acknowledgments - November 2010
--------------------------------
+Acknowledgments
+----------------
 
-We would like to thank the following people who have contributed directly
-or indirectly to HDF5:
+We would like to thank the following people who provided code contributions
+to the HDF5 1.10.0 and eralier eleases:
+
+Steffen Kieß, for contributing code used to specify locations of the external
+files included in the 1.10.0 release. 
+
+Jason Newton, for contributing code used to improve the C/C++ Packet Table
+included in the 1.10.0 release.
 
 Werner Benger, for contributing code used to add support for the Windows 
 Threading library included in the 1.8.6 release.
@@ -10,6 +16,7 @@ Threading library included in the 1.8.6 release.
 John A. Biddiscombe, Mike Jackson, and Sean McBride for contributing and
 testing CMake code included in the HDF5 1.8.5 distribution.
 
+
 The HDF5 community for helping shape the development of HDF5 by contributing
 bug reports and patches, joining in on forum discussions, and continually
 supporting our software.
diff --git a/BRANCH.txt b/BRANCH.txt
deleted file mode 100644
index 2cbc975..0000000
--- a/BRANCH.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-autotools_rework
-
-The purpose of this branch is to make changes to the autotools files,
-particularly configure.ac. This will remove a lot of old cruft and update
-the input files. This effort was started in January 2015 and should be
-completed within the year.
-
-This branch tracks the trunk.
-
-Dana Robinson and Allen Byrne are the owners of this branch.
-
-This branch should be closed when the bulk of the autotools work is
-complete and has been merged into the trunk and 1.8 branch. This
-work should be completed by mid-2015.
-
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 23b55c6..648ae7a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,6 +121,9 @@ set (HDF5_F90_TEST_LIB_CORENAME     "hdf5_test_fortran")
 set (HDF5_F90_C_TEST_LIB_CORENAME   "hdf5_test_f90cstub")
 set (HDF5_HL_F90_LIB_CORENAME       "hdf5_hl_fortran")
 set (HDF5_HL_F90_C_LIB_CORENAME     "hdf5_hl_f90cstub")
+set (HDF5_JAVA_JNI_LIB_CORENAME     "hdf5_java")
+set (HDF5_JAVA_HDF5_LIB_CORENAME    "jarhdf5")
+set (HDF5_JAVA_TEST_LIB_CORENAME    "jartest5")
 
 #-----------------------------------------------------------------------------
 # Set the true names of all the libraries if customized by external project
@@ -137,6 +140,9 @@ set (HDF5_F90_TEST_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_TEST_LIB_
 set (HDF5_F90_C_TEST_LIB_NAME   "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_F90_C_TEST_LIB_CORENAME}")
 set (HDF5_HL_F90_LIB_NAME       "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_F90_LIB_CORENAME}")
 set (HDF5_HL_F90_C_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_HL_F90_C_LIB_CORENAME}")
+set (HDF5_JAVA_JNI_LIB_NAME     "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_JNI_LIB_CORENAME}")
+set (HDF5_JAVA_HDF5_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_HDF5_LIB_CORENAME}")
+set (HDF5_JAVA_TEST_LIB_NAME    "${HDF5_EXTERNAL_LIB_PREFIX}${HDF5_JAVA_TEST_LIB_CORENAME}")
 
 #-----------------------------------------------------------------------------
 # Set the target names of all the libraries
@@ -153,6 +159,9 @@ set (HDF5_F90_TEST_LIB_TARGET     "${HDF5_F90_TEST_LIB_CORENAME}-static")
 set (HDF5_F90_C_TEST_LIB_TARGET   "${HDF5_F90_C_TEST_LIB_CORENAME}-static")
 set (HDF5_HL_F90_LIB_TARGET       "${HDF5_HL_F90_LIB_CORENAME}-static")
 set (HDF5_HL_F90_C_LIB_TARGET     "${HDF5_HL_F90_C_LIB_CORENAME}-static")
+set (HDF5_JAVA_JNI_LIB_TARGET     "${HDF5_JAVA_JNI_LIB_CORENAME}")
+set (HDF5_JAVA_HDF5_LIB_TARGET    "${HDF5_JAVA_HDF5_LIB_CORENAME}")
+set (HDF5_JAVA_TEST_LIB_TARGET    "${HDF5_JAVA_TEST_LIB_CORENAME}")
 set (HDF5_LIBSH_TARGET            "${HDF5_LIB_CORENAME}-shared")
 set (HDF5_TEST_LIBSH_TARGET       "${HDF5_TEST_LIB_CORENAME}-shared")
 set (HDF5_CPP_LIBSH_TARGET        "${HDF5_CPP_LIB_CORENAME}-shared")
@@ -180,20 +189,37 @@ set (HDF5_HL_CPP_SRC_DIR     ${HDF5_SOURCE_DIR}/hl/c++)
 set (HDF5_TOOLS_SRC_DIR      ${HDF5_SOURCE_DIR}/tools)
 set (HDF5_PERFORM_SRC_DIR    ${HDF5_SOURCE_DIR}/tools/perform)
 set (HDF5_F90_SRC_DIR        ${HDF5_SOURCE_DIR}/fortran)
+set (HDF5_JAVA_JNI_SRC_DIR         ${HDF5_SOURCE_DIR}/java/src/jni)
+set (HDF5_JAVA_HDF5_SRC_DIR        ${HDF5_SOURCE_DIR}/java/src/hdf)
+set (HDF5_JAVA_TEST_SRC_DIR        ${HDF5_SOURCE_DIR}/java/test)
+set (HDF5_JAVA_LIB_DIR             ${HDF5_SOURCE_DIR}/java/lib)
+set (HDF5_JAVA_LOGGING_JAR         ${HDF5_SOURCE_DIR}/java/lib/slf4j-api-1.7.5.jar)
+set (HDF5_JAVA_LOGGING_NOP_JAR     ${HDF5_SOURCE_DIR}/java/lib/ext/slf4j-nop-1.7.5.jar)
+set (HDF5_JAVA_LOGGING_SIMPLE_JAR  ${HDF5_SOURCE_DIR}/java/lib/ext/slf4j-simple-1.7.5.jar)
+
+if (APPLE)
+  option (HDF5_BUILD_FRAMEWORKS "TRUE to build as frameworks libraries, FALSE to build according to BUILD_SHARED_LIBS" FALSE)
+endif (APPLE)
 
 if (NOT HDF5_INSTALL_BIN_DIR)
   set (HDF5_INSTALL_BIN_DIR bin)
 endif (NOT HDF5_INSTALL_BIN_DIR)
 if (NOT HDF5_INSTALL_LIB_DIR)
   if (APPLE)
+    if (HDF5_BUILD_FRAMEWORKS)
+      set (HDF5_INSTALL_JAR_DIR ../Java)
+    else (HDF5_BUILD_FRAMEWORKS)
+      set (HDF5_INSTALL_JAR_DIR lib)
+    endif (HDF5_BUILD_FRAMEWORKS)
     set (HDF5_INSTALL_FMWK_DIR ${CMAKE_INSTALL_FRAMEWORK_PREFIX})
+  else (APPLE)
+    set (HDF5_INSTALL_JAR_DIR lib)
   endif (APPLE)
   set (HDF5_INSTALL_LIB_DIR lib)
 endif (NOT HDF5_INSTALL_LIB_DIR)
 if (NOT HDF5_INSTALL_INCLUDE_DIR)
   set (HDF5_INSTALL_INCLUDE_DIR include)
 endif (NOT HDF5_INSTALL_INCLUDE_DIR)
-option (HDF5_BUILD_FRAMEWORKS "TRUE to build as frameworks libraries, FALSE to build according to BUILD_SHARED_LIBS" FALSE)
 if (NOT HDF5_INSTALL_DATA_DIR)
   if (NOT WIN32)
     if (APPLE)
@@ -242,6 +268,83 @@ string (REGEX REPLACE ".*LT_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
     "\\1" H5_SOVERS_RELEASE ${_lt_vers_am_contents})
 MATH (EXPR H5_SOVERS_MAJOR ${H5_SOVERS_INTERFACE}-${H5_SOVERS_RELEASE})
 message (STATUS "SOVERSION: ${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+string (REGEX MATCH ".*LT_TOOLS_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_TOOLS_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_TOOLS_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_TOOLS_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_TOOLS_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_TOOLS_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_TOOLS_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_TOOLS_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_TOOLS_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_TOOLS_SOVERS_MAJOR ${H5_TOOLS_SOVERS_INTERFACE}-${H5_TOOLS_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_TOOLS: ${H5_TOOLS_SOVERS_MAJOR}.${H5_TOOLS_SOVERS_RELEASE}.${H5_TOOLS_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_CXX_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_CXX_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_CXX_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_CXX_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_CXX_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_CXX_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_CXX_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_CXX_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_CXX_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_CXX_SOVERS_MAJOR ${H5_CXX_SOVERS_INTERFACE}-${H5_CXX_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_CXX: ${H5_CXX_SOVERS_MAJOR}.${H5_CXX_SOVERS_RELEASE}.${H5_CXX_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_F_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_F_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_F_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_F_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_F_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_F_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_F_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_F_SOVERS_MAJOR ${H5_F_SOVERS_INTERFACE}-${H5_F_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_F: ${H5_F_SOVERS_MAJOR}.${H5_F_SOVERS_RELEASE}.${H5_F_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_HL_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_HL_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_HL_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_HL_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_HL_SOVERS_MAJOR ${H5_HL_SOVERS_INTERFACE}-${H5_HL_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_HL: ${H5_HL_SOVERS_MAJOR}.${H5_HL_SOVERS_RELEASE}.${H5_HL_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_HL_CXX_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_HL_CXX_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_HL_CXX_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_HL_CXX_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_CXX_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_CXX_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_CXX_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_CXX_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_CXX_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_HL_CXX_SOVERS_MAJOR ${H5_HL_CXX_SOVERS_INTERFACE}-${H5_HL_CXX_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_HL_CXX: ${H5_HL_CXX_SOVERS_MAJOR}.${H5_HL_CXX_SOVERS_RELEASE}.${H5_HL_CXX_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_HL_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_HL_F_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_HL_F_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_HL_F_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_F_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_F_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_F_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_HL_F_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_HL_F_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_HL_F_SOVERS_MAJOR ${H5_HL_F_SOVERS_INTERFACE}-${H5_HL_F_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_HL_F: ${H5_HL_F_SOVERS_MAJOR}.${H5_HL_F_SOVERS_RELEASE}.${H5_HL_F_SOVERS_MINOR}")
+endif()
+string (REGEX REPLACE ".*LT_JAVA_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$" H5_JAVA_SOVERS_EXISTS ${_lt_vers_am_contents})
+if(H5_JAVA_SOVERS_EXISTS)
+  string (REGEX REPLACE ".*LT_JAVA_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_JAVA_SOVERS_INTERFACE ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_JAVA_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_JAVA_SOVERS_MINOR ${_lt_vers_am_contents})
+  string (REGEX REPLACE ".*LT_JAVA_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+      "\\1" H5_JAVA_SOVERS_RELEASE ${_lt_vers_am_contents})
+  MATH (EXPR H5_JAVA_SOVERS_MAJOR ${H5_JAVA_SOVERS_INTERFACE}-${H5_JAVA_SOVERS_RELEASE})
+  message (STATUS "SOVERSION_JAVA: ${H5_JAVA_SOVERS_MAJOR}.${H5_JAVA_SOVERS_RELEASE}.${H5_JAVA_SOVERS_MINOR}")
+endif()
 
 #-----------------------------------------------------------------------------
 # Basic HDF5 stuff here
@@ -257,6 +360,41 @@ 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_RELEASE}.${H5_SOVERS_MINOR}")
+if(H5_TOOLS_SOVERS_EXISTS)
+  set (HDF5_TOOLS_PACKAGE_SOVERSION "${H5_TOOLS_SOVERS_MAJOR}.${H5_TOOLS_SOVERS_RELEASE}.${H5_TOOLS_SOVERS_MINOR}")
+else()
+  set (HDF5_TOOLS_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_CXX_SOVERS_EXISTS)
+  set (HDF5_CXX_PACKAGE_SOVERSION "${H5_CXX_SOVERS_MAJOR}.${H5_CXX_SOVERS_RELEASE}.${H5_CXX_SOVERS_MINOR}")
+else()
+  set (HDF5_CXX_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_F_SOVERS_EXISTS)
+  set (HDF5_F_PACKAGE_SOVERSION "${H5_F_SOVERS_MAJOR}.${H5_F_SOVERS_RELEASE}.${H5_F_SOVERS_MINOR}")
+else()
+  set (HDF5_F_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_HL_SOVERS_EXISTS)
+  set (HDF5_HL_PACKAGE_SOVERSION "${H5_HL_SOVERS_MAJOR}.${H5_HL_SOVERS_RELEASE}.${H5_HL_SOVERS_MINOR}")
+else()
+  set (HDF5_HL_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_HL_F_SOVERS_EXISTS)
+  set (HDF5_HL_CXX_PACKAGE_SOVERSION "${H5_HL_CXX_SOVERS_MAJOR}.${H5_HL_CXX_SOVERS_RELEASE}.${H5_HL_CXX_SOVERS_MINOR}")
+else()
+  set (HDF5_HL_CXX_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_HL_F_SOVERS_EXISTS)
+  set (HDF5_HL_F_PACKAGE_SOVERSION "${H5_HL_F_SOVERS_MAJOR}.${H5_HL_F_SOVERS_RELEASE}.${H5_HL_F_SOVERS_MINOR}")
+else()
+  set (HDF5_HL_F_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
+if(H5_JAVA_SOVERS_EXISTS)
+  set (HDF5_PACKAGE_SOVERSION "${H5_JAVA_SOVERS_MAJOR}.${H5_JAVA_SOVERS_RELEASE}.${H5_JAVA_SOVERS_MINOR}")
+else()
+  set (HDF5_JAVA_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_RELEASE}.${H5_SOVERS_MINOR}")
+endif()
 set (HDF5_PACKAGE_STRING "${HDF5_PACKAGE_NAME} ${HDF5_PACKAGE_VERSION_STRING}")
 set (HDF5_PACKAGE_TARNAME "${HDF5_PACKAGE}${HDF_PACKAGE_EXT}")
 set (HDF5_PACKAGE_URL "http://www.hdfgroup.org")
@@ -285,6 +423,11 @@ if (NOT HDF5_EXTERNALLY_CONFIGURED)
   set (CMAKE_Fortran_MODULE_DIRECTORY
       ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single Directory for all fortran modules."
   )
+  if (WIN32)
+    set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_BUILD_TYPE})
+  else (WIN32)
+    set (CMAKE_TEST_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+  endif (WIN32)
 else (NOT HDF5_EXTERNALLY_CONFIGURED)
   # if we are externally configured, but the project uses old cmake scripts
   # this may not be set and utilities like H5detect will fail
@@ -773,11 +916,21 @@ endif (EXISTS "${HDF5_SOURCE_DIR}/c++" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/c++"
 # Check if Fortran's default real is double precision. If it is and HL is
 # being built then configure should fail due to bug HDFFV-889.
 #-----------------------------------------------------------------------------
- if (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB )
-   if (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
-     message (FATAL_ERROR " **** Fortran high-level routines are not supported when the default REAL is DOUBLE PRECISION, use HDF5_BUILD_HL_LIB:BOOL=OFF **** ")
-   endif (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
- endif (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB )
+if (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB)
+  if (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+    message (FATAL_ERROR " **** Fortran high-level routines are not supported when the default REAL is DOUBLE PRECISION, use HDF5_BUILD_HL_LIB:BOOL=OFF **** ")
+  endif (NOT FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
+endif (HDF5_BUILD_FORTRAN AND HDF5_BUILD_HL_LIB)
+
+#-----------------------------------------------------------------------------
+# Option to build HDF5 Java Library
+#-----------------------------------------------------------------------------
+if (EXISTS "${HDF5_SOURCE_DIR}/java" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/java")
+  option (HDF5_BUILD_JAVA  "Build Java HDF5 Library" OFF)
+  if (HDF5_BUILD_JAVA)
+    add_subdirectory (${HDF5_SOURCE_DIR}/java ${PROJECT_BINARY_DIR}/java)
+  endif (HDF5_BUILD_JAVA)
+endif (EXISTS "${HDF5_SOURCE_DIR}/java" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/java")
 
 #-----------------------------------------------------------------------------
 # Generate the H5pubconf.h file containing user settings needed by compilation
diff --git a/COPYING b/COPYING
index 8428f33..2166ced 100644
--- a/COPYING
+++ b/COPYING
@@ -4,7 +4,7 @@ HDF5 (Hierarchical Data Format 5) Software Library and Utilities
 -----------------------------------------------------------------------------
 
 HDF5 (Hierarchical Data Format 5) Software Library and Utilities
-Copyright 2006-2015 by The HDF Group.
+Copyright 2006-2016 by The HDF Group.
 
 NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
 Copyright 1998-2006 by the Board of Trustees of the University of Illinois.
diff --git a/MANIFEST b/MANIFEST
index 78405b9..3970410 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -27,14 +27,32 @@
 ./MANIFEST
 ./Makefile.dist
 ./Makefile.am
-./m4/aclocal_fc.m4
-./m4/aclocal_cxx.m4
 ./README.txt
-./BRANCH.txt
 ./acsite.m4
 ./autogen.sh
 ./configure.ac
 
+./m4/aclocal_cxx.m4
+./m4/aclocal_fc.m4
+./m4/ax_check_class.m4
+./m4/ax_check_classpath.m4
+./m4/ax_check_java_home.m4
+./m4/ax_check_junit.m4
+./m4/ax_check_rqrd_class.m4
+./m4/ax_java_check_class.m4
+./m4/ax_java_options.m4
+./m4/ax_jni_include_dir.m4
+./m4/ax_prog_jar.m4
+./m4/ax_prog_java_cc.m4
+./m4/ax_prog_java_works.m4
+./m4/ax_prog_java.m4
+./m4/ax_prog_javac_works.m4
+./m4/ax_prog_javac.m4
+./m4/ax_prog_javadoc.m4
+./m4/ax_prog_javah.m4
+./m4/ax_try_compile_java.m4
+./m4/ax_try_run_java.m4
+
 ./bin/COPYING
 ./bin/bbrelease         _DO_NOT_DISTRIBUTE_
 ./bin/buildhdf5
@@ -81,6 +99,7 @@
 ./config/conclude_fc.am
 ./config/examples.am
 ./config/freebsd
+./config/gnu-cxxflags
 ./config/gnu-fflags
 ./config/gnu-flags
 ./config/i386-pc-cygwin32
@@ -215,6 +234,7 @@
 ./fortran/src/H5f90global.F90
 ./fortran/src/H5f90i.h
 ./fortran/src/H5f90kit.c
+./fortran/src/H5fortkit.F90
 ./fortran/src/H5f90proto.h
 ./fortran/src/H5match_types.c
 ./fortran/src/HDF5.F90
@@ -381,6 +401,7 @@
 ./c++/test/dsets.cpp
 ./c++/test/h5cpputil.cpp
 ./c++/test/h5cpputil.h
+./c++/test/tarray.cpp
 ./c++/test/tattr.cpp
 ./c++/test/tcompound.cpp
 ./c++/test/tdspl.cpp
@@ -403,7 +424,7 @@
 
 ./release_docs/COPYING
 ./release_docs/HISTORY-1_0-1_8_0_rc3.txt
-./release_docs/HISTORY-1_9.txt
+./release_docs/HISTORY-1_8_0-1_10_0.txt
 ./release_docs/INSTALL
 ./release_docs/INSTALL_CMake.txt
 ./release_docs/INSTALL_Cygwin.txt
@@ -1282,9 +1303,37 @@
 ./tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl
 ./tools/h5format_convert/testfiles/h5fc_nonexistfile.ddl
 ./tools/h5format_convert/testfiles/h5fc_non_v3.h5
-./tools/h5format_convert/testfiles/h5fc_latest_v3.h5
 ./tools/h5format_convert/testfiles/h5fc_edge_v3.h5
-./tools/h5format_convert/testfiles/h5fc_v1.h5
+./tools/h5format_convert/testfiles/h5fc_ext1_f.h5
+./tools/h5format_convert/testfiles/h5fc_ext1_i.h5
+./tools/h5format_convert/testfiles/h5fc_ext1_s.h5
+./tools/h5format_convert/testfiles/h5fc_ext2_if.h5
+./tools/h5format_convert/testfiles/h5fc_ext2_is.h5
+./tools/h5format_convert/testfiles/h5fc_ext2_sf.h5
+./tools/h5format_convert/testfiles/h5fc_ext3_isf.h5
+./tools/h5format_convert/testfiles/h5fc_ext_none.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext1_f.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext1_i.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext1_s.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext2_if.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext2_is.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext2_sf.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext3_isf.h5
+./tools/h5format_convert/testfiles/old_h5fc_ext_none.h5
+./tools/h5format_convert/testfiles/h5fc_ext1_f.ddl
+./tools/h5format_convert/testfiles/h5fc_ext1_i.ddl
+./tools/h5format_convert/testfiles/h5fc_ext1_s.ddl
+./tools/h5format_convert/testfiles/h5fc_ext2_if.ddl
+./tools/h5format_convert/testfiles/h5fc_ext2_is.ddl
+./tools/h5format_convert/testfiles/h5fc_ext2_sf.ddl
+./tools/h5format_convert/testfiles/h5fc_ext3_isf.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext1_f.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext1_i.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext1_s.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext2_if.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext2_is.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext2_sf.ddl
+./tools/h5format_convert/testfiles/old_h5fc_ext3_isf.ddl
 ./tools/h5format_convert/testh5fc.sh.in
 
 # h5repack sources
@@ -1598,6 +1647,13 @@
 ./tools/testfiles/tindicessub3.ddl
 ./tools/testfiles/tindicessub4.ddl
 ./tools/testfiles/tindicessub1.ddl
+./tools/testfiles/tints4dims.ddl
+./tools/testfiles/tints4dimsBlock2.ddl
+./tools/testfiles/tints4dimsBlockEq.ddl
+./tools/testfiles/tints4dimsCount2.ddl
+./tools/testfiles/tints4dimsCountEq.ddl
+./tools/testfiles/tints4dimsStride2.ddl
+./tools/testfiles/tints4dims.h5
 ./tools/testfiles/tintsattrs.ddl
 ./tools/testfiles/tintsattrs.h5
 ./tools/testfiles/tlarge_objname.ddl
@@ -1813,6 +1869,11 @@
 ./tools/testfiles/vds/tvds_layout-3_2.ddl
 ./tools/testfiles/vds/tvds_layout-4.ddl
 ./tools/testfiles/vds/tvds_layout-5.ddl
+./tools/testfiles/vds/vds-first.ddl
+./tools/testfiles/vds/vds-gap1.ddl
+./tools/testfiles/vds/vds-gap2.ddl
+./tools/testfiles/vds/vds_layout-eiger.ddl
+./tools/testfiles/vds/vds_layout-maxmin.ddl
 ./tools/testfiles/vds/1_a.h5
 ./tools/testfiles/vds/1_b.h5
 ./tools/testfiles/vds/1_c.h5
@@ -1836,6 +1897,14 @@
 ./tools/testfiles/vds/5_b.h5
 ./tools/testfiles/vds/5_c.h5
 ./tools/testfiles/vds/5_vds.h5
+./tools/testfiles/vds/a.h5
+./tools/testfiles/vds/b.h5
+./tools/testfiles/vds/c.h5
+./tools/testfiles/vds/d.h5
+./tools/testfiles/vds/vds-percival-unlim-maxmin.h5
+./tools/testfiles/vds/f-0.h5
+./tools/testfiles/vds/f-3.h5
+./tools/testfiles/vds/vds-eiger.h5
 
 # h5dump h5import validation
 ./tools/testfiles/out3.h5import
@@ -2435,6 +2504,7 @@
 ./hl/test/test_lite.c
 ./hl/test/test_packet.c
 ./hl/test/test_table_be.h5
+./hl/test/test_packet_vlen.c
 ./hl/test/test_table.c
 ./hl/test/test_table_cray.h5
 ./hl/test/test_table_le.h5
@@ -2543,13 +2613,320 @@
 ./hl/c++/test/ptableTest.cpp
 ./hl/c++/test/Makefile.am
 
+# java
+./java/COPYING
+./java/Makefile.am
+./java/Makefile.in
+./java/CMakeLists.txt
+
+./java/src/Makefile.am
+./java/src/Makefile.in
+./java/src/CMakeLists.txt
+./java/src/jni/Makefile.am
+./java/src/jni/Makefile.in
+./java/src/jni/CMakeLists.txt
+./java/src/jni/exceptionImp.c
+./java/src/jni/exceptionImp.h
+./java/src/jni/h5Constants.c
+./java/src/jni/nativeData.c
+./java/src/jni/nativeData.h
+./java/src/jni/h5jni.h
+./java/src/jni/h5util.c
+./java/src/jni/h5util.h
+./java/src/jni/h5Imp.c
+./java/src/jni/h5Imp.h
+./java/src/jni/h5aImp.c
+./java/src/jni/h5aImp.h
+./java/src/jni/h5dImp.c
+./java/src/jni/h5dImp.h
+./java/src/jni/h5eImp.c
+./java/src/jni/h5eImp.h
+./java/src/jni/h5fImp.c
+./java/src/jni/h5fImp.h
+./java/src/jni/h5gImp.c
+./java/src/jni/h5gImp.h
+./java/src/jni/h5iImp.c
+./java/src/jni/h5iImp.h
+./java/src/jni/h5lImp.c
+./java/src/jni/h5lImp.h
+./java/src/jni/h5oImp.c
+./java/src/jni/h5oImp.h
+./java/src/jni/h5pImp.c
+./java/src/jni/h5pImp.h
+./java/src/jni/h5plImp.c
+./java/src/jni/h5plImp.h
+./java/src/jni/h5rImp.c
+./java/src/jni/h5rImp.h
+./java/src/jni/h5sImp.c
+./java/src/jni/h5sImp.h
+./java/src/jni/h5tImp.c
+./java/src/jni/h5tImp.h
+./java/src/jni/h5zImp.c
+./java/src/jni/h5zImp.h
+
+./java/src/hdf/CMakeLists.txt
+./java/src/hdf/overview.html
+./java/src/hdf/hdf5lib/CMakeLists.txt
+
+./java/src/hdf/hdf5lib/callbacks/Callbacks.java
+./java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java
+./java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java
+./java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5D_append_t.java
+./java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java
+./java/src/hdf/hdf5lib/callbacks/H5L_iterate_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java
+./java/src/hdf/hdf5lib/callbacks/H5O_iterate_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java
+./java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java
+
+./java/src/hdf/hdf5lib/exceptions/HDF5AtomException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5Exception.java
+./java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java
+./java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java
+
+./java/src/hdf/hdf5lib/structs/H5_ih_info_t.java
+./java/src/hdf/hdf5lib/structs/H5A_info_t.java
+./java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java
+./java/src/hdf/hdf5lib/structs/H5E_error2_t.java
+./java/src/hdf/hdf5lib/structs/H5F_info2_t.java
+./java/src/hdf/hdf5lib/structs/H5G_info_t.java
+./java/src/hdf/hdf5lib/structs/H5L_info_t.java
+./java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java
+./java/src/hdf/hdf5lib/structs/H5O_info_t.java
+
+./java/src/hdf/hdf5lib/H5.java
+./java/src/hdf/hdf5lib/HDF5Constants.java
+./java/src/hdf/hdf5lib/HDF5GroupInfo.java
+./java/src/hdf/hdf5lib/HDFArray.java
+./java/src/hdf/hdf5lib/HDFNativeData.java
+
+./java/examples/Makefile.am
+./java/examples/Makefile.in
+./java/examples/CMakeLists.txt
+
+./java/examples/intro/Makefile.am
+./java/examples/intro/Makefile.in
+./java/examples/intro/CMakeLists.txt
+./java/examples/intro/runExample.sh.in
+./java/examples/intro/H5_CreateAttribute.java
+./java/examples/intro/H5_CreateDataset.java
+./java/examples/intro/H5_CreateFile.java
+./java/examples/intro/H5_CreateGroup.java
+./java/examples/intro/H5_CreateGroupAbsoluteRelative.java
+./java/examples/intro/H5_CreateGroupDataset.java
+./java/examples/intro/H5_ReadWrite.java
+
+./java/examples/groups/Makefile.am
+./java/examples/groups/Makefile.in
+./java/examples/groups/CMakeLists.txt
+./java/examples/groups/runExample.sh.in
+./java/examples/groups/H5Ex_G_Create.java
+./java/examples/groups/H5Ex_G_Iterate.java
+./java/examples/groups/H5Ex_G_Compact.java
+./java/examples/groups/H5Ex_G_Corder.java
+./java/examples/groups/H5Ex_G_Intermediate.java
+./java/examples/groups/H5Ex_G_Phase.java
+./java/examples/groups/H5Ex_G_Traverse.java
+./java/examples/groups/H5Ex_G_Visit.java
+./java/examples/groups/h5ex_g_iterate.h5
+./java/examples/groups/h5ex_g_visit.h5
+
+./java/examples/datasets/Makefile.am
+./java/examples/datasets/Makefile.in
+./java/examples/datasets/CMakeLists.txt
+./java/examples/datasets/runExample.sh.in
+./java/examples/datasets/H5Ex_D_Alloc.java
+./java/examples/datasets/H5Ex_D_Checksum.java
+./java/examples/datasets/H5Ex_D_Chunk.java
+./java/examples/datasets/H5Ex_D_Compact.java
+./java/examples/datasets/H5Ex_D_External.java
+./java/examples/datasets/H5Ex_D_FillValue.java
+./java/examples/datasets/H5Ex_D_Gzip.java
+./java/examples/datasets/H5Ex_D_Hyperslab.java
+./java/examples/datasets/H5Ex_D_ReadWrite.java
+./java/examples/datasets/H5Ex_D_Shuffle.java
+./java/examples/datasets/H5Ex_D_Szip.java
+./java/examples/datasets/H5Ex_D_UnlimitedAdd.java
+./java/examples/datasets/H5Ex_D_UnlimitedGzip.java
+./java/examples/datasets/H5Ex_D_UnlimitedMod.java
+./java/examples/datasets/H5Ex_D_Nbit.java
+./java/examples/datasets/H5Ex_D_Transform.java
+./java/examples/datasets/H5Ex_D_Sofloat.java
+./java/examples/datasets/H5Ex_D_Soint.java
+
+./java/examples/datatypes/Makefile.am
+./java/examples/datatypes/Makefile.in
+./java/examples/datatypes/CMakeLists.txt
+./java/examples/datatypes/runExample.sh.in
+./java/examples/datatypes/H5Ex_T_Array.java
+./java/examples/datatypes/H5Ex_T_ArrayAttribute.java
+./java/examples/datatypes/H5Ex_T_Bit.java
+./java/examples/datatypes/H5Ex_T_BitAttribute.java
+./java/examples/datatypes/H5Ex_T_Commit.java
+./java/examples/datatypes/H5Ex_T_Compound.java
+./java/examples/datatypes/H5Ex_T_CompoundAttribute.java
+./java/examples/datatypes/H5Ex_T_Float.java
+./java/examples/datatypes/H5Ex_T_FloatAttribute.java
+./java/examples/datatypes/H5Ex_T_Integer.java
+./java/examples/datatypes/H5Ex_T_IntegerAttribute.java
+./java/examples/datatypes/H5Ex_T_ObjectReference.java
+./java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java
+./java/examples/datatypes/H5Ex_T_Opaque.java
+./java/examples/datatypes/H5Ex_T_OpaqueAttribute.java
+./java/examples/datatypes/H5Ex_T_String.java
+./java/examples/datatypes/H5Ex_T_StringAttribute.java
+./java/examples/datatypes/H5Ex_T_VLString.java
+
+./java/examples/testfiles/examples.intro.H5_CreateAttribute.txt
+./java/examples/testfiles/examples.intro.H5_CreateDataset.txt
+./java/examples/testfiles/examples.intro.H5_CreateFile.txt
+./java/examples/testfiles/examples.intro.H5_CreateGroup.txt
+./java/examples/testfiles/examples.intro.H5_CreateGroupAbsoluteRelative.txt
+./java/examples/testfiles/examples.intro.H5_CreateGroupDataset.txt
+./java/examples/testfiles/examples.intro.H5_ReadWrite.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Create.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Iterate.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Compact.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Corder.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Intermediate.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Phase.txt
+./java/examples/testfiles/examples.groups.H5Ex_G_Visit.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Alloc.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Checksum.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Chunk.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Compact.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_External.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_FillValue.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Gzip.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Hyperslab.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_ReadWrite.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Shuffle.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Szip.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedAdd.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedGzip.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedMod.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Nbit.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Transform.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Sofloat.txt
+./java/examples/testfiles/examples.datasets.H5Ex_D_Soint.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Array.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_ArrayAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Bit.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_BitAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Commit.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Compound.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_CompoundAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Float.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_FloatAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Integer.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_IntegerAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReference.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_Opaque.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_OpaqueAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_String.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_StringAttribute.txt
+./java/examples/testfiles/examples.datatypes.H5Ex_T_VLString.txt
+
+./java/test/Makefile.am
+./java/test/Makefile.in
+./java/test/CMakeLists.txt
+./java/test/junit.sh.in
+./java/test/JUnit-interface.txt
+./java/test/JUnit-interface.ert
+./java/test/h5ex_g_iterate.hdf
+./java/test/TestH5.java
+./java/test/TestH5A.java
+./java/test/TestH5Dparams.java
+./java/test/TestH5D.java
+./java/test/TestH5Dplist.java
+./java/test/TestH5E.java
+./java/test/TestH5Edefault.java
+./java/test/TestH5Eregister.java
+./java/test/TestH5Fparams.java
+./java/test/TestH5Fbasic.java
+./java/test/TestH5F.java
+./java/test/TestH5Fswmr.java
+./java/test/TestH5Gbasic.java
+./java/test/TestH5G.java
+./java/test/TestH5Giterate.java
+./java/test/TestH5Lparams.java
+./java/test/TestH5Lbasic.java
+./java/test/TestH5Lcreate.java
+./java/test/TestH5Oparams.java
+./java/test/TestH5Obasic.java
+./java/test/TestH5Ocreate.java
+./java/test/TestH5Ocopy.java
+./java/test/TestH5P.java
+./java/test/TestH5PData.java
+./java/test/TestH5Pfapl.java
+./java/test/TestH5Plist.java
+./java/test/TestH5Pvirtual.java
+./java/test/TestH5PL.java
+./java/test/TestH5R.java
+./java/test/TestH5Sbasic.java
+./java/test/TestH5S.java
+./java/test/TestH5Tparams.java
+./java/test/TestH5Tbasic.java
+./java/test/TestH5T.java
+./java/test/TestH5Z.java
+./java/test/TestAll.java
+
+./java/lib/hamcrest-core.jar
+./java/lib/junit.jar
+./java/lib/simplelogger.properties
+./java/lib/slf4j-api-1.7.5.jar
+./java/lib/ext/slf4j-nop-1.7.5.jar
+./java/lib/ext/slf4j-simple-1.7.5.jar
+
 # CMake-specific Files
 ./config/cmake/cacheinit.cmake
+./config/cmake/CMakeFindJavaCommon.cmake
 ./config/cmake/ConversionTests.c
 ./config/cmake/ConfigureChecks.cmake
 ./config/cmake/CPack.Info.plist.in
 ./config/cmake/CTestCustom.cmake
 ./config/cmake/FindHDF5.cmake.in
+./config/cmake/FindHDFJAVA.cmake.in
+./config/cmake/FindJNI.cmake
 ./config/cmake/H5cxx_config.h.in
 ./config/cmake/H5pubconf.h.in
 ./config/cmake/hdf5-config.cmake.in
@@ -2558,11 +2935,15 @@
 ./config/cmake/HDF5_Process_Flex_Files.cmake
 ./config/cmake/HDF5Macros.cmake
 ./config/cmake/HDF5UseFortran.cmake
+./config/cmake/jrunTest.cmake
 ./config/cmake/libhdf5.settings.cmake.in
 ./config/cmake/mccacheinit.cmake
 ./config/cmake/patch.xml
 ./config/cmake/PkgInfo.in
 ./config/cmake/README.txt.cmake.in
+./config/cmake/UseJava.cmake
+./config/cmake/UseJavaClassFilelist.cmake
+./config/cmake/UseJavaSymlinks.cmake
 ./config/cmake/userblockTest.cmake
 ./config/cmake/vfdTest.cmake
 
diff --git a/Makefile.am b/Makefile.am
index c34f2cd..bbab346 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -66,6 +66,11 @@ if BUILD_FORTRAN_CONDITIONAL
 else
    FORTRAN_DIR=
 endif
+if BUILD_JAVA_CONDITIONAL
+   JAVA_DIR=java
+else
+   JAVA_DIR=
+endif
 if BUILD_HDF5_HL_CONDITIONAL
    HDF5_HL_DIR =hl
 else
@@ -73,8 +78,8 @@ else
 endif
 
 SUBDIRS = src test $(TESTPARALLEL_DIR) tools . $(CXX_DIR) $(FORTRAN_DIR) \
-          $(HDF5_HL_DIR)
-DIST_SUBDIRS = src test testpar tools . c++ fortran hl examples
+          $(JAVA_DIR) $(HDF5_HL_DIR)
+DIST_SUBDIRS = src test testpar tools . c++ fortran hl examples java
 
 # Some files generated during configure that should be cleaned
 DISTCLEANFILES=config/stamp1 config/stamp2
diff --git a/Makefile.in b/Makefile.in
index f92c941..9a7cbed 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -123,10 +123,23 @@ host_triplet = @host@
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
@@ -255,18 +268,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -279,7 +296,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -317,10 +333,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -331,6 +351,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -341,8 +362,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -357,6 +390,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -364,6 +399,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -387,6 +423,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -402,7 +439,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -411,8 +450,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -491,6 +532,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
@@ -543,12 +585,14 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2 *-tmp
 @BUILD_CXX_CONDITIONAL_TRUE at CXX_DIR = c++
 @BUILD_FORTRAN_CONDITIONAL_FALSE at FORTRAN_DIR = 
 @BUILD_FORTRAN_CONDITIONAL_TRUE at FORTRAN_DIR = fortran
+ at BUILD_JAVA_CONDITIONAL_FALSE@JAVA_DIR = 
+ at BUILD_JAVA_CONDITIONAL_TRUE@JAVA_DIR = java
 @BUILD_HDF5_HL_CONDITIONAL_FALSE at HDF5_HL_DIR = 
 @BUILD_HDF5_HL_CONDITIONAL_TRUE at HDF5_HL_DIR = hl
 SUBDIRS = src test $(TESTPARALLEL_DIR) tools . $(CXX_DIR) $(FORTRAN_DIR) \
-          $(HDF5_HL_DIR)
+          $(JAVA_DIR) $(HDF5_HL_DIR)
 
-DIST_SUBDIRS = src test testpar tools . c++ fortran hl examples
+DIST_SUBDIRS = src test testpar tools . c++ fortran hl examples java
 
 # Some files generated during configure that should be cleaned
 DISTCLEANFILES = config/stamp1 config/stamp2
diff --git a/README.txt b/README.txt
index e90dea7..b98b49d 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.10.0-alpha1 released on 2016-01-18
+HDF5 version 1.10.0-pre1 released on 2016-03-17
 Please refer to the release_docs/INSTALL file for installation instructions.
 ------------------------------------------------------------------------------
 
diff --git a/aclocal.m4 b/aclocal.m4
index dfc9cdc..608bda2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1188,6 +1188,19 @@ AC_SUBST([am__untar])
 
 m4_include([m4/aclocal_cxx.m4])
 m4_include([m4/aclocal_fc.m4])
+m4_include([m4/ax_check_class.m4])
+m4_include([m4/ax_check_classpath.m4])
+m4_include([m4/ax_check_java_home.m4])
+m4_include([m4/ax_check_junit.m4])
+m4_include([m4/ax_java_options.m4])
+m4_include([m4/ax_jni_include_dir.m4])
+m4_include([m4/ax_prog_jar.m4])
+m4_include([m4/ax_prog_java.m4])
+m4_include([m4/ax_prog_java_works.m4])
+m4_include([m4/ax_prog_javac.m4])
+m4_include([m4/ax_prog_javac_works.m4])
+m4_include([m4/ax_prog_javadoc.m4])
+m4_include([m4/ax_try_compile_java.m4])
 m4_include([m4/libtool.m4])
 m4_include([m4/ltoptions.m4])
 m4_include([m4/ltsugar.m4])
diff --git a/bin/cmakehdf5 b/bin/cmakehdf5
index 7d9caa8..7f6453a 100755
--- a/bin/cmakehdf5
+++ b/bin/cmakehdf5
@@ -29,7 +29,7 @@ exit_code=0
 # and should have invoked as "$srcdir/bin/$progname" or
 # "bin/$progname". So, by striping bin/$program from $0,
 # we can find $srcdir.
-if [ $0 == bin/$progname ]; then
+if [ "$0" = "bin/${progname}" ]; then
     srcdir="."		# current directory
 else
     # $0 is $srdir/bin/$progname
@@ -46,6 +46,7 @@ cacheinit=$srcdir/config/cmake/cacheinit.cmake
 build_cpp_lib=-DHDF5_BUILD_CPP_LIB:BOOL=OFF	# C++ interface default off
 build_fortran=-DHDF5_BUILD_FORTRAN:BOOL=OFF	# Fortran interface default off
 build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=ON	# High Level interface default on
+build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=OFF	# Threadsafe feature default off
 build_testing=-DBUILD_TESTING:BOOL=ON		# Build tests default on
 build_tools=-DHDF5_BUILD_TOOLS:BOOL=ON		# Build tools default on
 with_zlib=-DHDF5_ENABLE_Z_LIB_SUPPORT=ON	# enable zlib filter default on
@@ -82,6 +83,8 @@ Usage: $progname [<options>]
     enable or disable c++ API. Default is off.
   --enable-hl | --disable-hl:
     enable or disable high level API. Default is on.
+  --enable-threadsafe | --disable-threadsafe:
+    enable or disable threadsafe feature. Default is off
   --enable-shared | --disable-shared:
     enable or disable shared lib. Default is on.
   --enable-tools | --disable-tools:
@@ -229,6 +232,12 @@ while [ $# -gt 0 ]; do
 	--disable-hl)
 	    build_hl_lib=-DHDF5_BUILD_HL_LIB:BOOL=OFF
 	    ;;
+	--enable-threadsafe)
+	    build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=ON
+	    ;;
+	--disable-threadsafe)
+	    build_threadsafe=-DHDF5_ENABLE_THREADSAFE:BOOL=OFF
+	    ;;
 	--enable-shared)
 	    shared_lib=-DBUILD_SHARED_LIBS:BOOL=ON
 	    ;;
@@ -330,6 +339,7 @@ STEP "Configure..." \
     $build_cpp_lib \
     $build_fortran \
     $build_hl_lib \
+    $build_threadsafe \
     $shared_lib \
     $build_testing \
     $build_tools \
diff --git a/c++/Makefile.in b/c++/Makefile.in
index d3dda2c..da57627 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -108,10 +108,23 @@ TESTS =
 subdir = c++
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -416,18 +429,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -440,7 +457,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -478,10 +494,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -492,6 +512,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -502,8 +523,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -518,6 +551,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -525,6 +560,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -548,6 +584,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -563,7 +600,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -572,8 +611,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -652,6 +693,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index 995f7ba..4c18cad 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -112,10 +112,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = c++/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -364,18 +377,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -388,7 +405,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -426,10 +442,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -440,6 +460,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -450,8 +471,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -466,6 +499,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -473,6 +508,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -496,6 +532,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -511,7 +548,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -520,8 +559,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -600,6 +641,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index 473605a..1a182e3 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -94,7 +94,7 @@ if (BUILD_SHARED_LIBS)
   TARGET_C_PROPERTIES (${HDF5_CPP_LIBSH_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_CPP_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_CPP_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_CPP_LIBSH_TARGET} ${HDF5_CPP_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_CPP_LIBSH_TARGET} ${HDF5_CPP_LIB_NAME} SHARED ${HDF5_CXX_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_CPP_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/cpp
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
diff --git a/c++/src/H5AbstractDs.cpp b/c++/src/H5AbstractDs.cpp
index 06b3e22..8d88c53 100644
--- a/c++/src/H5AbstractDs.cpp
+++ b/c++/src/H5AbstractDs.cpp
@@ -49,7 +49,7 @@ AbstractDs::AbstractDs(){}
 // removal does not raise any problems in 1.10, it will be removed from 1.8 in
 // subsequent releases.
 //--------------------------------------------------------------------------
-AbstractDs::AbstractDs(const hid_t ds_id){}
+// Mar 2016 -BMR, AbstractDs::AbstractDs(const hid_t ds_id){}
 
 //--------------------------------------------------------------------------
 // Function:	AbstractDs::getTypeClass
@@ -141,8 +141,11 @@ ArrayType AbstractDs::getArrayType() const
    // depending on which object invokes getArrayType.  Then, create and
    // return the ArrayType object
    try {
+	// Create ArrayType and set values this way to work around the
+	// problem described in the JIRA issue HDFFV-7947
 	ArrayType arraytype;
 	f_DataType_setId(&arraytype, p_get_type());
+	arraytype.setArrayInfo();
 	return(arraytype);
    }
    catch (DataSetIException E) {
diff --git a/c++/src/H5AbstractDs.h b/c++/src/H5AbstractDs.h
index ee2e45e..6975d6f 100644
--- a/c++/src/H5AbstractDs.h
+++ b/c++/src/H5AbstractDs.h
@@ -85,7 +85,7 @@ class H5_DLLCPP AbstractDs {
         // other will be removed from 1.10 release, and then from 1.8 if its
         // removal does not raise any problems in two 1.10 releases.
 
-	AbstractDs(const hid_t h5_id);
+	// Mar 2016 -BMR, AbstractDs(const hid_t h5_id);
 
 	// Copy constructor
 	// AbstractDs( const AbstractDs& original );
diff --git a/c++/src/H5ArrayType.cpp b/c++/src/H5ArrayType.cpp
index 85340f8..9731a13 100644
--- a/c++/src/H5ArrayType.cpp
+++ b/c++/src/H5ArrayType.cpp
@@ -35,12 +35,7 @@ namespace H5 {
 ///\brief	Default constructor: Creates a stub ArrayType
 // Programmer	Binh-Minh Ribler - May 2004
 //--------------------------------------------------------------------------
-ArrayType::ArrayType() : DataType()
-{
-   // Initialize members
-   rank = -1;
-   dimensions = NULL;
-}
+ArrayType::ArrayType() : DataType(), rank(-1), dimensions(NULL) {}
 
 //--------------------------------------------------------------------------
 // Function:	ArrayType overloaded constructor
@@ -51,20 +46,7 @@ ArrayType::ArrayType() : DataType()
 //--------------------------------------------------------------------------
 ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
 {
-   // Get the rank of the existing array and store it in this array
-   rank = H5Tget_array_ndims(existing_id);
-   if (rank < 0)
-   {
-      throw DataTypeIException("ArrayType constructor (existing id)", "H5Tget_array_ndims failed");
-   }
-
-    // Allocate space for the dimensions
-    dimensions = new hsize_t[rank];
-
-    // Get the dimensions of the existing array and store it in this array
-    int ret_value = H5Tget_array_dims2(id, dimensions);
-    if (ret_value < 0)
-	throw DataTypeIException("ArrayType constructor (existing id)", "H5Tget_array_dims2 failed");
+    setArrayInfo();
 }
 
 //--------------------------------------------------------------------------
@@ -72,11 +54,8 @@ ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
 ///\brief	Copy constructor: makes a copy of the original ArrayType object.
 // Programmer	Binh-Minh Ribler - May 2004
 //--------------------------------------------------------------------------
-ArrayType::ArrayType( const ArrayType& original ) : DataType( original )
+ArrayType::ArrayType( const ArrayType& original ) : DataType( original ), rank(original.rank)
 {
-    // Copy the rank of the original array
-    rank = original.rank;
-
     // Allocate space then copy the dimensions from the original array
     dimensions = new hsize_t[rank];
     for (int i = 0; i < rank; i++)
@@ -111,25 +90,105 @@ ArrayType::ArrayType(const DataType& base_type, int ndims, const hsize_t* dims)
 }
 
 //--------------------------------------------------------------------------
+// Function:	ArrayType::operator=
+///\brief	Assignment operator
+///\param	rhs - IN: Reference to the existing array datatype
+///\return	Reference to ArrayType instance
+///\exception	H5::DataTypeIException
+///		std::bad_alloc
+// Description
+// 		Closes the id on the lhs object first with setId, then copies
+//		each data member from the rhs object.
+// Programmer	Binh-Minh Ribler - Mar 2016
+// Modification
+//--------------------------------------------------------------------------
+ArrayType& ArrayType::operator=(const ArrayType& rhs)
+{
+    if (this != &rhs)
+    {
+        // handling references to this id
+        try {
+            setId(rhs.id);
+            // Note: a = b, so there are two objects with the same hdf5 id
+            // that's why incRefCount is needed, and it is called by setId
+        }
+        catch (Exception close_error) {
+            throw DataTypeIException(inMemFunc("operator="), close_error.getDetailMsg());
+        }
+
+	// Copy the rank of the rhs array
+	rank = rhs.rank;
+
+	// Allocate space then copy the dimensions from the rhs array
+	dimensions = new hsize_t[rank];
+	for (int i = 0; i < rank; i++)
+	    dimensions[i] = rhs.dimensions[i];
+    }
+    return(*this);
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType::setArrayInfo
+///\brief	Retrieves the rank and dimensions from the array datatype
+///		and store the info in this ArrayType object.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - January 2016
+//--------------------------------------------------------------------------
+void ArrayType::setArrayInfo()
+{
+    // Get the rank of the array type specified by id from the C API
+    int ndims = H5Tget_array_ndims(id);
+    if (ndims < 0)
+    {
+	throw DataTypeIException("ArrayType::setArrayInfo", "H5Tget_array_ndims failed");
+    }
+
+    // Get the dimensions from the C API
+    hsize_t* dims;
+    dims = new hsize_t[ndims];
+    if (dims != NULL)
+    {
+	// Get the dimensions
+	ndims = H5Tget_array_dims2(id, dims);
+	if (ndims < 0)
+	    throw DataTypeIException("ArrayType::setArrayInfo", "H5Tget_array_dims2 failed");
+
+	// Store the array's info in memory
+	rank = ndims;
+	dimensions = new hsize_t[rank];
+	for (int i = 0; i < rank; i++)
+	    dimensions[i] = dims[i];
+	delete []dims;
+    }
+} // setArrayInfo
+
+//--------------------------------------------------------------------------
 // Function:	ArrayType::getArrayNDims
 ///\brief	Returns the number of dimensions for an array datatype.
 ///\return	Number of dimensions
 ///\exception	H5::DataTypeIException
 // Programmer	Binh-Minh Ribler - May 2004
+// Modification
+//		Modified to use setArrayInfo().
+//		If rank is positive, return rank
+//		If rank is invalid but object has a valid identifier, obtain the
+//		  rank and dimensions, store them in the object, and return rank
+//		Otherwise, i.e., rank is invalid and object doesn't have a
+//		  valid identifier, throw an exception
 //--------------------------------------------------------------------------
 int ArrayType::getArrayNDims()
 {
-   // If the array's rank has not been stored, i.e. rank is init to -1,
-   // retrieve it via the C API
-   if (rank < 0)
-   {
-      rank = H5Tget_array_ndims(id);
-      if (rank < 0)
-      {
-         throw DataTypeIException("ArrayType::getArrayNDims", "H5Tget_array_ndims failed");
-      }
-   }
-   return(rank);
+    // Validate the id first, this object could be a default object
+    if (!p_valid_id(id))
+	throw DataTypeIException("ArrayType::getArrayNDims", "ArrayType object is not a valid array type.");
+
+    // If the array's info has not been stored, i.e. "rank" still has its
+    // initial value, -1, and "dimensions" is still NULL, retrieve rank and
+    // dimensions via the C API and store them in this ArrayType object.
+    if (rank < 0 && dimensions == NULL)
+	setArrayInfo();
+
+    return(rank);
 }
 
 //--------------------------------------------------------------------------
@@ -139,25 +198,30 @@ int ArrayType::getArrayNDims()
 ///\return	Number of dimensions
 ///\exception	H5::DataTypeIException
 // Programmer	Binh-Minh Ribler - May 2004
+// Modification
+//	Jan, 2016
+//		Modified to use setArrayInfo().
+//		If the array information has not been stored, retrieve rank and
+//		dimensions of the array type identified by "id" via the C API.
+//		Copy "dimensions" to the user's buffer
 //--------------------------------------------------------------------------
 int ArrayType::getArrayDims(hsize_t* dims)
 {
-   // If the array's dimensions have not been stored, retrieve them via C API
-   if (dimensions == NULL)
-   {
-      int ndims = H5Tget_array_dims2(id, dims);
-      if (ndims < 0)
-         throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims2 failed");
-      // Store the array's info in memory
-      rank = ndims;
-      dimensions = new hsize_t[rank];
-      for (int i = 0; i < rank; i++)
-         dimensions[i] = dims[i];
-   }
-   // Otherwise, simply copy what's in 'dimensions' to 'dims'
-   for (int i = 0; i < rank; i++)
-      dims[i] = dimensions[i];
-   return(rank);
+    // Validate the id first, this object could be a default object
+    if (!p_valid_id(id))
+	throw DataTypeIException("ArrayType::getArrayDims", "ArrayType object is not a valid array type.");
+
+    // If the array's info has not been stored, i.e. "rank" still has its
+    // initial value, -1, and "dimensions" is still NULL, retrieve rank and
+    // dimensions via the C API and store them in this ArrayType object.
+    if (rank < 0 && dimensions == NULL)
+	setArrayInfo();
+
+    // Copy what's in "dimensions" to user's buffer "dims"
+    for (int i = 0; i < rank; i++)
+	dims[i] = dimensions[i];
+
+    return(rank);
 }
 
 //--------------------------------------------------------------------------
diff --git a/c++/src/H5ArrayType.h b/c++/src/H5ArrayType.h
index 6577a6e..ddbb5e2 100644
--- a/c++/src/H5ArrayType.h
+++ b/c++/src/H5ArrayType.h
@@ -31,6 +31,12 @@ class H5_DLLCPP ArrayType : public DataType {
 	// specified base type.
 	ArrayType(const DataType& base_type, int ndims, const hsize_t* dims);
 
+	// Assignment operator
+	ArrayType& operator=(const ArrayType& rhs);
+
+	// Stores the rank and dimensions in memory.
+	void setArrayInfo();
+
 	// Returns the number of dimensions of this array datatype.
 	int getArrayNDims();
 
diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp
index ea8c5bb..34489fa 100644
--- a/c++/src/H5Attribute.cpp
+++ b/c++/src/H5Attribute.cpp
@@ -60,9 +60,8 @@ Attribute::Attribute() : AbstractDs(), IdComponent(), id(H5I_INVALID_HID) {}
 ///\param	original  - IN: Original Attribute object to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Attribute::Attribute(const Attribute& original) : AbstractDs(), IdComponent()
+Attribute::Attribute(const Attribute& original) : AbstractDs(), IdComponent(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -74,9 +73,8 @@ Attribute::Attribute(const Attribute& original) : AbstractDs(), IdComponent()
 ///\exception	H5::AttributeIException
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Attribute::Attribute(const hid_t existing_id) : AbstractDs(), IdComponent()
+Attribute::Attribute(const hid_t existing_id) : AbstractDs(), IdComponent(), id(existing_id)
 {
-    id = existing_id;
     incRefCount(); // increment number of references to this id
 }
 
@@ -453,17 +451,18 @@ ssize_t Attribute::getName(H5std_string& attr_name, size_t len) const
 }
 
 //--------------------------------------------------------------------------
-// Function:    Attribute::getName
-///\brief       This function is replaced by the previous function, which
-///		provides more convenient prototype.  It will be removed
-///		in future release.
-///\param       len  -  IN: Desired length of the name
-///\param       attr_name - OUT: Buffer for the name string
-///\return      Actual length of the attribute name
-///\exception   H5::AttributeIException
-// Programmer   Binh-Minh Ribler - Nov, 2001
+// Function:	Attribute::getName
+// Purpose	This function is replaced by the previous function, which
+//		provides more convenient prototype.  It will be removed
+//		in future release.
+// Param	len  -  IN: Desired length of the name
+// Param	attr_name - OUT: Buffer for the name string
+// Return	Actual length of the attribute name
+// Exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Nov, 2001
 // Modification
 //		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 ssize_t Attribute::getName( size_t len, H5std_string& attr_name ) const
 {
@@ -568,7 +567,7 @@ void Attribute::p_read_fixed_len(const DataType& mem_type, H5std_string& strg) c
     // If there is data, allocate buffer and read it.
     if (attr_size > 0)
     {
-	char *strg_C = new char[(size_t)attr_size+1];
+	char *strg_C = new char[attr_size+1];
 	herr_t ret_value = H5Aread(id, mem_type.getId(), strg_C);
 	if( ret_value < 0 )
 	{
diff --git a/c++/src/H5CommonFG.cpp b/c++/src/H5CommonFG.cpp
index c88f6c1..339af54 100644
--- a/c++/src/H5CommonFG.cpp
+++ b/c++/src/H5CommonFG.cpp
@@ -68,21 +68,21 @@ using namespace std;
 ///		then a default size is chosen.
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Group CommonFG::createGroup( const char* name, size_t size_hint ) const
+     Group CommonFG::createGroup( const char* name, size_t size_hint ) const
 {
-   // Group creation property list for size_hint
-   hid_t gcpl_id = 0;
-
-   // Set the local heap size hint
-   if(!(size_hint == (size_t)-1 || size_hint == 0)) {
+    // Group creation property list for size hint
+    hid_t gcpl_id = 0;
 
+    // Set the local heap size hint
+    if (size_hint > 0)
+    {
        // If the creation of the property list failed, throw an exception
-       if((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0)
+       if ((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0)
           throwException("createGroup", "H5Pcreate failed");
 
-       if( H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) {
+       if (H5Pset_local_heap_size_hint(gcpl_id, size_hint) < 0) {
           H5Pclose(gcpl_id);
-          throwException("createGroup", "H5Pset_local_heap_size failed");
+          throwException("createGroup", "H5Pset_local_heap_size_hint failed");
        }
     }
 
@@ -269,6 +269,9 @@ void CommonFG::link( H5L_type_t link_type, const char* curr_name, const char* ne
             ret_value = H5Lcreate_soft( curr_name, getLocId(), new_name, H5P_DEFAULT, H5P_DEFAULT );
             break;
 
+	case H5L_TYPE_ERROR:
+	case H5L_TYPE_EXTERNAL:
+	case H5L_TYPE_MAX:
         default:
             throwException("link", "unknown link type");
             break;
@@ -328,7 +331,7 @@ void CommonFG::unlink( const H5std_string& name ) const
 ///		Exercise care in moving groups as it is possible to render
 ///		data in a file inaccessible with Group::move. Please refer
 ///		to the Group Interface in the HDF5 User's Guide for details at:
-/// http://www.hdfgroup.org/HDF5/doc/UG/UG_frame09Groups.html
+/// https://www.hdfgroup.org/HDF5/doc/UG/HDF5_Users_Guide-Responsive%20HTML5/index.html#t=HDF5_Users_Guide%2FGroups%2FHDF5_Groups.htm
 // Programmer	Binh-Minh Ribler - 2000
 // Modification
 //	2007: QAK modified to use H5L APIs - BMR
@@ -496,18 +499,21 @@ void CommonFG::mount(const char* name, const H5File& child, const PropList& plis
 
 //--------------------------------------------------------------------------
 // Function:	CommonFG::mount
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
-///\param	name  - IN: Name of the group
-///\param	child - IN: File to mount
-///\param	plist - IN: Property list to use
-///\exception	H5::FileIException or H5::GroupIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param	name  - IN: Name of the group
+// Param	child - IN: File to mount
+// Param	plist - IN: Property list to use
+// Exception	H5::FileIException or H5::GroupIException
 // Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void CommonFG::mount(const char* name, H5File& child, PropList& plist) const
 {
-   mount(name, (const H5File)child, (const PropList)plist);
+   mount(name, child, plist);
 }
 
 //--------------------------------------------------------------------------
@@ -523,14 +529,17 @@ void CommonFG::mount(const H5std_string& name, const H5File& child, const PropLi
 
 //--------------------------------------------------------------------------
 // Function:	CommonFG::mount
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
 // Programmer	Binh-Minh Ribler - 2014
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void CommonFG::mount(const H5std_string& name, H5File& child, PropList& plist) const
 {
-   mount(name.c_str(), (const H5File)child, (const PropList)plist);
+   mount(name.c_str(), child, plist);
 }
 
 //--------------------------------------------------------------------------
@@ -1034,6 +1043,8 @@ H5O_type_t CommonFG::childObjType(const char* objname) const
 	case H5O_TYPE_NAMED_DATATYPE:
 	    objtype = objinfo.type;
 	    break;
+	case H5O_TYPE_UNKNOWN:
+	case H5O_TYPE_NTYPES:
 	default:
 	    throwException("childObjType", "Unknown type of object");
       }
@@ -1107,6 +1118,8 @@ H5O_type_t CommonFG::childObjType(hsize_t index, H5_index_t index_type, H5_iter_
 	case H5O_TYPE_NAMED_DATATYPE:
 	    objtype = objinfo.type;
 	    break;
+	case H5O_TYPE_UNKNOWN:
+	case H5O_TYPE_NTYPES:
 	default:
 	    throwException("childObjType", "Unknown type of object");
       }
@@ -1195,21 +1208,13 @@ H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx) const
 ///\return	Object type
 ///\exception	H5::FileIException or H5::GroupIException
 // Programmer	Binh-Minh Ribler - May, 2010
+// Modification
+//		Modified to use the other function. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx, char* type_name) const
 {
-   H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx);
-   switch (obj_type)
-   {
-	case H5G_LINK: HDstrcpy(type_name, "symbolic link"); break;
-	case H5G_GROUP: HDstrcpy(type_name, "group"); break;
-	case H5G_DATASET: HDstrcpy(type_name, "dataset"); break;
-	case H5G_TYPE: HDstrcpy(type_name, "datatype"); break;
-	case H5G_UNKNOWN:
-	default:
-	   throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed");
-   }
-   return (obj_type);
+    H5std_string stype_name(type_name);
+    return(getObjTypeByIdx(idx, stype_name));
 }
 //--------------------------------------------------------------------------
 // Function:	CommonFG::getObjTypeByIdx
@@ -1224,18 +1229,22 @@ H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx, char* type_name) const
 //--------------------------------------------------------------------------
 H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx, H5std_string& type_name) const
 {
-   H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx);
-   switch (obj_type)
-   {
-	case H5G_LINK: type_name = H5std_string("symbolic link"); break;
-	case H5G_GROUP: type_name = H5std_string("group"); break;
-	case H5G_DATASET: type_name = H5std_string("dataset"); break;
-	case H5G_TYPE: type_name = H5std_string("datatype"); break;
-	case H5G_UNKNOWN:
-	default:
-	   throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed");
-   }
-   return (obj_type);
+    H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx);
+    switch (obj_type)
+    {
+        case H5G_LINK: type_name = H5std_string("symbolic link"); break;
+        case H5G_GROUP: type_name = H5std_string("group"); break;
+        case H5G_DATASET: type_name = H5std_string("dataset"); break;
+        case H5G_TYPE: type_name = H5std_string("datatype"); break;
+        case H5G_UNKNOWN:
+	case H5G_UDLINK:
+	case H5G_RESERVED_5:
+	case H5G_RESERVED_6:
+	case H5G_RESERVED_7:
+        default:
+           throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed");
+    }
+    return (obj_type);
 }
 
 #endif // DOXYGEN_SHOULD_SKIP_THIS
diff --git a/c++/src/H5CompType.cpp b/c++/src/H5CompType.cpp
index 6d31a68..82575d6 100644
--- a/c++/src/H5CompType.cpp
+++ b/c++/src/H5CompType.cpp
@@ -228,12 +228,12 @@ hid_t CompType::p_get_member_type(unsigned member_num) const
 DataType CompType::getMemberDataType( unsigned member_num ) const
 {
    try {
-      DataType datatype;
+	DataType datatype;
 	f_DataType_setId(&datatype, p_get_member_type(member_num));
-      return(datatype);
+	return(datatype);
    }
    catch (DataTypeIException E) {
-      throw DataTypeIException("CompType::getMemberDataType", E.getDetailMsg());
+	throw DataTypeIException("CompType::getMemberDataType", E.getDetailMsg());
    }
 }
 
@@ -249,9 +249,10 @@ DataType CompType::getMemberDataType( unsigned member_num ) const
 ArrayType CompType::getMemberArrayType( unsigned member_num ) const
 {
    try {
-      ArrayType arraytype(p_get_member_type(member_num));
+	ArrayType arraytype;
 	f_DataType_setId(&arraytype, p_get_member_type(member_num));
-      return(arraytype);
+	arraytype.setArrayInfo();
+	return(arraytype);
    }
    catch (DataTypeIException E) {
       throw DataTypeIException("CompType::getMemberArrayType", E.getDetailMsg());
diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp
index 059da85..7305347 100644
--- a/c++/src/H5DataSet.cpp
+++ b/c++/src/H5DataSet.cpp
@@ -67,9 +67,8 @@ DataSet::DataSet() : H5Object(), AbstractDs(), id(H5I_INVALID_HID) {}
 //		when one of those objects is deleted, the id will be closed if
 //		the reference counter is only 1.
 //--------------------------------------------------------------------------
-DataSet::DataSet(const hid_t existing_id) : H5Object(), AbstractDs()
+DataSet::DataSet(const hid_t existing_id) : H5Object(), AbstractDs(), id(existing_id)
 {
-    id = existing_id;
     incRefCount(); // increment number of references to this id
 }
 
@@ -79,9 +78,8 @@ DataSet::DataSet(const hid_t existing_id) : H5Object(), AbstractDs()
 ///\param	original - IN: DataSet instance to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-DataSet::DataSet(const DataSet& original) : H5Object(), AbstractDs()
+DataSet::DataSet(const DataSet& original) : H5Object(), AbstractDs(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -325,16 +323,19 @@ hsize_t DataSet::getVlenBufSize(const DataType& type, const DataSpace& space ) c
 
 //--------------------------------------------------------------------------
 // Function:	DataSet::getVlenBufSize
-///\brief       This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///             misses const's.  This wrapper will be removed in future release.
-///\return	Amount of storage
-///\exception	H5::DataSetIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Return	Amount of storage
+// Exception	H5::DataSetIException
 // Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 hsize_t DataSet::getVlenBufSize( DataType& type, DataSpace& space ) const
 {
-    return(getVlenBufSize((const DataType)type, (const DataSpace)space));
+    return(getVlenBufSize(type, space));
 }
 
 //--------------------------------------------------------------------------
@@ -620,16 +621,19 @@ void DataSet::fillMemBuf(const void *fill, const DataType& fill_type, void *buf,
 
 //--------------------------------------------------------------------------
 // Function:	DataSet::fillMemBuf
-///\brief       This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///             misses const's.  This wrapper will be removed in future release.
-///\param	fill - IN: Pointer to fill value to use - default NULL
-///\param	fill_type - IN: Datatype of the fill value
-///\param	buf - IN/OUT: Memory buffer to fill selection within
-///\param	buf_type - IN: Datatype of the elements in buffer
-///\param	space - IN: Dataspace describing memory buffer & containing selection to use
-///\exception	H5::DataSetIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param 	fill - IN: Pointer to fill value to use - default NULL
+// Param 	fill_type - IN: Datatype of the fill value
+// Param 	buf - IN/OUT: Memory buffer to fill selection within
+// Param 	buf_type - IN: Datatype of the elements in buffer
+// Param 	space - IN: Dataspace describing memory buffer & containing selection to use
+// Exception	H5::DataSetIException
 // Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void DataSet::fillMemBuf(const void *fill, DataType& fill_type, void *buf, DataType& buf_type, DataSpace& space)
 {
@@ -658,14 +662,17 @@ void DataSet::fillMemBuf(void *buf, const DataType& buf_type, const DataSpace& s
 
 //--------------------------------------------------------------------------
 // Function:    DataSet::fillMemBuf
-///\brief       This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///             misses const's.  This wrapper will be removed in future release.
-///\param       buf - IN/OUT: Memory buffer to fill selection within
-///\param       buf_type - IN: Datatype of the elements in buffer
-///\param       space - IN: Dataspace describing memory buffer & containing selection to use
-///\exception   H5::DataSetIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param        buf - IN/OUT: Memory buffer to fill selection within
+// Param        buf_type - IN: Datatype of the elements in buffer
+// Param        space - IN: Dataspace describing memory buffer & containing selection to use
+// Exception	H5::DataSetIException
 // Programmer   Binh-Minh Ribler - 2000
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void DataSet::fillMemBuf(void *buf, DataType& buf_type, DataSpace& space)
 {
diff --git a/c++/src/H5DataSpace.cpp b/c++/src/H5DataSpace.cpp
index 311180f..690f328 100644
--- a/c++/src/H5DataSpace.cpp
+++ b/c++/src/H5DataSpace.cpp
@@ -132,9 +132,8 @@ DataSpace::DataSpace( int rank, const hsize_t * dims, const hsize_t * maxdims) :
 ///\exception	H5::DataSpaceIException
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-DataSpace::DataSpace(const hid_t existing_id) : IdComponent()
+DataSpace::DataSpace(const hid_t existing_id) : IdComponent(), id(existing_id)
 {
-    id = existing_id;
     incRefCount(); // increment number of references to this id
 }
 
@@ -144,9 +143,8 @@ DataSpace::DataSpace(const hid_t existing_id) : IdComponent()
 ///\param	original - IN: DataSpace object to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-DataSpace::DataSpace(const DataSpace& original) : IdComponent()
+DataSpace::DataSpace(const DataSpace& original) : IdComponent(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -342,16 +340,19 @@ void DataSpace::extentCopy (const DataSpace& dest_space) const
 
 //--------------------------------------------------------------------------
 // Function:	DataSpace::extentCopy
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const.  This wrapper will be removed in future release.
-///\param	dest_space  - IN: Dataspace to copy from
-///\exception	H5::DataSpaceIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const.  This wrapper will be removed in future release.
+// Param	dest_space  - IN: Dataspace to copy from
+// Exception	H5::DataSpaceIException
 // Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Modified to call its replacement. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void DataSpace::extentCopy( DataSpace& dest_space ) const
 {
-    extentCopy((const DataSpace)dest_space);
+    extentCopy(dest_space);
 }
 
 //--------------------------------------------------------------------------
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp
index 1bbabe3..3e5ad0f 100644
--- a/c++/src/H5DataType.cpp
+++ b/c++/src/H5DataType.cpp
@@ -69,9 +69,8 @@ DataType::DataType() : H5Object(), id(H5I_INVALID_HID) {}
 //		Removed second argument, "predefined", after changing to the
 //		new ref counting mechanism that relies on C's ref counting.
 //--------------------------------------------------------------------------
-DataType::DataType(const hid_t existing_id) : H5Object()
+DataType::DataType(const hid_t existing_id) : H5Object(), id(existing_id)
 {
-    id = existing_id;
     incRefCount(); // increment number of references to this id
 }
 
@@ -136,9 +135,8 @@ DataType::DataType(const Attribute& attr, const void* ref, H5R_type_t ref_type,
 ///\brief	Copy constructor: makes a copy of the original DataType object.
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-DataType::DataType(const DataType& original) : H5Object()
+DataType::DataType(const DataType& original) : H5Object(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -306,13 +304,16 @@ void DataType::commit(const H5Location& loc, const char* name)
 
 //--------------------------------------------------------------------------
 // Function:	DataType::commit
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
-///\param	loc - IN: A location (file, dataset, datatype, or group)
-///\param	name - IN: Name of the datatype
-///\exception	H5::DataTypeIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param	loc - IN: A location (file, dataset, datatype, or group)
+// Param 	name - IN: Name of the datatype
+// Exception	H5::DataTypeIException
 // Programmer	Binh-Minh Ribler - Jan, 2007
+// Modification
+//		Planned for removal. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void DataType::commit(H5Location& loc, const char* name)
 {
@@ -333,13 +334,16 @@ void DataType::commit(const H5Location& loc, const H5std_string& name)
 
 //--------------------------------------------------------------------------
 // Function:	DataType::commit
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
-///\param	loc - IN: A location (file, dataset, datatype, or group)
-///\param	name - IN: Name of the datatype
-///\exception	H5::DataTypeIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param 	loc - IN: A location (file, dataset, datatype, or group)
+// Param 	name - IN: Name of the datatype
+// Exception	H5::DataTypeIException
 // Programmer	Binh-Minh Ribler - Jan, 2007
+// Modification
+//		Planned for removal. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void DataType::commit(H5Location& loc, const H5std_string& name)
 {
@@ -358,10 +362,10 @@ void DataType::commit(H5Location& loc, const H5std_string& name)
 bool DataType::committed() const
 {
    // Call C function to determine if a datatype is a named one
-   htri_t committed = H5Tcommitted( id );
-   if( committed > 0 )
+   htri_t is_committed = H5Tcommitted( id );
+   if (is_committed > 0)
       return true;
-   else if( committed == 0 )
+   else if (is_committed == 0)
       return false;
    else
    {
diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp
index 1ca059b..270b232 100644
--- a/c++/src/H5Exception.cpp
+++ b/c++/src/H5Exception.cpp
@@ -47,11 +47,7 @@ Exception::Exception(const H5std_string& func, const H5std_string& message) : de
 ///\param	orig - IN: Exception instance to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Exception::Exception( const Exception& orig )
-{
-   detail_message = orig.detail_message;
-   func_name = orig.func_name;
-}
+Exception::Exception( const Exception& orig ) : detail_message(orig.detail_message), func_name(orig.func_name) {}
 
 //--------------------------------------------------------------------------
 // Function:	Exception::getMajorString
diff --git a/c++/src/H5FaccProp.cpp b/c++/src/H5FaccProp.cpp
index d3d7811..c284500 100644
--- a/c++/src/H5FaccProp.cpp
+++ b/c++/src/H5FaccProp.cpp
@@ -330,20 +330,22 @@ void FileAccPropList::setSplit(const FileAccPropList& meta_plist, const FileAccP
 
 //--------------------------------------------------------------------------
 // Function:	FileAccPropList::setSplit
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
-///\param	meta_plist  - IN: File access plist for the metadata file
-///\param	raw_plist   - IN: File access plist for the raw data file
-///\param	meta_ext    - IN: Metadata filename extension as \c char*
-///\param	raw_ext     - IN: Raw data filename extension as \c char*
-///\exception	H5::PropListIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param 	meta_plist  - IN: File access plist for the metadata file
+// Param 	raw_plist   - IN: File access plist for the raw data file
+// Param 	meta_ext    - IN: Metadata filename extension as \c char*
+// Param 	raw_ext     - IN: Raw data filename extension as \c char*
+// Exception	H5::PropListIException
 // Programmer:  Binh-Minh Ribler - April, 2004
-// Note:	Retiring April, 2014
+// Modification
+//		Planned for removal. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void FileAccPropList::setSplit(FileAccPropList& meta_plist, FileAccPropList& raw_plist, const char* meta_ext, const char* raw_ext ) const
 {
-    setSplit((const FileAccPropList)meta_plist, (const FileAccPropList)raw_plist, meta_ext, raw_ext);
+    setSplit(meta_plist, raw_plist, meta_ext, raw_ext);
 }
 
 //--------------------------------------------------------------------------
@@ -364,20 +366,21 @@ void FileAccPropList::setSplit(const FileAccPropList& meta_plist, const FileAccP
 
 //--------------------------------------------------------------------------
 // Function:	FileAccPropList::setSplit
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const's.  This wrapper will be removed in future release.
-///\param	meta_plist  - IN: File access plist for the metadata file
-///\param	raw_plist   - IN: File access plist for the raw data file
-///\param	meta_ext    - IN: Metadata filename extension as \c string
-///\param	raw_ext     - IN: Raw data filename extension as \c string
-///\exception	H5::PropListIException
-// Programmer:  Binh-Minh Ribler - April, 2004
-// Note:	Retiring April, 2014
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param 	meta_plist  - IN: File access plist for the metadata file
+// Param 	raw_plist   - IN: File access plist for the raw data file
+// Param 	meta_ext    - IN: Metadata filename extension as \c char*
+// Param 	raw_ext     - IN: Raw data filename extension as \c char*
+// Exception	H5::PropListIException
+// Modification
+//		Planned for removal. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void FileAccPropList::setSplit(FileAccPropList& meta_plist, FileAccPropList& raw_plist, const H5std_string& meta_ext, const H5std_string& raw_ext ) const
 {
-   setSplit((const FileAccPropList)meta_plist, (const FileAccPropList)raw_plist, meta_ext.c_str(), raw_ext.c_str() );
+   setSplit(meta_plist, raw_plist, meta_ext.c_str(), raw_ext.c_str() );
 }
 
 // Stream Virtual File Driver had been removed from the main library.
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index b169472..67dda34 100644
--- a/c++/src/H5File.cpp
+++ b/c++/src/H5File.cpp
@@ -467,15 +467,17 @@ void H5File::getVFDHandle(const FileAccPropList& fapl, void **file_handle) const
 
 //--------------------------------------------------------------------------
 // Function:	H5File::getVFDHandle
-///\brief	This is an overloaded member function, kept for backward
-///		compatibility.  It differs from the above function in that it
-///		misses const.  This wrapper will be removed in future release.
-///\param	fapl        - File access property list
-///\param	file_handle - Pointer to the file handle being used by
-///			      the low-level virtual file driver
-///\exception	H5::FileIException
+// Purpose	This is an overloaded member function, kept for backward
+//		compatibility.  It differs from the above function in that it
+//		misses const's.  This wrapper will be removed in future release.
+// Param 	fapl        - File access property list
+// Param 	file_handle - Pointer to the file handle being used by
+//			      the low-level virtual file driver
+// Exception	H5::FileIException
 // Programmer   Binh-Minh Ribler - May 2004
-// Note:	Retiring April, 2014
+// Modification
+//		Planned for removal. -BMR, 2014/04/16
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 void H5File::getVFDHandle(FileAccPropList& fapl, void **file_handle) const
 {
diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp
index 0823d0e..f9aabcb 100644
--- a/c++/src/H5Group.cpp
+++ b/c++/src/H5Group.cpp
@@ -60,9 +60,8 @@ Group::Group() : H5Object(), CommonFG(), id(H5I_INVALID_HID) {}
 ///\param	original - IN: Original group to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Group::Group(const Group& original) : H5Object(), CommonFG()
+Group::Group(const Group& original) : H5Object(), CommonFG(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -83,9 +82,8 @@ hid_t Group::getLocId() const
 ///\param	existing_id - IN: Id of an existing group
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-Group::Group(const hid_t existing_id) : H5Object(), CommonFG()
+Group::Group(const hid_t existing_id) : H5Object(), CommonFG(), id(existing_id)
 {
-    id = existing_id;
     incRefCount(); // increment number of references to this id
 }
 
diff --git a/c++/src/H5Library.cpp b/c++/src/H5Library.cpp
index 40c766a..be80fe4 100644
--- a/c++/src/H5Library.cpp
+++ b/c++/src/H5Library.cpp
@@ -262,10 +262,10 @@ void H5Library::setFreeListLimits(int reg_global_lim, int reg_list_lim,
 }
 
 // Default constructor - private
-H5Library::H5Library(){};
+H5Library::H5Library(){}
 
 // Destructor - private
-H5Library::~H5Library(){};
+H5Library::~H5Library(){}
 
 #ifndef H5_NO_NAMESPACE
 } // end namespace
diff --git a/c++/src/H5Location.cpp b/c++/src/H5Location.cpp
index b4c88ed..e2b68ae 100644
--- a/c++/src/H5Location.cpp
+++ b/c++/src/H5Location.cpp
@@ -50,7 +50,7 @@ extern "C" herr_t userAttrOpWrpr(hid_t loc_id, const char *attr_name,
 #ifdef NO_STATIC_CAST
    UserData4Aiterate* myData = (UserData4Aiterate *) op_data;
 #else
-   UserData4Aiterate* myData = static_cast <UserData4Aiterate *> (op_data);
+   UserData4Aiterate* myData = reinterpret_cast<UserData4Aiterate *> (op_data);
 #endif
    myData->op( *myData->location, s_attr_name, myData->opData );
    return 0;
@@ -190,7 +190,7 @@ Attribute H5Location::openAttribute( const H5std_string& name ) const
 Attribute H5Location::openAttribute( const unsigned int idx ) const
 {
    hid_t attr_id = H5Aopen_by_idx(getId(), ".", H5_INDEX_CRT_ORDER,
-			H5_ITER_INC, (hsize_t)idx, H5P_DEFAULT, H5P_DEFAULT);
+		H5_ITER_INC, static_cast<hsize_t>(idx), H5P_DEFAULT, H5P_DEFAULT);
    if( attr_id > 0 )
    {
 	Attribute attr;
@@ -232,7 +232,7 @@ int H5Location::iterateAttrs( attr_operator_t user_op, unsigned *_idx, void *op_
    // call the C library routine H5Aiterate2 to iterate the attributes
    hsize_t idx = _idx ? (hsize_t)*_idx : 0;
    int ret_value = H5Aiterate2(getId(), H5_INDEX_NAME, H5_ITER_INC, &idx,
-			userAttrOpWrpr, (void *) userData);
+			userAttrOpWrpr, reinterpret_cast<void *>(userData));
 
    // release memory
    delete userData;
@@ -240,7 +240,7 @@ int H5Location::iterateAttrs( attr_operator_t user_op, unsigned *_idx, void *op_
    if( ret_value >= 0 ) {
       /* Pass back update index value to calling code */
       if (_idx)
-	 *_idx = (unsigned)idx;
+	 *_idx = static_cast<unsigned>(idx);
 
       return( ret_value );
    }
@@ -262,7 +262,7 @@ int H5Location::getNumAttrs() const
    if(H5Oget_info(getId(), &oinfo) < 0)
       throw AttributeIException(inMemFunc("getNumAttrs"), "H5Oget_info failed");
    else
-      return( (int)oinfo.num_attrs );
+      return(static_cast<int>(oinfo.num_attrs));
 }
 
 //--------------------------------------------------------------------------
@@ -517,7 +517,7 @@ ssize_t H5Location::getComment(const char* name, size_t buf_size, char* comment)
     }
     // If the comment is longer than the provided buffer size, the C library
     // will not null terminate it
-    if ((size_t)comment_len >= buf_size)
+    if (static_cast<size_t>(comment_len) >= buf_size)
 	comment[buf_size-1] = '\0';
 
     // Return the actual comment length, which might be different from buf_size
diff --git a/c++/src/H5Object.cpp b/c++/src/H5Object.cpp
index 35e34b5..3cce9fe 100644
--- a/c++/src/H5Object.cpp
+++ b/c++/src/H5Object.cpp
@@ -109,7 +109,7 @@ H5std_string H5Object::getObjName() const
     H5std_string obj_name(""); // object name to return
 
     // Preliminary call to get the size of the object name
-    ssize_t name_size = H5Iget_name(getId(), NULL, (size_t)0);
+    ssize_t name_size = H5Iget_name(getId(), NULL, static_cast<size_t>(0));
 
     // If H5Iget_name failed, throw exception
     if (name_size < 0)
diff --git a/c++/src/H5PropList.cpp b/c++/src/H5PropList.cpp
index 807aa0a..b954191 100644
--- a/c++/src/H5PropList.cpp
+++ b/c++/src/H5PropList.cpp
@@ -104,9 +104,8 @@ PropList::PropList() : IdComponent(), id(H5P_DEFAULT) {}
 ///\param	original - IN: The original property list to copy
 // Programmer	Binh-Minh Ribler - 2000
 //--------------------------------------------------------------------------
-PropList::PropList(const PropList& original) : IdComponent()
+PropList::PropList(const PropList& original) : IdComponent(), id(original.id)
 {
-    id = original.getId();
     incRefCount(); // increment number of references to this id
 }
 
@@ -593,7 +592,7 @@ void PropList::setProperty(const char* name, void* value) const
 //--------------------------------------------------------------------------
 void PropList::setProperty(const char* name, const char* charptr) const
 {
-   herr_t ret_value = H5Pset(id, name, (void*) charptr);
+   herr_t ret_value = H5Pset(id, name, (void*)charptr);
    if (ret_value < 0)
    {
       throw PropListIException(inMemFunc("setProperty"), "H5Pset failed");
diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp
index b067746..3cfa342 100644
--- a/c++/src/H5StrType.cpp
+++ b/c++/src/H5StrType.cpp
@@ -58,10 +58,10 @@ StrType::StrType( const PredType& pred_type ) : AtomType()
 
 //--------------------------------------------------------------------------
 // Function:	StrType overloaded constructor
-///\brief	Creates a string datatype with a specified length
-///\param	pred_type - IN: String predefined type to replicate.
-///\param	size	  - IN: Length of the new string type
-///\exception	H5::DataTypeIException
+// Purpose	Creates a string datatype with a specified length
+// Param 	pred_type - IN: String predefined type to replicate.
+// Param 	size	  - IN: Length of the new string type
+// Exception	H5::DataTypeIException
 // Description
 // 		The 1st argument could have been skipped, but this
 // 		constructor will collide with the one that takes an
@@ -71,10 +71,13 @@ StrType::StrType( const PredType& pred_type ) : AtomType()
 //		avoid the clashing problem, that doesn't eliminate the
 //		the 1st argument but it's simpler for the user to type
 //		a '0' than PredType::C_S1.  - Dec 2, 2005
-///\note
-///		The use of this constructor can be shortened by using
-///		its overloaded below as StrType(0, size).
+// Note
+//		The use of this constructor can be shortened by using
+//		its overloaded below as StrType(0, size).
 // Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Planned for removal. -BMR, 2005/12/02
+//		Removed from documentation. -BMR, 2016/03/07
 //--------------------------------------------------------------------------
 StrType::StrType( const PredType& pred_type, const size_t& size ) : AtomType()
 {
@@ -96,8 +99,8 @@ StrType::StrType( const PredType& pred_type, const size_t& size ) : AtomType()
 ///		previous constructor, such as:
 ///		StrType atype(0, size) instead of
 ///		StrType atype(PredType::C_S1, size)
-///\note
-///		This constructor may replace the previous one in the future.
+// Note
+//		This constructor replaced the previous one.
 // Programmer	Binh-Minh Ribler - Nov 28, 2005
 //--------------------------------------------------------------------------
 StrType::StrType( const int dummy, const size_t& size ) : AtomType()
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index b9e0acd..44780c1 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -111,10 +111,23 @@ TESTS =
 subdir = c++/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
@@ -429,18 +442,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -453,7 +470,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -491,10 +507,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -505,6 +525,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -515,8 +536,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -531,6 +564,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -538,6 +573,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -561,6 +597,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -576,7 +613,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -585,8 +624,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -665,6 +706,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/c++/src/cpp_doc_config b/c++/src/cpp_doc_config
index ecf923a..ac68662 100644
--- a/c++/src/cpp_doc_config
+++ b/c++/src/cpp_doc_config
@@ -38,7 +38,7 @@ PROJECT_NAME           = "HDF5 C++ API"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "1.10.0-alpha1 currently under development"
+PROJECT_NUMBER         = "1.10.0-pre1 currently under development"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index 6f1d857..4bebeac 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -13,6 +13,7 @@ PROJECT (HDF5_CPP_TEST)
 #-----------------------------------------------------------------------------
 set (CPP_TEST_SRCS
     ${HDF5_CPP_TEST_SOURCE_DIR}/testhdf5.cpp
+    ${HDF5_CPP_TEST_SOURCE_DIR}/tarray.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tattr.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tcompound.cpp
     ${HDF5_CPP_TEST_SOURCE_DIR}/tdspl.cpp
diff --git a/c++/test/Makefile.am b/c++/test/Makefile.am
index 705ec72..07fe533 100644
--- a/c++/test/Makefile.am
+++ b/c++/test/Makefile.am
@@ -31,9 +31,10 @@ check_PROGRAMS=$(TEST_PROG)
 # The tests depend on the hdf5 library, test library, and the c++ library
 LDADD=$(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5)
 
-testhdf5_SOURCES=testhdf5.cpp dsets.cpp tattr.cpp tcompound.cpp	\
-	tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp tobject.cpp \
-	trefer.cpp ttypes.cpp tvlstr.cpp h5cpputil.cpp
+testhdf5_SOURCES=testhdf5.cpp dsets.cpp tattr.cpp tarray.cpp	\
+	tcompound.cpp tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp	\
+	tlinks.cpp tobject.cpp trefer.cpp ttypes.cpp tvlstr.cpp	\
+	h5cpputil.cpp
 
 # Tell conclude.am that these are C++ tests.
 CXX_API=yes
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index a95517f..89a9b39 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -109,10 +109,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = c++/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -123,10 +136,11 @@ CONFIG_CLEAN_FILES = H5srcdir_str.h
 CONFIG_CLEAN_VPATH_FILES =
 am__EXEEXT_1 = testhdf5$(EXEEXT)
 am_testhdf5_OBJECTS = testhdf5.$(OBJEXT) dsets.$(OBJEXT) \
-	tattr.$(OBJEXT) tcompound.$(OBJEXT) tdspl.$(OBJEXT) \
-	tfile.$(OBJEXT) tfilter.$(OBJEXT) th5s.$(OBJEXT) \
-	tlinks.$(OBJEXT) tobject.$(OBJEXT) trefer.$(OBJEXT) \
-	ttypes.$(OBJEXT) tvlstr.$(OBJEXT) h5cpputil.$(OBJEXT)
+	tattr.$(OBJEXT) tarray.$(OBJEXT) tcompound.$(OBJEXT) \
+	tdspl.$(OBJEXT) tfile.$(OBJEXT) tfilter.$(OBJEXT) \
+	th5s.$(OBJEXT) tlinks.$(OBJEXT) tobject.$(OBJEXT) \
+	trefer.$(OBJEXT) ttypes.$(OBJEXT) tvlstr.$(OBJEXT) \
+	h5cpputil.$(OBJEXT)
 testhdf5_OBJECTS = $(am_testhdf5_OBJECTS)
 testhdf5_LDADD = $(LDADD)
 testhdf5_DEPENDENCIES = $(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5)
@@ -418,18 +432,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -442,7 +460,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -480,10 +497,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -494,6 +515,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -504,8 +526,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -520,6 +554,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -527,6 +563,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -550,6 +587,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -565,7 +603,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -574,8 +614,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -654,6 +696,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
@@ -697,9 +740,10 @@ TEST_PROG = testhdf5
 
 # The tests depend on the hdf5 library, test library, and the c++ library
 LDADD = $(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5)
-testhdf5_SOURCES = testhdf5.cpp dsets.cpp tattr.cpp tcompound.cpp	\
-	tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp tobject.cpp \
-	trefer.cpp ttypes.cpp tvlstr.cpp h5cpputil.cpp
+testhdf5_SOURCES = testhdf5.cpp dsets.cpp tattr.cpp tarray.cpp	\
+	tcompound.cpp tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp	\
+	tlinks.cpp tobject.cpp trefer.cpp ttypes.cpp tvlstr.cpp	\
+	h5cpputil.cpp
 
 
 # Tell conclude.am that these are C++ tests.
@@ -782,6 +826,7 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dsets.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5cpputil.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tarray.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tattr.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tcompound.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tdspl.Po at am__quote@
diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp
index e57e50e..60e875c 100644
--- a/c++/test/dsets.cpp
+++ b/c++/test/dsets.cpp
@@ -246,10 +246,10 @@ test_simple_io( H5File& file)
 	DataSet dataset (file.createDataSet (DSET_SIMPLE_IO_NAME, PredType::NATIVE_INT, space));
 
 	// Write the data to the dataset
-	dataset.write ((void*) points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset.write(reinterpret_cast<void*>(points), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Read the dataset back
-	dataset.read ((void*) check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset.read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i = 0; i < 100; i++)
@@ -395,10 +395,10 @@ test_tconv( H5File& file)
 	DataSet dataset (file.createDataSet (DSET_TCONV_NAME, PredType::STD_I32LE, space));
 
 	// Write the data to the dataset
-	dataset.write ((void*) out, PredType::STD_I32LE);
+	dataset.write (reinterpret_cast<void*>(out), PredType::STD_I32LE);
 
 	// Read data with byte order conversion
-	dataset.read ((void*) in, PredType::STD_I32BE);
+	dataset.read (reinterpret_cast<void*>(in), PredType::STD_I32BE);
 
 	// Check
 	for (int i = 0; i < 1000000; i++) {
@@ -501,7 +501,7 @@ test_compression(H5File& file)
     for (i = n = 0; i < 100; i++)
     {
 	for (j = 0; j < 200; j++) {
-	    points[i][j] = (int)n++;
+	    points[i][j] = static_cast<int>(n++);
 	}
     }
     char* tconv_buf = new char [1000];
@@ -539,15 +539,15 @@ test_compression(H5File& file)
 	*/
 	SUBTEST("Compression (uninitialized read)");
 
-	dataset->read ((void*) check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	for (i=0; i<size[0]; i++) {
 	    for (j=0; j<size[1]; j++) {
 		if (0!=check[i][j]) {
 		    H5_FAILED();
 		    cerr << "    Read a non-zero value." << endl;
-		    cerr << "    At index " << (unsigned long)i << "," <<
-		   (unsigned long)j << endl;
+		    cerr << "    At index " << static_cast<unsigned long>(i) << "," <<
+		   static_cast<unsigned long>(j) << endl;
 		    throw Exception("test_compression", "Failed in uninitialized read");
 		}
 	    }
@@ -565,11 +565,11 @@ test_compression(H5File& file)
 	{
 	    for (j=0; j<size[1]; j++)
 	    {
-		points[i][j] = (int)n++;
+		points[i][j] = static_cast<int>(n++);
 	    }
 	}
 
-	dataset->write ((void*) points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->write (reinterpret_cast<void*>(points), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	PASSED();
 
@@ -580,7 +580,7 @@ test_compression(H5File& file)
 	SUBTEST("Compression (read)");
 
 	// Read the dataset back
-	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i = 0; i < size[0]; i++)
@@ -609,10 +609,10 @@ test_compression(H5File& file)
 	    	points[i][j] = rand ();
 	    }
 	}
-	dataset->write ((void*)points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->write (reinterpret_cast<void*>(points), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Read the dataset back and check it
-	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i = 0; i < size[0]; i++)
@@ -637,7 +637,7 @@ test_compression(H5File& file)
 	delete dataset;
 
 	dataset = new DataSet (file.openDataSet (DSET_COMPRESS_NAME));
-	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i = 0; i < size[0]; i++)
@@ -667,8 +667,8 @@ test_compression(H5File& file)
 	    }
 	}
 	space1.selectHyperslab( H5S_SELECT_SET, hs_size, hs_offset );
-	dataset->write ((void*)points, PredType::NATIVE_INT, space1, space1, xfer);
-	dataset->read ((void*)check, PredType::NATIVE_INT, space1, space1, xfer);
+	dataset->write (reinterpret_cast<void*>(points), PredType::NATIVE_INT, space1, space1, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, space1, space1, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i=0; i<hs_size[0]; i++) {
@@ -677,11 +677,11 @@ test_compression(H5File& file)
 		check[hs_offset[0]+i][hs_offset[1]+j]) {
 		H5_FAILED();
 		cerr << "    Read different values than written.\n" << endl;
-		cerr << "    At index " << (unsigned long)(hs_offset[0]+i) <<
-		   "," << (unsigned long)(hs_offset[1]+j) << endl;
+		cerr << "    At index " << static_cast<unsigned long>((hs_offset[0]+i)) <<
+		   "," << static_cast<unsigned long>((hs_offset[1]+j)) << endl;
 
-		cerr << "    At original: " << (int)points[hs_offset[0]+i][hs_offset[1]+j] << endl;
-		cerr << "    At returned: " << (int)check[hs_offset[0]+i][hs_offset[1]+j] << endl;
+		cerr << "    At original: " << static_cast<int>(points[hs_offset[0]+i][hs_offset[1]+j]) << endl;
+		cerr << "    At returned: " << static_cast<int>(check[hs_offset[0]+i][hs_offset[1]+j]) << endl;
 		throw Exception("test_compression", "Failed in partial I/O");
 	    }
 	} // for j
@@ -714,8 +714,8 @@ test_compression(H5File& file)
 	DataSpace space2 (2, size, NULL);
 	dataset = new DataSet (file.createDataSet (DSET_BOGUS_NAME, PredType::NATIVE_INT, space2, dscreatplist));
 
-	dataset->write ((void*)points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
-	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->write (reinterpret_cast<void*>(points), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read (reinterpret_cast<void*>(check), PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
 
 	// Check that the values read are the same as the values written
 	for (i = 0; i < size[0]; i++)
@@ -812,8 +812,8 @@ test_multiopen (H5File& file)
 	space->getSimpleExtentDims (tmp_size);
 	if (cur_size[0]!=tmp_size[0])
 	{
-	    cerr << "    Got " << (int)tmp_size[0] << " instead of "
-		    << (int)cur_size[0] << "!" << endl;
+	    cerr << "    Got " << static_cast<int>(tmp_size[0]) << " instead of "
+		    << static_cast<int>(cur_size[0]) << "!" << endl;
 	    throw Exception("test_multiopen", "Failed in multi-open with extending");
 	}
 
@@ -897,7 +897,7 @@ test_types(H5File& file)
 
 	    // Fill buffer
 	    for (i=0; i<sizeof buf; i++)
-	    	buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+	    	buf[i] = static_cast<unsigned char>(0xff) ^ static_cast<unsigned char>(i);
 
 	    // Write data from buf using all default dataspaces and property list
 	    dset->write (buf, type);
@@ -926,7 +926,7 @@ test_types(H5File& file)
 
 	    // Fill buffer
 	    for (i=0; i<sizeof(buf); i++)
-		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+		buf[i] = static_cast<unsigned char>(0xff) ^ static_cast<unsigned char>(i);
 
 	    // Write data from buf using all default dataspaces and property
 	    // list; if writing fails, deallocate dset and return.
@@ -959,7 +959,7 @@ test_types(H5File& file)
 
 	    // Fill buffer
 	    for (i=0; i<sizeof buf; i++)
-		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+		buf[i] = static_cast<unsigned char>(0xff) ^ static_cast<unsigned char>(i);
 
 	    // Write data from buf using all default dataspaces and property
 	    // list; if writing fails, deallocate dset and return.
@@ -992,7 +992,7 @@ test_types(H5File& file)
 
 	    // Fill buffer
 	    for (i=0; i<sizeof(buf); i++)
-		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+		buf[i] = static_cast<unsigned char>(0xff) ^ static_cast<unsigned char>(i);
 
 	    // Write data from buf using all default dataspaces and property
 	    // list; if writing fails, deallocate dset and return.
diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp
index 40e81cc..9bbb183 100644
--- a/c++/test/h5cpputil.cpp
+++ b/c++/test/h5cpputil.cpp
@@ -195,7 +195,7 @@ void verify_val(const char* x, const char* value, const char* where, int line, c
         cerr << "*** UNEXPECTED VALUE from " << where << " should be "
              << value << ", but is " << x << " at line " << line
              << " in " << file_name << endl;
-        IncTestNumErrs();
+        //IncTestNumErrs();
         throw TestFailedException(where, "");
     }
 }
diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h
index 8625213..b615194 100644
--- a/c++/test/h5cpputil.h
+++ b/c++/test/h5cpputil.h
@@ -132,6 +132,7 @@ template <class Type1, class Type2>
 #ifdef __cplusplus
 extern "C" {
 #endif
+void test_array();
 void test_attr();
 void test_compound();
 void test_dsproplist();
@@ -146,6 +147,7 @@ void test_vlstrings();
 void test_dset();
 
 /* Prototypes for the cleanup routines */
+void cleanup_array();
 void cleanup_attr();
 void cleanup_compound();
 void cleanup_dsproplist();
diff --git a/c++/test/tarray.cpp b/c++/test/tarray.cpp
new file mode 100644
index 0000000..a6cbae4
--- /dev/null
+++ b/c++/test/tarray.cpp
@@ -0,0 +1,394 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   tarray.cpp - HDF5 C++ testing the array datatype functionality
+
+ ***************************************************************************/
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include <string>
+
+#ifndef H5_NO_NAMESPACE
+#ifndef H5_NO_STD
+    using std::cerr;
+    using std::endl;
+#endif  // H5_NO_STD
+#endif
+
+#include "H5Cpp.h"      // C++ API header file
+
+#ifndef H5_NO_NAMESPACE
+    using namespace H5;
+#endif
+
+#include "h5cpputil.h"  // C++ utilility header file
+
+const H5std_string    FILENAME("tarray.h5");
+const int SPACE1_RANK = 1;
+const hsize_t SPACE1_DIM1 = 4;
+const int ARRAY1_RANK = 1;
+const hsize_t ARRAY1_DIM1 = 4;
+
+typedef enum flt_t {
+    FLT_FLOAT, FLT_DOUBLE, FLT_LDOUBLE, FLT_OTHER
+} flt_t;
+
+typedef enum int_t {
+    INT_CHAR, INT_UCHAR, INT_SHORT, INT_USHORT, INT_INT, INT_UINT,
+    INT_LONG, INT_ULONG, INT_LLONG, INT_ULLONG, INT_OTHER
+} int_t;
+
+

+/*-------------------------------------------------------------------------
+ * Function:    test_array_compound_array
+ *
+ * Purpose:     Tests 1-D array of compound datatypes (with array fields)
+ *
+ * Return:      None.
+ *
+ * Programmer:  Binh-Minh Ribler (using C version)
+ *		January, 2016
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void test_array_compound_array()
+{
+    SUBTEST("ArrayType::getArrayNDims & ArrayType::getArrayDims");
+    typedef struct {        // Typedef for compound datatype */
+        int i;
+        float f[ARRAY1_DIM1];
+    } s1_t;
+    s1_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   // Information to write
+    s1_t rdata[SPACE1_DIM1][ARRAY1_DIM1];   // Information read in
+    hsize_t sdims1[] = {SPACE1_DIM1};
+    hsize_t tdims1[] = {ARRAY1_DIM1};
+    int     nmemb;      // Number of compound members
+    int     ii;		// counting variables
+    hsize_t idxi, idxj, idxk; // dimension indicing variables
+    H5T_class_t mclass; // Datatype class for field
+
+    // Initialize array data to write
+    for (idxi =0; idxi < SPACE1_DIM1; idxi++)
+        for (idxj = 0; idxj < ARRAY1_DIM1; idxj++) {
+            wdata[idxi][idxj].i = idxi * 10 + idxj;
+            for(idxk = 0; idxk < ARRAY1_DIM1; idxk++)
+	    {
+                float temp = idxi * 10.0 + idxj * 2.5 + idxk;
+                wdata[idxi][idxj].f[idxk] = temp;
+	    }
+        } // end for
+
+    try {
+	// Create File
+	H5File file1(FILENAME, H5F_ACC_TRUNC);
+
+	// Create dataspace for datasets
+	DataSpace space(SPACE1_RANK, sdims1, NULL);
+
+	/*
+	 * Create an array datatype of compounds, arrtype.  Each compound
+	 * datatype, comptype, contains an integer and an array of floats,
+	 * arrfltype.
+	 */
+
+	// Create a compound datatype
+	CompType comptype(sizeof(s1_t));
+
+	// Insert integer field
+	comptype.insertMember("i", HOFFSET(s1_t, i), PredType::NATIVE_INT);
+
+	// Create an array of floats datatype
+	ArrayType arrfltype(PredType::NATIVE_FLOAT, ARRAY1_RANK, tdims1);
+
+	// Insert float array field
+	comptype.insertMember("f", HOFFSET(s1_t, f), arrfltype);
+
+	// Close array of floats field datatype
+	arrfltype.close();
+
+	// Create an array datatype of the compound datatype
+	ArrayType arrtype(comptype, ARRAY1_RANK, tdims1);
+
+	// Close compound datatype comptype
+	comptype.close();
+
+	// Create a dataset
+	DataSet dataset = file1.createDataSet("Dataset1", arrtype, space);
+	dataset = file1.openDataSet("Dataset1");
+
+	// Write dataset to disk
+	dataset.write(wdata, arrtype);
+
+	// Close all
+	dataset.close();
+	arrtype.close();
+	space.close();
+	file1.close();
+
+	// Re-open file
+	file1.openFile(FILENAME, H5F_ACC_RDONLY);
+
+	// Open the dataset
+	dataset = file1.openDataSet("Dataset1");
+
+	/*
+	 * Check the datatype array of compounds
+	 */
+
+	// Verify that it is an array of compounds
+	DataType dstype = dataset.getDataType();
+	mclass = dstype.getClass();
+	verify_val(mclass==H5T_ARRAY, true, "f2_type.getClass", __LINE__, __FILE__);
+
+	dstype.close();
+
+	// Get the array datatype to check
+	ArrayType atype_check = dataset.getArrayType();
+
+	// Check the array rank
+	int ndims = atype_check.getArrayNDims();
+	verify_val(ndims, ARRAY1_RANK, "atype_check.getArrayNDims", __LINE__, __FILE__);
+
+	// Get the array dimensions
+	hsize_t rdims1[H5S_MAX_RANK];
+	atype_check.getArrayDims(rdims1);
+
+	// Check the array dimensions
+	for (ii =0; ii <ndims; ii++)
+	    if (rdims1[ii]!=tdims1[ii]) {
+		TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%zd, tdims1[%d]=z%d\n", ii, rdims1[ii], ii, tdims1[ii]);
+            continue;
+        } // end if
+
+	// Test ArrayType::ArrayType(const hid_t existing_id)
+	ArrayType new_arrtype(atype_check.getId());
+
+	// Check the array rank
+	ndims = new_arrtype.getArrayNDims();
+	verify_val(ndims, ARRAY1_RANK, "new_arrtype.getArrayNDims", __LINE__, __FILE__);
+
+	// Get the array dimensions
+	new_arrtype.getArrayDims(rdims1);
+
+	// Check the array dimensions
+	for (ii = 0; ii < ndims; ii++)
+	    if (rdims1[ii] != tdims1[ii]) {
+		TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%zd, tdims1[%d]=%zd\n", ii, rdims1[ii], ii, tdims1[ii]);
+            continue;
+        } // end if
+
+	/*
+	 * Check the compound datatype and the array of floats datatype
+	 * in the compound.
+	 */
+	// Get the compound datatype, which is the base datatype of the
+	// array datatype atype_check.
+	DataType base_type = atype_check.getSuper();
+	mclass = base_type.getClass();
+	verify_val(mclass==H5T_COMPOUND, true, "atype_check.getClass", __LINE__, __FILE__);
+
+	// Verify the compound datatype info
+	CompType ctype_check(base_type.getId());
+	base_type.close();
+	
+	// Check the number of members
+	nmemb = ctype_check.getNmembers();
+	verify_val(nmemb, 2, "ctype_check.getNmembers", __LINE__, __FILE__);
+
+	// Check the 2nd field's name
+	H5std_string field2_name = ctype_check.getMemberName(1);
+	if (HDstrcmp(field2_name.c_str(),"f") != 0)
+	    TestErrPrintf("Compound field name doesn't match!, field2_name=%s\n",field2_name.c_str());
+
+	// Get the 2nd field's datatype
+	DataType f2_type = ctype_check.getMemberDataType(1);
+
+	// Get the 2nd field's class, this 2nd field should have an array type
+	mclass = f2_type.getClass();
+	verify_val(mclass==H5T_ARRAY, true, "f2_type.getClass", __LINE__, __FILE__);
+	f2_type.close();
+
+	// Get the 2nd field, array of floats datatype, to check
+	ArrayType f2_atype_check = ctype_check.getMemberArrayType(1);
+
+	// Check the array rank
+	ndims = f2_atype_check.getArrayNDims();
+	verify_val(ndims, ARRAY1_RANK, "f2_atype_check.getArrayNDims", __LINE__, __FILE__);
+
+	// Get the array dimensions
+	HDmemset(rdims1, 0, H5S_MAX_RANK);
+	f2_atype_check.getArrayDims(rdims1);
+
+	// Check the array dimensions
+	for (ii = 0; ii < ndims; ii++)
+	    if (rdims1[ii] != tdims1[ii]) {
+		TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%zd, tdims1[%d]=%zd\n", ii, rdims1[ii], ii, tdims1[ii]);
+		continue;
+	    } // end if
+
+	// Close done datatypes
+	f2_atype_check.close();
+	ctype_check.close();
+
+	// Read dataset from disk
+	dataset.read(rdata, atype_check);
+
+	// Compare data read in
+	for (idxi = 0; idxi < SPACE1_DIM1; idxi++) {
+	    for (idxj = 0; idxj < ARRAY1_DIM1; idxj++) {
+		if (wdata[idxi][idxj].i != rdata[idxi][idxj].i) {
+		    TestErrPrintf("Array data information doesn't match!, wdata[%d][%d].i=%d, rdata[%d][%d].i=%d\n",idxi,idxj,wdata[idxi][idxj].i,idxi,idxj,rdata[idxi][idxj].i);
+		    continue;
+		} // end if
+	    } // end for
+	} // end for
+
+	// Close all
+	atype_check.close();
+	dataset.close();
+	file1.close();
+        PASSED();
+    }   // end of try block
+    catch (Exception E) {
+        issue_fail_msg("test_array_compound_array", __LINE__, __FILE__, E.getCDetailMsg());
+    }
+
+} // end test_array_compound_array()
+
+

+/*-------------------------------------------------------------------------
+ * Function:    test_array_assignment
+ *
+ * Purpose:     Tests the operator=
+ *
+ * Return:      None.
+ *
+ * Programmer:  Binh-Minh Ribler (using C version)
+ *		March, 2016
+ *
+ * Description:
+ *		Used user's sample code in HDFFV-9562
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/*
+ * Helper routine to demonstrate the issue in HDFFV-9562
+ */
+H5::DataType getArr()
+{
+    hsize_t *dims = new hsize_t; 
+    *dims = 5; 
+    H5::ArrayType ret; 
+    ret = H5::ArrayType(H5::PredType::NATIVE_INT, 1, dims); 
+    delete[] dims; 
+    return ret; }
+
+static void test_array_assignment()
+{
+    hsize_t sdims1[] = {SPACE1_DIM1};
+    SUBTEST("ArrayType::operator=");
+
+    try {
+	// Create File
+	H5File file1(FILENAME, H5F_ACC_TRUNC);
+
+	// Create dataspace for datasets
+	DataSpace space(SPACE1_RANK, sdims1, NULL);
+
+	/*
+	 * Create an array datatype of compounds, arrtype.  Each compound
+	 * datatype, comptype, contains an integer and an array of floats,
+	 * arrfltype.
+	 */
+
+	// Create a compound datatype
+	CompType comptype(static_cast<size_t>(24));
+
+	// Insert integer field
+	comptype.insertMember("i", 0, PredType::NATIVE_INT);
+
+	// Insert float array field
+	comptype.insertMember("a", 4, getArr());
+
+	// Create a dataset
+	DataSet dataset = file1.createDataSet("Dataset1", comptype, space);
+
+	// Close all
+	dataset.close();
+	comptype.close();
+	space.close();
+	file1.close();
+
+        PASSED();
+    }   // end of try block
+    catch (Exception E) {
+        issue_fail_msg("test_array_assignment", __LINE__, __FILE__, E.getCDetailMsg());
+    }
+} // end test_array_assignment()
+
+

+/****************************************************************
+**
+**  test_array(): Main datatypes testing routine.
+**
+****************************************************************/
+#ifdef __cplusplus
+extern "C"
+#endif
+void test_array()
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Array Datatypes\n"));
+
+    // Test array of compounds with array field
+    test_array_compound_array();
+
+    // Test operator= (HDFFV-9562)
+    test_array_assignment();
+
+}   // test_array()
+
+

+/*-------------------------------------------------------------------------
+ * Function:	cleanup_array
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:  Binh-Minh Ribler (using C version)
+ *		January, 2016
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef __cplusplus
+extern "C"
+#endif
+void cleanup_array()
+{
+    HDremove(FILENAME.c_str());
+}  // cleanup_array
diff --git a/c++/test/testhdf5.cpp b/c++/test/testhdf5.cpp
index 59b16cf..b29c6fb 100644
--- a/c++/test/testhdf5.cpp
+++ b/c++/test/testhdf5.cpp
@@ -91,6 +91,7 @@ main(int argc, char *argv[])
 	// testing variable-length strings in tvlstr.cpp
 	AddTest("tvlstr", test_vlstrings, cleanup_vlstrings,  "Variable-Length Strings", NULL);
 	AddTest("ttypes", test_types, cleanup_types,  "Generic Data Types", NULL);
+	AddTest("tarray", test_array, cleanup_array,  "Array Datatypes", NULL);
 	AddTest("tcompound", test_compound, cleanup_compound,  "Compound Data Types", NULL);
 	AddTest("tdspl", test_dsproplist, cleanup_dsproplist,  "Dataset Property List", NULL);
 	AddTest("tfilter", test_filters, cleanup_filters,  "Various Filters", NULL);
@@ -100,7 +101,6 @@ main(int argc, char *argv[])
 	AddTest("time", test_time, cleanup_time,  "Time Datatypes", NULL);
 	AddTest("vltypes", test_vltypes, cleanup_vltypes,  "Variable-Length Datatypes", NULL);
 	AddTest("iterate", test_iterate, cleanup_iterate,  "Group & Attribute Iteration", NULL);
-	AddTest("array", test_array, cleanup_array,  "Array Datatypes", NULL);
 	AddTest("genprop", test_genprop, cleanup_genprop,  "Generic Properties", NULL);
 	AddTest("id", test_ids, NULL,  "User-Created Identifiers", NULL);
 
diff --git a/c++/test/ttypes.cpp b/c++/test/ttypes.cpp
index aae5d86..971a06f 100644
--- a/c++/test/ttypes.cpp
+++ b/c++/test/ttypes.cpp
@@ -549,7 +549,6 @@ extern "C"
 void test_types()
 {
     // Output message about test being performed
-    //MESSAGE("Testing Generic Data Types\n");
     MESSAGE(5, ("Testing Generic Data Types\n"));
 
     // Test basic datatypes
diff --git a/config/cce-fflags b/config/cce-fflags
index 896e711..233f9ff 100644
--- a/config/cce-fflags
+++ b/config/cce-fflags
@@ -52,15 +52,24 @@ if test "X-cce" = "X-$f9x_vendor"; then
     H5_FCFLAGS="${H5_FCFLAGS} -hnocaf"
 
     # Production
-    # -Wl,-s to remove all symbols for smaller file
-    PROD_FCFLAGS="-O3 -Wl,-s"
+    PROD_FCFLAGS=
 
     # Debug
-    DEBUG_FCFLAGS="-g -O0"
+    DEBUG_FCFLAGS=
+
+    # Symbols
+    # -Wl,-s to remove all symbols for smaller file
+    SYMBOLS_FCFLAGS="-g"
+    NO_SYMBOLS_FCFLAGS="-Wl,-s"
 
-    # Profile
+    # Profiling
     # Use this for profiling with gprof
-    PROFILE_FCFLAGS="-g -p"
+    PROFILE_FCFLAGS="-p"
+
+    # Optimization
+    HIGH_OPT_FCFLAGS="-O3"
+    DEBUG_OPT_FCFLAGS="-O0"
+    NO_OPT_FCFLAGS="-O0"
 
     # Flags are set
     f9x_flags_set=yes
diff --git a/config/cce-flags b/config/cce-flags
index a34fcbe..8f3b2dc 100644
--- a/config/cce-flags
+++ b/config/cce-flags
@@ -54,18 +54,25 @@ if test "X-cce" = "X-$cc_vendor"; then
     H5_CFLAGS="${H5_CFLAGS:--hc99 $arch}"
 
     # Production
-    # -Wl,-s to remove all symbols for smaller file
-    PROD_CFLAGS="-O3 -Wl,-s"
-    PROD_CPPFLAGS=
+    PROD_CFLAGS=
 
     # Debug
-    DEBUG_CFLAGS="-g -O0"
-    DEBUG_CPPFLAGS=
+    # NDEBUG is handled explicitly in configure
+    DEBUG_CFLAGS=
+
+    # Symbols
+    # -Wl,-s to remove all symbols for smaller file
+    SYMBOLS_CFLAGS="-g"
+    NO_SYMBOLS_CFLAGS="-Wl,-s"
 
-    # Profile
+    # Profiling
     # Use this for profiling with gprof
-    PROFILE_CFLAGS="-g -p"
-    PROFILE_CPPFLAGS=
+    PROFILE_CFLAGS="-p"
+
+    # Optimization
+    HIGH_OPT_CFLAGS="-O3"
+    DEBUG_OPT_CFLAGS="-O0"
+    NO_OPT_CFLAGS="-O0"
 
     # Flags are set
     cc_flags_set=yes
@@ -77,3 +84,4 @@ if test "X-$cc_flags_set" = "X-"; then
     cc_vendor=
     cc_version=
 fi
+
diff --git a/config/cmake/CMakeFindJavaCommon.cmake b/config/cmake/CMakeFindJavaCommon.cmake
new file mode 100644
index 0000000..fcf0389
--- /dev/null
+++ b/config/cmake/CMakeFindJavaCommon.cmake
@@ -0,0 +1,41 @@
+
+#=============================================================================
+# Copyright 2013-2014 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# Do not include this module directly from code outside CMake!
+set(_JAVA_HOME "")
+if(JAVA_HOME AND IS_DIRECTORY "${JAVA_HOME}")
+  set(_JAVA_HOME "${JAVA_HOME}")
+  set(_JAVA_HOME_EXPLICIT 1)
+else()
+  set(_ENV_JAVA_HOME "")
+  if(DEFINED ENV{JAVA_HOME})
+    file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _ENV_JAVA_HOME)
+  endif()
+  if(_ENV_JAVA_HOME AND IS_DIRECTORY "${_ENV_JAVA_HOME}")
+    set(_JAVA_HOME "${_ENV_JAVA_HOME}")
+    set(_JAVA_HOME_EXPLICIT 1)
+  else()
+    set(_CMD_JAVA_HOME "")
+    if(APPLE AND EXISTS /usr/libexec/java_home)
+      execute_process(COMMAND /usr/libexec/java_home
+        OUTPUT_VARIABLE _CMD_JAVA_HOME OUTPUT_STRIP_TRAILING_WHITESPACE)
+    endif()
+    if(_CMD_JAVA_HOME AND IS_DIRECTORY "${_CMD_JAVA_HOME}")
+      set(_JAVA_HOME "${_CMD_JAVA_HOME}")
+      set(_JAVA_HOME_EXPLICIT 0)
+    endif()
+    unset(_CMD_JAVA_HOME)
+  endif()
+  unset(_ENV_JAVA_HOME)
+endif()
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index 8bd6f45..49e9a05 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -6,15 +6,6 @@ include (${HDF_RESOURCES_EXT_DIR}/ConfigureChecks.cmake)
 include (${CMAKE_ROOT}/Modules/TestForSTDNamespace.cmake)
 
 #-----------------------------------------------------------------------------
-# Option to Clear File Buffers before write --enable-clear-file-buffers
-#-----------------------------------------------------------------------------
-option (HDF5_Enable_Clear_File_Buffers "Securely clear file buffers before writing to file" ON)
-if (HDF5_Enable_Clear_File_Buffers)
-  set (H5_CLEAR_MEMORY 1)
-endif (HDF5_Enable_Clear_File_Buffers)
-MARK_AS_ADVANCED (HDF5_Enable_Clear_File_Buffers)
-
-#-----------------------------------------------------------------------------
 # Option for --enable-strict-format-checks
 #-----------------------------------------------------------------------------
 option (HDF5_STRICT_FORMAT_CHECKS "Whether to perform strict file format checks" OFF)
diff --git a/config/cmake/FindHDFJAVA.cmake.in b/config/cmake/FindHDFJAVA.cmake.in
new file mode 100644
index 0000000..b822280
--- /dev/null
+++ b/config/cmake/FindHDFJAVA.cmake.in
@@ -0,0 +1,68 @@
+#
+# To be used by projects that make use of CMakeified hdf-java
+#
+
+#
+# Find the HDFJAVA includes and get all installed hdf-java library settings from
+# HDFJAVA-config.cmake file : Requires a CMake compatible hdf-java- at HDFJAVA_PACKAGE_VERSION@ or later 
+# for this feature to work. The following vars are set if hdf-java is found.
+#
+# HDFJAVA_FOUND               - True if found, otherwise all other vars are undefined
+# HDFJAVA_VERSION_STRING      - full version (e.g. @HDFJAVA_PACKAGE_VERSION@)
+# HDFJAVA_VERSION_MAJOR       - major part of version (e.g. @HDFJAVA_PACKAGE_VERSION_MAJOR@)
+# HDFJAVA_VERSION_MINOR       - minor part (e.g. @HDFJAVA_PACKAGE_VERSION_MINOR@)
+# 
+# Target names that are valid (depending on enabled options)
+# will be the following
+#
+# 
+# To aid in finding HDFJAVA as part of a subproject set
+# HDFJAVA_ROOT_DIR_HINT to the location where @HDFJAVA_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake lies
+
+INCLUDE (SelectLibraryConfigurations)
+INCLUDE (FindPackageHandleStandardArgs)
+
+# The HINTS option should only be used for values computed from the system.
+set (_HDFJAVA_HINTS
+    $ENV{HOME}/.local
+    $ENV{HDFJAVA_ROOT}
+    $ENV{HDFJAVA_ROOT_DIR_HINT}
+)
+# Hard-coded guesses should still go in PATHS. This ensures that the user
+# environment can always override hard guesses.
+set (_HDFJAVA_PATHS
+    $ENV{HOME}/.local
+    $ENV{HDFJAVA_ROOT}
+    $ENV{HDFJAVA_ROOT_DIR_HINT}
+    /usr/lib/@HDFJAVA_PACKAGE@
+    /usr/share/@HDFJAVA_PACKAGE@
+    /usr/local/@HDFJAVA_PACKAGE@
+    /usr/local/@HDFJAVA_PACKAGE@/share
+)
+
+FIND_PATH (HDFJAVA_ROOT_DIR "@HDFJAVA_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake"
+    HINTS ${_HDFJAVA_HINTS}
+    PATHS ${_HDFJAVA_PATHS}
+    PATH_SUFFIXES
+        cmake/@HDFJAVA_PACKAGE@
+        lib/cmake/@HDFJAVA_PACKAGE@
+        share/cmake/@HDFJAVA_PACKAGE@
+)
+
+FIND_PATH (HDFJAVA_LIBRARY "jarhdf5- at HDFJAVA_PACKAGE_VERSION@.jar"
+    HINTS ${_HDFJAVA_HINTS}
+    PATHS ${_HDFJAVA_PATHS}
+    PATH_SUFFIXES
+        lib
+)
+
+if (HDFJAVA_ROOT_DIR)
+  set (HDFJAVA_FOUND "YES")
+  INCLUDE (${HDFJAVA_ROOT_DIR}/@HDFJAVA_PACKAGE@@HDF_PACKAGE_EXT at -config.cmake)
+  set (HDFJAVA_LIBRARIES "${HDFJAVA_LIBRARY}")
+  set (HDFJAVA_INCLUDE_DIRS 
+        ${HDFJAVA_LIBRARY}/jarhdf- at HDFJAVA_PACKAGE_VERSION@.jar
+        ${HDFJAVA_LIBRARY}/jarhdf5- at HDFJAVA_PACKAGE_VERSION@.jar
+  )
+  
+endif (HDFJAVA_ROOT_DIR)
diff --git a/config/cmake/FindJNI.cmake b/config/cmake/FindJNI.cmake
new file mode 100644
index 0000000..440a988
--- /dev/null
+++ b/config/cmake/FindJNI.cmake
@@ -0,0 +1,342 @@
+#.rst:
+# FindJNI
+# -------
+#
+# Find JNI java libraries.
+#
+# This module finds if Java is installed and determines where the
+# include files and libraries are.  It also determines what the name of
+# the library is.  The caller may set variable JAVA_HOME to specify a
+# Java installation prefix explicitly.
+#
+# This module sets the following result variables:
+#
+# ::
+#
+#   JNI_INCLUDE_DIRS      = the include dirs to use
+#   JNI_LIBRARIES         = the libraries to use
+#   JNI_FOUND             = TRUE if JNI headers and libraries were found.
+#   JAVA_AWT_LIBRARY      = the path to the jawt library
+#   JAVA_JVM_LIBRARY      = the path to the jvm library
+#   JAVA_INCLUDE_PATH     = the include path to jni.h
+#   JAVA_INCLUDE_PATH2    = the include path to jni_md.h
+#   JAVA_AWT_INCLUDE_PATH = the include path to jawt.h
+
+#=============================================================================
+# Copyright 2001-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# Expand {libarch} occurences to java_libarch subdirectory(-ies) and set ${_var}
+macro(java_append_library_directories _var)
+    # Determine java arch-specific library subdir
+    # Mostly based on openjdk/jdk/make/common/shared/Platform.gmk as of openjdk
+    # 1.6.0_18 + icedtea patches. However, it would be much better to base the
+    # guess on the first part of the GNU config.guess platform triplet.
+    if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+      if(CMAKE_LIBRARY_ARCHITECTURE STREQUAL "x86_64-linux-gnux32")
+        set(_java_libarch "x32" "amd64" "i386")
+      else()
+        set(_java_libarch "amd64" "i386")
+      endif()
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
+        set(_java_libarch "i386")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^alpha")
+        set(_java_libarch "alpha")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
+        # Subdir is "arm" for both big-endian (arm) and little-endian (armel).
+        set(_java_libarch "arm")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
+        # mips* machines are bi-endian mostly so processor does not tell
+        # endianess of the underlying system.
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "mips" "mipsel" "mipseb" "mips64" "mips64el" "mipsn32" "mipsn32el")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
+        set(_java_libarch "ppc64" "ppc64le")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
+        set(_java_libarch "ppc64" "ppc")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
+        set(_java_libarch "ppc")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sparc")
+        # Both flavours can run on the same processor
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "sparc" "sparcv9")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(parisc|hppa)")
+        set(_java_libarch "parisc" "parisc64")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^s390")
+        # s390 binaries can run on s390x machines
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}" "s390" "s390x")
+    elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
+        set(_java_libarch "sh")
+    else()
+        set(_java_libarch "${CMAKE_SYSTEM_PROCESSOR}")
+    endif()
+
+    # Append default list architectures if CMAKE_SYSTEM_PROCESSOR was empty or
+    # system is non-Linux (where the code above has not been well tested)
+    if(NOT _java_libarch OR NOT (CMAKE_SYSTEM_NAME MATCHES "Linux"))
+        list(APPEND _java_libarch "i386" "amd64" "ppc")
+    endif()
+
+    # Sometimes ${CMAKE_SYSTEM_PROCESSOR} is added to the list to prefer
+    # current value to a hardcoded list. Remove possible duplicates.
+    list(REMOVE_DUPLICATES _java_libarch)
+
+    foreach(_path ${ARGN})
+        if(_path MATCHES "{libarch}")
+            foreach(_libarch ${_java_libarch})
+                string(REPLACE "{libarch}" "${_libarch}" _newpath "${_path}")
+                list(APPEND ${_var} "${_newpath}")
+            endforeach()
+        else()
+            list(APPEND ${_var} "${_path}")
+        endif()
+    endforeach()
+endmacro()
+
+#include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake)
+INCLUDE (CMakeFindJavaCommon)
+
+# Save CMAKE_FIND_FRAMEWORK
+if(DEFINED CMAKE_FIND_FRAMEWORK)
+  set(_JNI_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
+else()
+  unset(_JNI_CMAKE_FIND_FRAMEWORK)
+endif()
+
+if(_JAVA_HOME_EXPLICIT)
+  set(CMAKE_FIND_FRAMEWORK NEVER)
+endif()
+
+set(JAVA_AWT_LIBRARY_DIRECTORIES)
+if(_JAVA_HOME)
+  JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
+    ${_JAVA_HOME}/jre/lib/{libarch}
+    ${_JAVA_HOME}/jre/lib
+    ${_JAVA_HOME}/lib/{libarch}
+    ${_JAVA_HOME}/lib
+    ${_JAVA_HOME}
+    )
+endif()
+get_filename_component(java_install_version
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
+
+list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/lib"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/lib"
+  )
+JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
+  /usr/java/lib
+  /usr/java/jre/lib
+  /usr/lib
+  /usr/lib64
+  /usr/local/lib
+  /usr/local/lib64
+  /usr/lib/jvm/java/lib
+  /usr/lib64/jvm/java/lib
+  /usr/lib/java/jre/lib/{libarch}
+  /usr/lib64/java/jre/lib/{libarch}
+  /usr/lib/jvm/jre/lib/{libarch}
+  /usr/lib64/jvm/jre/lib/{libarch}
+  /usr/local/lib/java/jre/lib/{libarch}
+  /usr/local/share/java/jre/lib/{libarch}
+  /usr/lib/j2sdk1.4-sun/jre/lib/{libarch}
+  /usr/lib/j2sdk1.5-sun/jre/lib/{libarch}
+  /opt/sun-jdk-1.5.0.04/jre/lib/{libarch}
+  /usr/lib/jvm/java-6-sun/jre/lib/{libarch}
+  /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch}
+  /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch}       # can this one be removed according to #8821 ? Alex
+  /usr/lib/jvm/java-6-openjdk/jre/lib/{libarch}
+  /usr/lib/jvm/java-7-openjdk/jre/lib/{libarch}
+  /usr/lib/jvm/java-7-openjdk-{libarch}/jre/lib/{libarch}
+  /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/{libarch}        # fedora
+  # Debian specific paths for default JVM
+  /usr/lib/jvm/default-java/jre/lib/{libarch}
+  /usr/lib/jvm/default-java/jre/lib
+  /usr/lib/jvm/default-java/lib
+  # OpenBSD specific paths for default JVM
+  /usr/local/jdk-1.7.0/jre/lib/{libarch}
+  /usr/local/jre-1.7.0/lib/{libarch}
+  /usr/local/jdk-1.6.0/jre/lib/{libarch}
+  /usr/local/jre-1.6.0/lib/{libarch}
+  # SuSE specific paths for default JVM
+  /usr/lib64/jvm/java/jre/lib/{libarch}
+  /usr/lib64/jvm/jre/lib/{libarch}
+  )
+
+set(JAVA_JVM_LIBRARY_DIRECTORIES)
+foreach(dir ${JAVA_AWT_LIBRARY_DIRECTORIES})
+  list(APPEND JAVA_JVM_LIBRARY_DIRECTORIES
+    "${dir}"
+    "${dir}/client"
+    "${dir}/server"
+    # IBM SDK, Java Technology Edition, specific paths
+    "${dir}/j9vm"
+    "${dir}/default"
+    )
+endforeach()
+
+set(JAVA_AWT_INCLUDE_DIRECTORIES)
+if(_JAVA_HOME)
+  list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES ${_JAVA_HOME}/include)
+endif()
+list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
+  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
+  ${_JAVA_HOME}/include
+  /usr/include
+  /usr/java/include
+  /usr/local/include
+  /usr/lib/java/include
+  /usr/lib64/java/include
+  /usr/local/lib/java/include
+  /usr/lib/jvm/java/include
+  /usr/lib64/jvm/java/include
+  /usr/lib/jvm/java-6-sun/include
+  /usr/lib/jvm/java-1.5.0-sun/include
+  /usr/lib/jvm/java-6-sun-1.6.0.00/include       # can this one be removed according to #8821 ? Alex
+  /usr/lib/jvm/java-6-openjdk/include
+  /usr/lib/jvm/java-7-openjdk/include
+  /usr/lib/jvm/java-7-openjdk-i386/include
+  /usr/lib/jvm/java-7-openjdk-amd64/include
+  /usr/lib64/jvm/java-7-openjdk/include
+  /usr/lib64/jvm/java-7-openjdk-amd64/include
+  /usr/local/share/java/include
+  /usr/lib/j2sdk1.4-sun/include
+  /usr/lib/j2sdk1.5-sun/include
+  /opt/sun-jdk-1.5.0.04/include
+  # Debian specific path for default JVM
+  /usr/lib/jvm/default-java/include
+  # OpenBSD specific path for default JVM
+  /usr/local/jdk-1.7.0/include
+  /usr/local/jdk-1.6.0/include
+  # SuSE specific paths for default JVM
+  /usr/lib64/jvm/java/include
+  )
+
+foreach(JAVA_PROG "${JAVA_RUNTIME}" "${JAVA_COMPILE}" "${JAVA_ARCHIVE}")
+  get_filename_component(jpath "${JAVA_PROG}" PATH)
+  foreach(JAVA_INC_PATH ../include ../java/include ../share/java/include)
+    if(EXISTS ${jpath}/${JAVA_INC_PATH})
+      list(APPEND JAVA_AWT_INCLUDE_DIRECTORIES "${jpath}/${JAVA_INC_PATH}")
+    endif()
+  endforeach()
+  foreach(JAVA_LIB_PATH
+    ../lib ../jre/lib ../jre/lib/i386
+    ../java/lib ../java/jre/lib ../java/jre/lib/i386
+    ../share/java/lib ../share/java/jre/lib ../share/java/jre/lib/i386)
+    if(EXISTS ${jpath}/${JAVA_LIB_PATH})
+      list(APPEND JAVA_AWT_LIBRARY_DIRECTORIES "${jpath}/${JAVA_LIB_PATH}")
+    endif()
+  endforeach()
+endforeach()
+
+if(APPLE)
+  if(CMAKE_FIND_FRAMEWORK STREQUAL "ONLY")
+    set(_JNI_SEARCHES FRAMEWORK)
+  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "NEVER")
+    set(_JNI_SEARCHES NORMAL)
+  elseif(CMAKE_FIND_FRAMEWORK STREQUAL "LAST")
+    set(_JNI_SEARCHES NORMAL FRAMEWORK)
+  else()
+    set(_JNI_SEARCHES FRAMEWORK NORMAL)
+  endif()
+  set(_JNI_FRAMEWORK_JVM NAMES JavaVM)
+  set(_JNI_FRAMEWORK_JAWT "${_JNI_FRAMEWORK_JVM}")
+else()
+  set(_JNI_SEARCHES NORMAL)
+endif()
+
+set(_JNI_NORMAL_JVM
+  NAMES jvm
+  PATHS ${JAVA_JVM_LIBRARY_DIRECTORIES}
+  )
+
+set(_JNI_NORMAL_JAWT
+  NAMES jawt
+  PATHS ${JAVA_AWT_LIBRARY_DIRECTORIES}
+  )
+
+foreach(search ${_JNI_SEARCHES})
+  find_library(JAVA_JVM_LIBRARY ${_JNI_${search}_JVM})
+  find_library(JAVA_AWT_LIBRARY ${_JNI_${search}_JAWT})
+  if(JAVA_JVM_LIBRARY)
+    break()
+  endif()
+endforeach()
+unset(_JNI_SEARCHES)
+unset(_JNI_FRAMEWORK_JVM)
+unset(_JNI_FRAMEWORK_JAWT)
+unset(_JNI_NORMAL_JVM)
+unset(_JNI_NORMAL_JAWT)
+
+# Find headers matching the library.
+if("${JAVA_JVM_LIBRARY};${JAVA_AWT_LIBRARY};" MATCHES "(/JavaVM.framework|-framework JavaVM);")
+  set(CMAKE_FIND_FRAMEWORK ONLY)
+else()
+  set(CMAKE_FIND_FRAMEWORK NEVER)
+endif()
+
+# add in the include path
+find_path(JAVA_INCLUDE_PATH jni.h
+  ${JAVA_AWT_INCLUDE_DIRECTORIES}
+)
+
+find_path(JAVA_INCLUDE_PATH2 jni_md.h
+  ${JAVA_INCLUDE_PATH}
+  ${JAVA_INCLUDE_PATH}/darwin
+  ${JAVA_INCLUDE_PATH}/win32
+  ${JAVA_INCLUDE_PATH}/linux
+  ${JAVA_INCLUDE_PATH}/freebsd
+  ${JAVA_INCLUDE_PATH}/openbsd
+  ${JAVA_INCLUDE_PATH}/solaris
+  ${JAVA_INCLUDE_PATH}/hp-ux
+  ${JAVA_INCLUDE_PATH}/alpha
+)
+
+find_path(JAVA_AWT_INCLUDE_PATH jawt.h
+  ${JAVA_INCLUDE_PATH}
+)
+
+# Restore CMAKE_FIND_FRAMEWORK
+if(DEFINED _JNI_CMAKE_FIND_FRAMEWORK)
+  set(CMAKE_FIND_FRAMEWORK ${_JNI_CMAKE_FIND_FRAMEWORK})
+  unset(_JNI_CMAKE_FIND_FRAMEWORK)
+else()
+  unset(CMAKE_FIND_FRAMEWORK)
+endif()
+
+#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+INCLUDE (FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(JNI  DEFAULT_MSG  JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY
+                                                    JAVA_INCLUDE_PATH  JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
+
+mark_as_advanced(
+  JAVA_AWT_LIBRARY
+  JAVA_JVM_LIBRARY
+  JAVA_AWT_INCLUDE_PATH
+  JAVA_INCLUDE_PATH
+  JAVA_INCLUDE_PATH2
+)
+
+set(JNI_LIBRARIES
+  ${JAVA_AWT_LIBRARY}
+  ${JAVA_JVM_LIBRARY}
+)
+
+set(JNI_INCLUDE_DIRS
+  ${JAVA_INCLUDE_PATH}
+  ${JAVA_INCLUDE_PATH2}
+  ${JAVA_AWT_INCLUDE_PATH}
+)
+
+message ("JNI_LIBRARIES=${JNI_LIBRARIES}")
+message ("JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index ce8219f..31c5afb 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -18,10 +18,6 @@
 /* Define if building universal (internal helper macro) */
 #cmakedefine H5_AC_APPLE_UNIVERSAL_BUILD @H5_AC_APPLE_UNIVERSAL_BUILD@
 
-/* Define if the memory buffers being written to disk should be cleared before
-   writing. */
-#cmakedefine H5_CLEAR_MEMORY @H5_CLEAR_MEMORY@
-
 /* Define if C++ compiler recognizes offsetof */
 #cmakedefine H5_CXX_HAVE_OFFSETOF @H5_CXX_HAVE_OFFSETOF@
 
diff --git a/config/cmake/HDF518_Examples.cmake.in b/config/cmake/HDF518_Examples.cmake.in
index 1be5c65..135dcfc 100644
--- a/config/cmake/HDF518_Examples.cmake.in
+++ b/config/cmake/HDF518_Examples.cmake.in
@@ -37,9 +37,13 @@ if(NOT DEFINED CTEST_SOURCE_NAME)
 endif()
 if(NOT DEFINED STATIC_LIBRARIES)
     set(STATICLIBRARIES "YES")
+else(NOT DEFINED STATIC_LIBRARIES)
+    set(STATICLIBRARIES "NO")
 endif()
 if(NOT DEFINED FORTRAN_LIBRARIES)
     set(FORTRANLIBRARIES "NO")
+else(NOT DEFINED FORTRAN_LIBRARIES)
+    set(FORTRANLIBRARIES "YES")
 endif()
 
 #TAR_SOURCE - name of tarfile
diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake
index bd86f34..d88e672 100644
--- a/config/cmake/HDF5Macros.cmake
+++ b/config/cmake/HDF5Macros.cmake
@@ -1,7 +1,13 @@
 #-------------------------------------------------------------------------------
 macro (H5_SET_LIB_OPTIONS libtarget libname libtype)
   set (LIB_OUT_NAME "${libname}")
+  # SOVERSION passed in ARGN when shared
   if (${libtype} MATCHES "SHARED")
+    if (ARGN)
+      set (PACKAGE_SOVERSION ${ARGN})
+    else (ARGN)
+      set (PACKAGE_SOVERSION ${HDF5_PACKAGE_SOVERSION})
+    endif (ARGN)
     if (WIN32)
       set (LIBHDF_VERSION ${HDF5_PACKAGE_VERSION_MAJOR})
     else (WIN32)
@@ -9,9 +15,9 @@ macro (H5_SET_LIB_OPTIONS libtarget libname libtype)
     endif (WIN32)
     set_target_properties (${libtarget} PROPERTIES VERSION ${LIBHDF_VERSION})
     if (WIN32)
-        set (${LIB_OUT_NAME} "${LIB_OUT_NAME}-${HDF5_PACKAGE_SOVERSION}")
+        set (${LIB_OUT_NAME} "${LIB_OUT_NAME}-${PACKAGE_SOVERSION}")
     else (WIN32)
-        set_target_properties (${libtarget} PROPERTIES SOVERSION ${HDF5_PACKAGE_SOVERSION})
+        set_target_properties (${libtarget} PROPERTIES SOVERSION ${PACKAGE_SOVERSION})
     endif (WIN32)
   endif (${libtype} MATCHES "SHARED")
   HDF_SET_LIB_OPTIONS (${libtarget} ${LIB_OUT_NAME} ${libtype})
@@ -39,4 +45,5 @@ macro (H5_SET_LIB_OPTIONS libtarget libname libtype)
       endif (${libtype} MATCHES "SHARED")
     endif (HDF5_BUILD_FRAMEWORKS)
   endif (APPLE)
+
 endmacro (H5_SET_LIB_OPTIONS)
diff --git a/config/cmake/HDF5_Examples.cmake.in b/config/cmake/HDF5_Examples.cmake.in
index 40e2b32..3dce88e 100644
--- a/config/cmake/HDF5_Examples.cmake.in
+++ b/config/cmake/HDF5_Examples.cmake.in
@@ -14,6 +14,7 @@ set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
 #CTEST_SOURCE_NAME - name of source folder; HDF4Examples
 #STATIC_LIBRARIES - Default is YES
 #FORTRAN_LIBRARIES - Default is NO
+#JAVA_LIBRARIES - Default is NO
 ##NO_MAC_FORTRAN - set to TRUE to allow shared libs on a Mac)
 if(DEFINED CTEST_SCRIPT_ARG)
     # transform ctest script arguments of the form
@@ -37,9 +38,18 @@ if(NOT DEFINED CTEST_SOURCE_NAME)
 endif()
 if(NOT DEFINED STATIC_LIBRARIES)
     set(STATICLIBRARIES "YES")
+else(NOT DEFINED STATIC_LIBRARIES)
+    set(STATICLIBRARIES "NO")
 endif()
 if(NOT DEFINED FORTRAN_LIBRARIES)
     set(FORTRANLIBRARIES "NO")
+else(NOT DEFINED FORTRAN_LIBRARIES)
+    set(FORTRANLIBRARIES "YES")
+endif()
+if(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "NO")
+else(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "YES")
 endif()
 
 #TAR_SOURCE - name of tarfile
@@ -69,9 +79,14 @@ else(WIN32)
   set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
 endif(WIN32)
 if(${FORTRANLIBRARIES})
-  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
+else()
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
+endif()
+if(${JAVALIBRARIES})
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=ON")
 else()
-  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=OFF")
 endif()
 set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF5_PACKAGE_NAME:STRING=@HDF5_PACKAGE@@HDF_PACKAGE_EXT@")
 
diff --git a/config/cmake/README.txt.cmake.in b/config/cmake/README.txt.cmake.in
index ec40abe..4c4ffd5 100644
--- a/config/cmake/README.txt.cmake.in
+++ b/config/cmake/README.txt.cmake.in
@@ -9,6 +9,7 @@ It was built with the following options:
     -- @LIB_TYPE@ C/C++/Fortran libraries
     -- SZIP (encoder enabled) and ZLIB
     -- @LIB_TYPE@ HDF5 tools
+    -- Java
 
 The contents of this directory are:
 
diff --git a/config/cmake/UseJava.cmake b/config/cmake/UseJava.cmake
new file mode 100644
index 0000000..9b2b1e0
--- /dev/null
+++ b/config/cmake/UseJava.cmake
@@ -0,0 +1,1350 @@
+#.rst:
+# UseJava
+# -------
+#
+# Use Module for Java
+#
+# This file provides functions for Java.  It is assumed that
+# FindJava.cmake has already been loaded.  See FindJava.cmake for
+# information on how to load Java into your CMake project.
+#
+# ::
+#
+#  add_jar(target_name
+#          [SOURCES] source1 [source2 ...] [resource1 ...]
+#          [INCLUDE_JARS jar1 [jar2 ...]]
+#          [ENTRY_POINT entry]
+#          [VERSION version]
+#          [OUTPUT_NAME name]
+#          [OUTPUT_DIR dir]
+#          )
+#
+# This command creates a <target_name>.jar.  It compiles the given
+# source files (source) and adds the given resource files (resource) to
+# the jar file.  Source files can be java files or listing files
+# (prefixed by '@').  If only resource files are given then just a jar file
+# is created.  The list of include jars are added to the classpath when
+# compiling the java sources and also to the dependencies of the target.
+# INCLUDE_JARS also accepts other target names created by add_jar.  For
+# backwards compatibility, jar files listed as sources are ignored (as
+# they have been since the first version of this module).
+#
+# The default OUTPUT_DIR can also be changed by setting the variable
+# CMAKE_JAVA_TARGET_OUTPUT_DIR.
+#
+# Additional instructions:
+#
+# ::
+#
+#    To add compile flags to the target you can set these flags with
+#    the following variable:
+#
+#
+#
+# ::
+#
+#        set(CMAKE_JAVA_COMPILE_FLAGS -nowarn)
+#
+#
+#
+# ::
+#
+#    To add a path or a jar file to the class path you can do this
+#    with the CMAKE_JAVA_INCLUDE_PATH variable.
+#
+#
+#
+# ::
+#
+#        set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar)
+#
+#
+#
+# ::
+#
+#    To use a different output name for the target you can set it with:
+#
+#
+#
+# ::
+#
+#        add_jar(foobar foobar.java OUTPUT_NAME shibboleet.jar)
+#
+#
+#
+# ::
+#
+#    To use a different output directory than CMAKE_CURRENT_BINARY_DIR
+#    you can set it with:
+#
+#
+#
+# ::
+#
+#        add_jar(foobar foobar.java OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin)
+#
+#
+#
+# ::
+#
+#    To define an entry point in your jar you can set it with the ENTRY_POINT
+#    named argument:
+#
+#
+#
+# ::
+#
+#        add_jar(example ENTRY_POINT com/examples/MyProject/Main)
+#
+#
+#
+# ::
+#
+#    To define a custom manifest for the jar, you can set it with the manifest
+#    named argument:
+#
+#
+#
+# ::
+#
+#        add_jar(example MANIFEST /path/to/manifest)
+#
+#
+#
+# ::
+#
+#    To add a VERSION to the target output name you can set it using
+#    the VERSION named argument to add_jar. This will create a jar file with the
+#    name shibboleet-1.0.0.jar and will create a symlink shibboleet.jar
+#    pointing to the jar with the version information.
+#
+#
+#
+# ::
+#
+#        add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
+#
+#
+#
+# ::
+#
+#     If the target is a JNI library, utilize the following commands to
+#     create a JNI symbolic link:
+#
+#
+#
+# ::
+#
+#        set(CMAKE_JNI_TARGET TRUE)
+#        add_jar(shibboleet shibbotleet.java VERSION 1.2.0)
+#        install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet)
+#        install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR})
+#
+#
+#
+# ::
+#
+#     If a single target needs to produce more than one jar from its
+#     java source code, to prevent the accumulation of duplicate class
+#     files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior
+#     to calling the add_jar() function:
+#
+#
+#
+# ::
+#
+#        set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo)
+#        add_jar(foo foo.java)
+#
+#
+#
+# ::
+#
+#        set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar)
+#        add_jar(bar bar.java)
+#
+#
+#
+# Target Properties:
+#
+# ::
+#
+#    The add_jar() functions sets some target properties. You can get these
+#    properties with the
+#       get_property(TARGET <target_name> PROPERTY <propery_name>)
+#    command.
+#
+#
+#
+# ::
+#
+#    INSTALL_FILES      The files which should be installed. This is used by
+#                       install_jar().
+#    JNI_SYMLINK        The JNI symlink which should be installed.
+#                       This is used by install_jni_symlink().
+#    JAR_FILE           The location of the jar file so that you can include
+#                       it.
+#    CLASSDIR           The directory where the class files can be found. For
+#                       example to use them with javah.
+#
+# ::
+#
+#  find_jar(<VAR>
+#           name | NAMES name1 [name2 ...]
+#           [PATHS path1 [path2 ... ENV var]]
+#           [VERSIONS version1 [version2]]
+#           [DOC "cache documentation string"]
+#           )
+#
+# This command is used to find a full path to the named jar.  A cache
+# entry named by <VAR> is created to stor the result of this command.
+# If the full path to a jar is found the result is stored in the
+# variable and the search will not repeated unless the variable is
+# cleared.  If nothing is found, the result will be <VAR>-NOTFOUND, and
+# the search will be attempted again next time find_jar is invoked with
+# the same variable.  The name of the full path to a file that is
+# searched for is specified by the names listed after NAMES argument.
+# Additional search locations can be specified after the PATHS argument.
+# If you require special a version of a jar file you can specify it with
+# the VERSIONS argument.  The argument after DOC will be used for the
+# documentation string in the cache.
+#
+# ::
+#
+#  install_jar(target_name destination)
+#  install_jar(target_name DESTINATION destination [COMPONENT component])
+#
+# This command installs the TARGET_NAME files to the given DESTINATION.
+# It should be called in the same scope as add_jar() or it will fail.
+#
+# ::
+#
+#  install_jni_symlink(target_name destination)
+#  install_jni_symlink(target_name DESTINATION destination [COMPONENT component])
+#
+# This command installs the TARGET_NAME JNI symlinks to the given
+# DESTINATION.  It should be called in the same scope as add_jar() or it
+# will fail.
+#
+# ::
+#
+#  create_javadoc(<VAR>
+#                 PACKAGES pkg1 [pkg2 ...]
+#                 [SOURCEPATH <sourcepath>]
+#                 [CLASSPATH <classpath>]
+#                 [INSTALLPATH <install path>]
+#                 [DOCTITLE "the documentation title"]
+#                 [WINDOWTITLE "the title of the document"]
+#                 [AUTHOR TRUE|FALSE]
+#                 [USE TRUE|FALSE]
+#                 [VERSION TRUE|FALSE]
+#                 )
+#
+# Create java documentation based on files or packages.  For more
+# details please read the javadoc manpage.
+#
+# There are two main signatures for create_javadoc.  The first signature
+# works with package names on a path with source files:
+#
+# ::
+#
+#    Example:
+#    create_javadoc(my_example_doc
+#      PACKAGES com.exmaple.foo com.example.bar
+#      SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}"
+#      CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+#      WINDOWTITLE "My example"
+#      DOCTITLE "<h1>My example</h1>"
+#      AUTHOR TRUE
+#      USE TRUE
+#      VERSION TRUE
+#    )
+#
+#
+#
+# The second signature for create_javadoc works on a given list of
+# files.
+#
+# ::
+#
+#    create_javadoc(<VAR>
+#                   FILES file1 [file2 ...]
+#                   [CLASSPATH <classpath>]
+#                   [INSTALLPATH <install path>]
+#                   [DOCTITLE "the documentation title"]
+#                   [WINDOWTITLE "the title of the document"]
+#                   [AUTHOR TRUE|FALSE]
+#                   [USE TRUE|FALSE]
+#                   [VERSION TRUE|FALSE]
+#                  )
+#
+#
+#
+# Example:
+#
+# ::
+#
+#    create_javadoc(my_example_doc
+#      FILES ${example_SRCS}
+#      CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+#      WINDOWTITLE "My example"
+#      DOCTITLE "<h1>My example</h1>"
+#      AUTHOR TRUE
+#      USE TRUE
+#      VERSION TRUE
+#    )
+#
+#
+#
+# Both signatures share most of the options.  These options are the same
+# as what you can find in the javadoc manpage.  Please look at the
+# manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and VERSION.
+#
+# The documentation will be by default installed to
+#
+# ::
+#
+#    ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR>
+#
+#
+#
+# if you don't set the INSTALLPATH.
+#
+# ::
+#
+#  create_javah(TARGET <target>
+#               GENERATED_FILES <VAR>
+#               CLASSES <class>...
+#               [CLASSPATH <classpath>...]
+#               [DEPENDS <depend>...]
+#               [OUTPUT_NAME <path>|OUTPUT_DIR <path>]
+#               )
+#
+# Create C header files from java classes. These files provide the connective glue
+# that allow your Java and C code to interact.
+#
+# There are two main signatures for create_javah.  The first signature
+# returns generated files throught variable specified by GENERATED_FILES option:
+#
+# ::
+#
+#    Example:
+#    Create_javah(GENERATED_FILES files_headers
+#      CLASSES org.cmake.HelloWorld
+#      CLASSPATH hello.jar
+#    )
+#
+#
+#
+# The second signature for create_javah creates a target which encapsulates
+# header files generation.
+#
+# ::
+#
+#    Example:
+#    Create_javah(TARGET target_headers
+#      CLASSES org.cmake.HelloWorld
+#      CLASSPATH hello.jar
+#    )
+#
+#
+#
+# Both signatures share same options.
+#
+#  ``CLASSES <class>...``
+#    Specifies Java classes used to generate headers.
+#
+#  ``CLASSPATH <classpath>...``
+#    Specifies various paths to look up classes. Here .class files, jar files or targets
+#    created by command add_jar can be used.
+#
+#  ``DEPENDS <depend>...``
+#    Targets on which the javah target depends
+#
+#  ``OUTPUT_NAME <path>``
+#    Concatenates the resulting header files for all the classes listed by option CLASSES
+#    into <path>. Same behavior as option '-o' of javah tool.
+#
+#  ``OUTPUT_DIR <path>``
+#    Sets the directory where the header files will be generated. Same behavior as option
+#    '-d' of javah tool. If not specified, ${CMAKE_CURRENT_BINARY_DIR} is used as output directory.
+
+#=============================================================================
+# Copyright 2013 OpenGamma Ltd. <graham at opengamma.com>
+# Copyright 2010-2011 Andreas schneider <asn at redhat.com>
+# Copyright 2010-2013 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+include(CMakeParseArguments)
+
+function (__java_copy_file src dest comment)
+    add_custom_command(
+        OUTPUT  ${dest}
+        COMMAND cmake -E copy_if_different
+        ARGS    ${src}
+                ${dest}
+        DEPENDS ${src}
+        COMMENT ${comment})
+endfunction ()
+
+# define helper scripts
+set(_JAVA_CLASS_FILELIST_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaClassFilelist.cmake)
+set(_JAVA_SYMLINK_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/UseJavaSymlinks.cmake)
+
+function(add_jar _TARGET_NAME)
+
+    cmake_parse_arguments(_add_jar
+      ""
+      "VERSION;OUTPUT_DIR;OUTPUT_NAME;ENTRY_POINT;MANIFEST"
+      "SOURCES;INCLUDE_JARS"
+      ${ARGN}
+    )
+
+    # In CMake < 2.8.12, add_jar used variables which were set prior to calling
+    # add_jar for customizing the behavior of add_jar. In order to be backwards
+    # compatible, check if any of those variables are set, and use them to
+    # initialize values of the named arguments. (Giving the corresponding named
+    # argument will override the value set here.)
+    #
+    # New features should use named arguments only.
+    if(NOT DEFINED _add_jar_VERSION AND DEFINED CMAKE_JAVA_TARGET_VERSION)
+        set(_add_jar_VERSION "${CMAKE_JAVA_TARGET_VERSION}")
+    endif()
+    if(NOT DEFINED _add_jar_OUTPUT_DIR AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_DIR)
+        set(_add_jar_OUTPUT_DIR "${CMAKE_JAVA_TARGET_OUTPUT_DIR}")
+    endif()
+    if(NOT DEFINED _add_jar_OUTPUT_NAME AND DEFINED CMAKE_JAVA_TARGET_OUTPUT_NAME)
+        set(_add_jar_OUTPUT_NAME "${CMAKE_JAVA_TARGET_OUTPUT_NAME}")
+        # reset
+        set(CMAKE_JAVA_TARGET_OUTPUT_NAME)
+    endif()
+    if(NOT DEFINED _add_jar_ENTRY_POINT AND DEFINED CMAKE_JAVA_JAR_ENTRY_POINT)
+        set(_add_jar_ENTRY_POINT "${CMAKE_JAVA_JAR_ENTRY_POINT}")
+    endif()
+
+    set(_JAVA_SOURCE_FILES ${_add_jar_SOURCES} ${_add_jar_UNPARSED_ARGUMENTS})
+
+    if (NOT DEFINED _add_jar_OUTPUT_DIR)
+        set(_add_jar_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
+    endif()
+
+    if (_add_jar_ENTRY_POINT)
+        set(_ENTRY_POINT_OPTION e)
+        set(_ENTRY_POINT_VALUE ${_add_jar_ENTRY_POINT})
+    endif ()
+
+    if (_add_jar_MANIFEST)
+        set(_MANIFEST_OPTION m)
+        get_filename_component (_MANIFEST_VALUE "${_add_jar_MANIFEST}" ABSOLUTE)
+    endif ()
+
+    if (LIBRARY_OUTPUT_PATH)
+        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
+    else ()
+        set(CMAKE_JAVA_LIBRARY_OUTPUT_PATH ${_add_jar_OUTPUT_DIR})
+    endif ()
+
+    set(CMAKE_JAVA_INCLUDE_PATH
+        ${CMAKE_JAVA_INCLUDE_PATH}
+        ${CMAKE_CURRENT_SOURCE_DIR}
+        ${CMAKE_JAVA_OBJECT_OUTPUT_PATH}
+        ${CMAKE_JAVA_LIBRARY_OUTPUT_PATH}
+    )
+
+    if (CMAKE_HOST_WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+        set(CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+    else ()
+        set(CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+    endif()
+
+    foreach (JAVA_INCLUDE_DIR ${CMAKE_JAVA_INCLUDE_PATH})
+       set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${JAVA_INCLUDE_DIR}")
+    endforeach()
+
+    set(CMAKE_JAVA_CLASS_OUTPUT_PATH "${_add_jar_OUTPUT_DIR}${CMAKE_FILES_DIRECTORY}/${_TARGET_NAME}.dir")
+
+    set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}.jar")
+    if (_add_jar_OUTPUT_NAME AND _add_jar_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}-${_add_jar_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${_add_jar_OUTPUT_NAME}.jar")
+    elseif (_add_jar_VERSION)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_TARGET_NAME}-${_add_jar_VERSION}.jar")
+        set(_JAVA_TARGET_OUTPUT_LINK "${_TARGET_NAME}.jar")
+    elseif (_add_jar_OUTPUT_NAME)
+        set(_JAVA_TARGET_OUTPUT_NAME "${_add_jar_OUTPUT_NAME}.jar")
+    endif ()
+
+    set(_JAVA_CLASS_FILES)
+    set(_JAVA_COMPILE_FILES)
+    set(_JAVA_COMPILE_FILELISTS)
+    set(_JAVA_DEPENDS)
+    set(_JAVA_COMPILE_DEPENDS)
+    set(_JAVA_RESOURCE_FILES)
+    set(_JAVA_RESOURCE_FILES_RELATIVE)
+    foreach(_JAVA_SOURCE_FILE ${_JAVA_SOURCE_FILES})
+        get_filename_component(_JAVA_EXT ${_JAVA_SOURCE_FILE} EXT)
+        get_filename_component(_JAVA_FILE ${_JAVA_SOURCE_FILE} NAME_WE)
+        get_filename_component(_JAVA_PATH ${_JAVA_SOURCE_FILE} PATH)
+        get_filename_component(_JAVA_FULL ${_JAVA_SOURCE_FILE} ABSOLUTE)
+
+        if (_JAVA_SOURCE_FILE MATCHES "^@(.+)$")
+            get_filename_component(_JAVA_FULL ${CMAKE_MATCH_1} ABSOLUTE)
+            list(APPEND _JAVA_COMPILE_FILELISTS ${_JAVA_FULL})
+
+        elseif (_JAVA_EXT MATCHES ".java")
+            file(RELATIVE_PATH _JAVA_REL_BINARY_PATH ${_add_jar_OUTPUT_DIR} ${_JAVA_FULL})
+            file(RELATIVE_PATH _JAVA_REL_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${_JAVA_FULL})
+            string(LENGTH ${_JAVA_REL_BINARY_PATH} _BIN_LEN)
+            string(LENGTH ${_JAVA_REL_SOURCE_PATH} _SRC_LEN)
+            if (${_BIN_LEN} LESS ${_SRC_LEN})
+                set(_JAVA_REL_PATH ${_JAVA_REL_BINARY_PATH})
+            else ()
+                set(_JAVA_REL_PATH ${_JAVA_REL_SOURCE_PATH})
+            endif ()
+            get_filename_component(_JAVA_REL_PATH ${_JAVA_REL_PATH} PATH)
+
+            list(APPEND _JAVA_COMPILE_FILES ${_JAVA_SOURCE_FILE})
+            set(_JAVA_CLASS_FILE "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_REL_PATH}/${_JAVA_FILE}.class")
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES} ${_JAVA_CLASS_FILE})
+
+        elseif (_JAVA_EXT MATCHES ".jar"
+                OR _JAVA_EXT MATCHES ".war"
+                OR _JAVA_EXT MATCHES ".ear"
+                OR _JAVA_EXT MATCHES ".sar")
+            # Ignored for backward compatibility
+
+        elseif (_JAVA_EXT STREQUAL "")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}} ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}_CLASSPATH})
+            list(APPEND _JAVA_DEPENDS ${JAVA_JAR_TARGET_${_JAVA_SOURCE_FILE}})
+
+        else ()
+            __java_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/${_JAVA_SOURCE_FILE}
+                             ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE}
+                             "Copying ${_JAVA_SOURCE_FILE} to the build directory")
+            list(APPEND _JAVA_RESOURCE_FILES ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${_JAVA_SOURCE_FILE})
+            list(APPEND _JAVA_RESOURCE_FILES_RELATIVE ${_JAVA_SOURCE_FILE})
+        endif ()
+    endforeach()
+
+    foreach(_JAVA_INCLUDE_JAR ${_add_jar_INCLUDE_JARS})
+        if (TARGET ${_JAVA_INCLUDE_JAR})
+            get_target_property(_JAVA_JAR_PATH ${_JAVA_INCLUDE_JAR} JAR_FILE)
+            if (_JAVA_JAR_PATH)
+                set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${_JAVA_JAR_PATH}")
+                list(APPEND CMAKE_JAVA_INCLUDE_PATH ${_JAVA_JAR_PATH})
+                list(APPEND _JAVA_DEPENDS ${_JAVA_INCLUDE_JAR})
+                list(APPEND _JAVA_COMPILE_DEPENDS ${_JAVA_INCLUDE_JAR})
+            else ()
+                message(SEND_ERROR "add_jar: INCLUDE_JARS target ${_JAVA_INCLUDE_JAR} is not a jar")
+            endif ()
+        else ()
+            set(CMAKE_JAVA_INCLUDE_PATH_FINAL "${CMAKE_JAVA_INCLUDE_PATH_FINAL}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${_JAVA_INCLUDE_JAR}")
+            list(APPEND CMAKE_JAVA_INCLUDE_PATH "${_JAVA_INCLUDE_JAR}")
+            list(APPEND _JAVA_DEPENDS "${_JAVA_INCLUDE_JAR}")
+            list(APPEND _JAVA_COMPILE_DEPENDS "${_JAVA_INCLUDE_JAR}")
+        endif ()
+    endforeach()
+
+    # create an empty java_class_filelist
+    if (NOT EXISTS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist)
+        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist "")
+    endif()
+
+    if (_JAVA_COMPILE_FILES OR _JAVA_COMPILE_FILELISTS)
+        set (_JAVA_SOURCES_FILELISTS)
+
+        if (_JAVA_COMPILE_FILES)
+            # Create the list of files to compile.
+            set(_JAVA_SOURCES_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_sources)
+            string(REPLACE ";" "\"\n\"" _JAVA_COMPILE_STRING "\"${_JAVA_COMPILE_FILES}\"")
+            file(WRITE ${_JAVA_SOURCES_FILE} ${_JAVA_COMPILE_STRING})
+            list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_SOURCES_FILE}")
+        endif()
+        if (_JAVA_COMPILE_FILELISTS)
+            foreach (_JAVA_FILELIST IN LISTS _JAVA_COMPILE_FILELISTS)
+                list (APPEND _JAVA_SOURCES_FILELISTS "@${_JAVA_FILELIST}")
+            endforeach()
+        endif()
+
+        # Compile the java files and create a list of class files
+        add_custom_command(
+            # NOTE: this command generates an artificial dependency file
+            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            COMMAND ${Java_JAVAC_EXECUTABLE}
+                ${CMAKE_JAVA_COMPILE_FLAGS}
+                -classpath "${CMAKE_JAVA_INCLUDE_PATH_FINAL}"
+                -d ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                ${_JAVA_SOURCES_FILELISTS}
+            COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            DEPENDS ${_JAVA_COMPILE_FILES} ${_JAVA_COMPILE_FILELISTS} ${_JAVA_COMPILE_DEPENDS}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            COMMENT "Building Java objects for ${_TARGET_NAME}.jar"
+        )
+        add_custom_command(
+            OUTPUT ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -DCMAKE_JAVA_CLASS_OUTPUT_PATH=${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+                -DCMAKE_JAR_CLASSES_PREFIX="${CMAKE_JAR_CLASSES_PREFIX}"
+                -P ${_JAVA_CLASS_FILELIST_SCRIPT}
+            DEPENDS ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_compiled_${_TARGET_NAME}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        )
+    endif ()
+
+    # create the jar file
+    set(_JAVA_JAR_OUTPUT_PATH
+      ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_NAME})
+    if (CMAKE_JNI_TARGET)
+        add_custom_command(
+            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
+                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_JAR_OUTPUT_PATH}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+        )
+    else ()
+        add_custom_command(
+            OUTPUT ${_JAVA_JAR_OUTPUT_PATH}
+            COMMAND ${Java_JAR_EXECUTABLE}
+                -cf${_ENTRY_POINT_OPTION}${_MANIFEST_OPTION} ${_JAVA_JAR_OUTPUT_PATH} ${_ENTRY_POINT_VALUE} ${_MANIFEST_VALUE}
+                ${_JAVA_RESOURCE_FILES_RELATIVE} @java_class_filelist
+            COMMAND ${CMAKE_COMMAND}
+                -D_JAVA_TARGET_DIR=${_add_jar_OUTPUT_DIR}
+                -D_JAVA_TARGET_OUTPUT_NAME=${_JAVA_TARGET_OUTPUT_NAME}
+                -D_JAVA_TARGET_OUTPUT_LINK=${_JAVA_TARGET_OUTPUT_LINK}
+                -P ${_JAVA_SYMLINK_SCRIPT}
+            WORKING_DIRECTORY ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+            DEPENDS ${_JAVA_RESOURCE_FILES} ${_JAVA_DEPENDS} ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist
+            COMMENT "Creating Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
+        )
+    endif ()
+
+    # Add the target and make sure we have the latest resource files.
+    add_custom_target(${_TARGET_NAME} ALL DEPENDS ${_JAVA_JAR_OUTPUT_PATH})
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            INSTALL_FILES
+                ${_JAVA_JAR_OUTPUT_PATH}
+    )
+
+    if (_JAVA_TARGET_OUTPUT_LINK)
+        set_property(
+            TARGET
+                ${_TARGET_NAME}
+            PROPERTY
+                INSTALL_FILES
+                    ${_JAVA_JAR_OUTPUT_PATH}
+                    ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+        )
+
+        if (CMAKE_JNI_TARGET)
+            set_property(
+                TARGET
+                    ${_TARGET_NAME}
+                PROPERTY
+                    JNI_SYMLINK
+                        ${_add_jar_OUTPUT_DIR}/${_JAVA_TARGET_OUTPUT_LINK}
+            )
+        endif ()
+    endif ()
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            JAR_FILE
+                ${_JAVA_JAR_OUTPUT_PATH}
+    )
+
+    set_property(
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            CLASSDIR
+                ${CMAKE_JAVA_CLASS_OUTPUT_PATH}
+    )
+
+endfunction()
+
+function(INSTALL_JAR _TARGET_NAME)
+    if (ARGC EQUAL 2)
+      set (_DESTINATION ${ARGV1})
+    else()
+      cmake_parse_arguments(_install_jar
+        ""
+        "DESTINATION;COMPONENT"
+        ""
+        ${ARGN})
+      if (_install_jar_DESTINATION)
+        set (_DESTINATION ${_install_jar_DESTINATION})
+      else()
+        message(SEND_ERROR "install_jar: ${_TARGET_NAME}: DESTINATION must be specified.")
+      endif()
+
+      if (_install_jar_COMPONENT)
+        set (_COMPONENT COMPONENT ${_install_jar_COMPONENT})
+      endif()
+    endif()
+
+    get_property(__FILES
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            INSTALL_FILES
+    )
+
+    if (__FILES)
+        install(
+            FILES
+                ${__FILES}
+            DESTINATION
+                ${_DESTINATION}
+            ${_COMPONENT}
+        )
+    else ()
+        message(SEND_ERROR "install_jar: The target ${_TARGET_NAME} is not known in this scope.")
+    endif ()
+endfunction()
+
+function(INSTALL_JNI_SYMLINK _TARGET_NAME)
+    if (ARGC EQUAL 2)
+      set (_DESTINATION ${ARGV1})
+    else()
+      cmake_parse_arguments(_install_jni_symlink
+        ""
+        "DESTINATION;COMPONENT"
+        ""
+        ${ARGN})
+      if (_install_jni_symlink_DESTINATION)
+        set (_DESTINATION ${_install_jni_symlink_DESTINATION})
+      else()
+        message(SEND_ERROR "install_jni_symlink: ${_TARGET_NAME}: DESTINATION must be specified.")
+      endif()
+
+      if (_install_jni_symlink_COMPONENT)
+        set (_COMPONENT COMPONENT ${_install_jni_symlink_COMPONENT})
+      endif()
+    endif()
+
+    get_property(__SYMLINK
+        TARGET
+            ${_TARGET_NAME}
+        PROPERTY
+            JNI_SYMLINK
+    )
+
+    if (__SYMLINK)
+        install(
+            FILES
+                ${__SYMLINK}
+            DESTINATION
+                ${_DESTINATION}
+            ${_COMPONENT}
+        )
+    else ()
+        message(SEND_ERROR "install_jni_symlink: The target ${_TARGET_NAME} is not known in this scope.")
+    endif ()
+endfunction()
+
+function (find_jar VARIABLE)
+    set(_jar_names)
+    set(_jar_files)
+    set(_jar_versions)
+    set(_jar_paths
+        /usr/share/java/
+        /usr/local/share/java/
+        ${Java_JAR_PATHS})
+    set(_jar_doc "NOTSET")
+
+    set(_state "name")
+
+    foreach (arg ${ARGN})
+        if (${_state} STREQUAL "name")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_names ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif ()
+            endif ()
+        elseif (${_state} STREQUAL "versions")
+            if (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_versions ${_jar_versions} ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "names")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_names ${_jar_names} ${arg})
+                if (_jar_doc STREQUAL "NOTSET")
+                    set(_jar_doc "Finding ${arg} jar")
+                endif ()
+            endif ()
+        elseif (${_state} STREQUAL "paths")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "DOC")
+                set(_state "doc")
+            else ()
+                set(_jar_paths ${_jar_paths} ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "doc")
+            if (${arg} STREQUAL "VERSIONS")
+                set(_state "versions")
+            elseif (${arg} STREQUAL "NAMES")
+                set(_state "names")
+            elseif (${arg} STREQUAL "PATHS")
+                set(_state "paths")
+            else ()
+                set(_jar_doc ${arg})
+            endif ()
+        endif ()
+    endforeach ()
+
+    if (NOT _jar_names)
+        message(FATAL_ERROR "find_jar: No name to search for given")
+    endif ()
+
+    foreach (jar_name ${_jar_names})
+        foreach (version ${_jar_versions})
+            set(_jar_files ${_jar_files} ${jar_name}-${version}.jar)
+        endforeach ()
+        set(_jar_files ${_jar_files} ${jar_name}.jar)
+    endforeach ()
+
+    find_file(${VARIABLE}
+        NAMES   ${_jar_files}
+        PATHS   ${_jar_paths}
+        DOC     ${_jar_doc}
+        NO_DEFAULT_PATH)
+endfunction ()
+
+function(create_javadoc _target)
+    set(_javadoc_packages)
+    set(_javadoc_files)
+    set(_javadoc_overview)
+    set(_javadoc_sourcepath)
+    set(_javadoc_classpath)
+    set(_javadoc_installpath "${CMAKE_INSTALL_PREFIX}/share/javadoc")
+    set(_javadoc_doctitle)
+    set(_javadoc_windowtitle)
+    set(_javadoc_author FALSE)
+    set(_javadoc_version FALSE)
+    set(_javadoc_use FALSE)
+
+    set(_state "package")
+
+    foreach (arg ${ARGN})
+        if (${_state} STREQUAL "package")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_packages ${arg})
+                set(_state "packages")
+            endif ()
+        elseif (${_state} STREQUAL "packages")
+            if (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_packages ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "files")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_files ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "sourcepath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_sourcepath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "classpath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_classpath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "installpath")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_installpath ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "doctitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_doctitle ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "windowtitle")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_windowtitle ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "author")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_author ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "use")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_use ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "version")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "OVERVIEW")
+                set(_state "overview")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                set(_javadoc_version ${arg})
+            endif ()
+        elseif (${_state} STREQUAL "overview")
+            if (${arg} STREQUAL "PACKAGES")
+                set(_state "packages")
+            elseif (${arg} STREQUAL "FILES")
+                set(_state "files")
+            elseif (${arg} STREQUAL "SOURCEPATH")
+                set(_state "sourcepath")
+            elseif (${arg} STREQUAL "CLASSPATH")
+                set(_state "classpath")
+            elseif (${arg} STREQUAL "INSTALLPATH")
+                set(_state "installpath")
+            elseif (${arg} STREQUAL "DOCTITLE")
+                set(_state "doctitle")
+            elseif (${arg} STREQUAL "WINDOWTITLE")
+                set(_state "windowtitle")
+            elseif (${arg} STREQUAL "AUTHOR")
+                set(_state "author")
+            elseif (${arg} STREQUAL "USE")
+                set(_state "use")
+            elseif (${arg} STREQUAL "VERSION")
+                set(_state "version")
+            else ()
+                list(APPEND _javadoc_overview ${arg})
+            endif ()
+        endif ()
+    endforeach ()
+
+    set(_javadoc_builddir ${CMAKE_CURRENT_BINARY_DIR}/javadoc/${_target})
+    set(_javadoc_options -d ${_javadoc_builddir})
+
+    if (_javadoc_sourcepath)
+        set(_start TRUE)
+        foreach(_path ${_javadoc_sourcepath})
+            if (_start)
+                set(_sourcepath ${_path})
+                set(_start FALSE)
+            else ()
+                set(_sourcepath ${_sourcepath}:${_path})
+            endif ()
+        endforeach()
+        set(_javadoc_options ${_javadoc_options} -sourcepath ${_sourcepath})
+    endif ()
+
+    if (_javadoc_overview)
+        set(_start TRUE)
+        foreach(_path ${_javadoc_overview})
+            if (_start)
+                set(_overview ${_path})
+                set(_start FALSE)
+            else ()
+                set(_overview ${_overview}:${_path})
+            endif ()
+        endforeach()
+        set(_javadoc_options ${_javadoc_options} -overview ${_overview})
+    endif ()
+
+    if (_javadoc_classpath)
+        set(_start TRUE)
+        foreach(_path ${_javadoc_classpath})
+            if (_start)
+                set(_classpath ${_path})
+                set(_start FALSE)
+            else ()
+                set(_classpath ${_classpath}:${_path})
+            endif ()
+        endforeach()
+        set(_javadoc_options ${_javadoc_options} -classpath "${_classpath}")
+    endif ()
+
+    if (_javadoc_doctitle)
+        set(_javadoc_options ${_javadoc_options} -doctitle '${_javadoc_doctitle}')
+    endif ()
+
+    if (_javadoc_windowtitle)
+        set(_javadoc_options ${_javadoc_options} -windowtitle '${_javadoc_windowtitle}')
+    endif ()
+
+    if (_javadoc_author)
+        set(_javadoc_options ${_javadoc_options} -author)
+    endif ()
+
+    if (_javadoc_use)
+        set(_javadoc_options ${_javadoc_options} -use)
+    endif ()
+
+    if (_javadoc_version)
+        set(_javadoc_options ${_javadoc_options} -version)
+    endif ()
+
+    add_custom_target(${_target}_javadoc ALL
+        COMMAND ${Java_JAVADOC_EXECUTABLE} ${_javadoc_options}
+                            ${_javadoc_files}
+                            ${_javadoc_packages}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+    )
+
+    install(
+        DIRECTORY ${_javadoc_builddir}
+        DESTINATION ${_javadoc_installpath}
+    )
+endfunction()
+
+function (create_javah)
+    cmake_parse_arguments(_create_javah
+      ""
+      "TARGET;GENERATED_FILES;OUTPUT_NAME;OUTPUT_DIR"
+      "CLASSES;CLASSPATH;DEPENDS"
+      ${ARGN})
+
+    # ckeck parameters
+    if (NOT _create_javah_TARGET AND NOT _create_javah_GENERATED_FILES)
+      message (FATAL_ERROR "create_javah: TARGET or GENERATED_FILES must be specified.")
+    endif()
+    if (_create_javah_OUTPUT_NAME AND _create_javah_OUTPUT_DIR)
+      message (FATAL_ERROR "create_javah: OUTPUT_NAME and OUTPUT_DIR are mutually exclusive.")
+    endif()
+
+    if (NOT _create_javah_CLASSES)
+      message (FATAL_ERROR "create_javah: CLASSES is a required parameter.")
+    endif()
+
+    set (_output_files)
+    if (WIN32 AND NOT CYGWIN AND CMAKE_HOST_SYSTEM_NAME MATCHES "Windows")
+      set(_classpath_sep "$<SEMICOLON>")
+    else ()
+      set(_classpath_sep ":")
+    endif()
+
+    # handle javah options
+    set (_javah_options)
+
+    if (_create_javah_CLASSPATH)
+      # CLASSPATH can specify directories, jar files or targets created with add_jar command
+      set (_classpath)
+      foreach (_path IN LISTS _create_javah_CLASSPATH)
+        if (TARGET ${_path})
+          get_target_property (_jar_path ${_path} JAR_FILE)
+          if (_jar_path)
+            list (APPEND _classpath "${_jar_path}")
+            list (APPEND _create_javah_DEPENDS "${_path}")
+          else()
+            message(SEND_ERROR "create_javah: CLASSPATH target ${_path} is not a jar.")
+          endif()
+        elseif (EXISTS "${_path}")
+          list (APPEND _classpath "${_path}")
+          if (NOT IS_DIRECTORY "${_path}")
+            list (APPEND _create_javah_DEPENDS "${_path}")
+          endif()
+        else()
+          message(SEND_ERROR "create_javah: CLASSPATH entry ${_path} does not exist.")
+        endif()
+      endforeach()
+      string (REPLACE ";" "${_classpath_sep}" _classpath "${_classpath}")
+      list (APPEND _javah_options -classpath "${_classpath}")
+    endif()
+
+    if (_create_javah_OUTPUT_DIR)
+      list (APPEND _javah_options -d "${_create_javah_OUTPUT_DIR}")
+    endif()
+
+    if (_create_javah_OUTPUT_NAME)
+      list (APPEND _javah_options -o "${_create_javah_OUTPUT_NAME}")
+      set (_output_files "${_create_javah_OUTPUT_NAME}")
+
+      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_NAME}" DIRECTORY)
+      get_filename_component (_create_javah_OUTPUT_DIR "${_create_javah_OUTPUT_DIR}" ABSOLUTE)
+    endif()
+
+    if (NOT _create_javah_OUTPUT_DIR)
+      set (_create_javah_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+    endif()
+
+    if (NOT _create_javah_OUTPUT_NAME)
+      # compute output names
+      foreach (_class IN LISTS _create_javah_CLASSES)
+        string (REPLACE "." "_" _c_header "${_class}")
+        set (_c_header  "${_create_javah_OUTPUT_DIR}/${_c_header}.h")
+        list (APPEND _output_files "${_c_header}")
+      endforeach()
+    endif()
+
+    # finalize custom command arguments
+    if (_create_javah_DEPENDS)
+      list (INSERT _create_javah_DEPENDS 0 DEPENDS)
+    endif()
+
+    add_custom_command (OUTPUT ${_output_files}
+      COMMAND "${Java_JAVAH_EXECUTABLE}" ${_javah_options} -jni ${_create_javah_CLASSES}
+      ${_create_javah_DEPENDS}
+      WORKING_DIRECTORY ${_create_javah_OUTPUT_DIR}
+      COMMENT "Building C header files from classes...")
+
+    if (_create_javah_TARGET)
+      add_custom_target (${_create_javah_TARGET} ALL DEPENDS ${_output_files})
+    endif()
+    if (_create_javah_GENERATED_FILES)
+      set (${_create_javah_GENERATED_FILES} ${_output_files} PARENT_SCOPE)
+    endif()
+endfunction()
diff --git a/config/cmake/UseJavaClassFilelist.cmake b/config/cmake/UseJavaClassFilelist.cmake
new file mode 100644
index 0000000..e8e6f01
--- /dev/null
+++ b/config/cmake/UseJavaClassFilelist.cmake
@@ -0,0 +1,58 @@
+#.rst:
+# UseJavaClassFilelist
+# --------------------
+#
+#
+#
+#
+#
+# This script create a list of compiled Java class files to be added to
+# a jar file.  This avoids including cmake files which get created in
+# the binary directory.
+
+#=============================================================================
+# Copyright 2010-2011 Andreas schneider <asn at redhat.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+if (CMAKE_JAVA_CLASS_OUTPUT_PATH)
+    if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}")
+
+        set(_JAVA_GLOBBED_FILES)
+        if (CMAKE_JAR_CLASSES_PREFIX)
+            foreach(JAR_CLASS_PREFIX ${CMAKE_JAR_CLASSES_PREFIX})
+                message(STATUS "JAR_CLASS_PREFIX: ${JAR_CLASS_PREFIX}")
+
+                file(GLOB_RECURSE _JAVA_GLOBBED_TMP_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/${JAR_CLASS_PREFIX}/*.class")
+                if (_JAVA_GLOBBED_TMP_FILES)
+                    list(APPEND _JAVA_GLOBBED_FILES ${_JAVA_GLOBBED_TMP_FILES})
+                endif ()
+            endforeach()
+        else()
+            file(GLOB_RECURSE _JAVA_GLOBBED_FILES "${CMAKE_JAVA_CLASS_OUTPUT_PATH}/*.class")
+        endif ()
+
+        set(_JAVA_CLASS_FILES)
+        # file(GLOB_RECURSE foo RELATIVE) is broken so we need this.
+        foreach(_JAVA_GLOBBED_FILE ${_JAVA_GLOBBED_FILES})
+            file(RELATIVE_PATH _JAVA_CLASS_FILE ${CMAKE_JAVA_CLASS_OUTPUT_PATH} ${_JAVA_GLOBBED_FILE})
+            set(_JAVA_CLASS_FILES ${_JAVA_CLASS_FILES}${_JAVA_CLASS_FILE}\n)
+        endforeach()
+
+        # write to file
+        file(WRITE ${CMAKE_JAVA_CLASS_OUTPUT_PATH}/java_class_filelist ${_JAVA_CLASS_FILES})
+
+    else ()
+        message(SEND_ERROR "FATAL: Java class output path doesn't exist")
+    endif ()
+else ()
+    message(SEND_ERROR "FATAL: Can't find CMAKE_JAVA_CLASS_OUTPUT_PATH")
+endif ()
diff --git a/config/cmake/UseJavaSymlinks.cmake b/config/cmake/UseJavaSymlinks.cmake
new file mode 100644
index 0000000..90ffdd5
--- /dev/null
+++ b/config/cmake/UseJavaSymlinks.cmake
@@ -0,0 +1,38 @@
+#.rst:
+# UseJavaSymlinks
+# ---------------
+#
+#
+#
+#
+#
+# Helper script for UseJava.cmake
+
+#=============================================================================
+# Copyright 2010-2011 Andreas schneider <asn at redhat.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+if (UNIX AND _JAVA_TARGET_OUTPUT_LINK)
+    if (_JAVA_TARGET_OUTPUT_NAME)
+        find_program(LN_EXECUTABLE
+            NAMES
+                ln
+        )
+
+        execute_process(
+            COMMAND ${LN_EXECUTABLE} -sf "${_JAVA_TARGET_OUTPUT_NAME}" "${_JAVA_TARGET_OUTPUT_LINK}"
+            WORKING_DIRECTORY ${_JAVA_TARGET_DIR}
+        )
+    else ()
+        message(SEND_ERROR "FATAL: Can't find _JAVA_TARGET_OUTPUT_NAME")
+    endif ()
+endif ()
diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake
index 5cae21b..1ff381a 100644
--- a/config/cmake/cacheinit.cmake
+++ b/config/cmake/cacheinit.cmake
@@ -6,6 +6,8 @@
 
 set (CMAKE_INSTALL_FRAMEWORK_PREFIX "Library/Frameworks" CACHE STRING "Frameworks installation directory" FORCE)
 
+set (HDF5_GENERATE_HEADERS OFF CACHE BOOL "Rebuild Generated Files" FORCE)
+
 set (HDF_PACKAGE_EXT "" CACHE STRING "Name of HDF package extension" FORCE)
 
 set (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
diff --git a/config/cmake/hdf5-config.cmake.in b/config/cmake/hdf5-config.cmake.in
index 3577e40..3f95d76 100644
--- a/config/cmake/hdf5-config.cmake.in
+++ b/config/cmake/hdf5-config.cmake.in
@@ -14,6 +14,7 @@ set (${HDF5_PACKAGE_NAME}_VALID_COMPONENTS
     HL
     CXX_HL
     Fortran_HL
+    Java
     Tools
 )
 
@@ -23,6 +24,7 @@ set (${HDF5_PACKAGE_NAME}_VALID_COMPONENTS
 set (${HDF5_PACKAGE_NAME}_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
 set (${HDF5_PACKAGE_NAME}_BUILD_FORTRAN   @HDF5_BUILD_FORTRAN@)
 set (${HDF5_PACKAGE_NAME}_BUILD_CPP_LIB   @HDF5_BUILD_CPP_LIB@)
+set (${HDF5_PACKAGE_NAME}_BUILD_JAVA      @HDF5_BUILD_JAVA@)
 set (${HDF5_PACKAGE_NAME}_BUILD_TOOLS     @HDF5_BUILD_TOOLS@)
 set (${HDF5_PACKAGE_NAME}_BUILD_HL_LIB    @HDF5_BUILD_HL_LIB@)
 set (${HDF5_PACKAGE_NAME}_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
@@ -40,6 +42,16 @@ if (${HDF5_PACKAGE_NAME}_ENABLE_PARALLEL)
   set (${HDF5_PACKAGE_NAME}_MPI_C_LIBRARIES    "@MPI_C_LIBRARIES@")
 endif ()
 
+if (${HDF5_PACKAGE_NAME}_BUILD_JAVA)
+  set (${HDF5_PACKAGE_NAME}_JAVA_INCLUDE_DIRS
+      @PACKAGE_CURRENT_BUILD_DIR@/lib/jarhdf5- at HDF5_VERSION_STRING@.jar
+      @PACKAGE_CURRENT_BUILD_DIR@/lib/slf4j-api-1.7.5.jar
+      @PACKAGE_CURRENT_BUILD_DIR@/lib/slf4j-nop-1.7.5.jar
+  )
+  set (${HDF5_PACKAGE_NAME}_JAVA_LIBRARY "@PACKAGE_CURRENT_BUILD_DIR@/lib")
+  set (${HDF5_PACKAGE_NAME}_JAVA_LIBRARIES "${${HDF5_PACKAGE_NAME}_JAVA_LIBRARY}")
+endif()
+
 #-----------------------------------------------------------------------------
 # Directories
 #-----------------------------------------------------------------------------
@@ -123,6 +135,8 @@ foreach (libtype IN LISTS ${HDF5_PACKAGE_NAME}_LIB_TYPE)
       set (hdf5_comp "hdf5_hl")
     elseif (${comp} STREQUAL "CXX_HL")
       set (hdf5_comp "hdf5_hl_cpp")
+    elseif (${comp} STREQUAL "Java")
+      set (hdf5_comp "hdf5_java")
     elseif (${comp} STREQUAL "Tools")
       set (hdf5_comp "hdf5_tools")
     elseif (${comp} STREQUAL "Fortran")
diff --git a/config/cmake/jrunTest.cmake b/config/cmake/jrunTest.cmake
new file mode 100644
index 0000000..6c9bbdd
--- /dev/null
+++ b/config/cmake/jrunTest.cmake
@@ -0,0 +1,212 @@
+# 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.
+cmake_policy(SET CMP0007 NEW)
+
+# arguments checking
+if (NOT TEST_TESTER)
+  message (FATAL_ERROR "Require TEST_TESTER to be defined")
+endif (NOT TEST_TESTER)
+if (NOT TEST_PROGRAM)
+  message (FATAL_ERROR "Require TEST_PROGRAM to be defined")
+endif (NOT TEST_PROGRAM)
+if (NOT TEST_LIBRARY_DIRECTORY)
+  message (STATUS "Require TEST_LIBRARY_DIRECTORY to be defined")
+endif (NOT TEST_LIBRARY_DIRECTORY)
+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_CLASSPATH)
+  message (STATUS "Require TEST_CLASSPATH to be defined")
+endif (NOT TEST_CLASSPATH)
+if (NOT TEST_REFERENCE)
+  message (FATAL_ERROR "Require TEST_REFERENCE to be defined")
+endif (NOT TEST_REFERENCE)
+
+if (NOT TEST_ERRREF)
+  set (ERROR_APPEND 1)
+endif (NOT TEST_ERRREF)
+
+if (NOT TEST_LOG_LEVEL)
+  set (LOG_LEVEL "info")
+else (NOT TEST_LOG_LEVEL)
+  set (LOG_LEVEL "${TEST_LOG_LEVEL}")
+endif (NOT TEST_LOG_LEVEL)
+
+message (STATUS "COMMAND: ${TEST_TESTER} -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=${LOG_LEVEL} -Djava.library.path=\"${TEST_LIBRARY_DIRECTORY}\" -cp \"${TEST_CLASSPATH}\" ${TEST_ARGS} ${TEST_PROGRAM} ${ARGN}")
+
+if (WIN32 AND NOT MINGW)
+  set (ENV{PATH} "$ENV{PATH}\\;${TEST_LIBRARY_DIRECTORY}")
+endif (WIN32 AND NOT MINGW)
+
+# run the test program, capture the stdout/stderr and the result var
+execute_process (
+    COMMAND ${TEST_TESTER} -Xmx1024M
+    -Dorg.slf4j.simpleLogger.defaultLogLevel=${LOG_LEVEL}
+    -Djava.library.path=${TEST_LIBRARY_DIRECTORY}
+    -cp "${TEST_CLASSPATH}" ${TEST_ARGS} ${TEST_PROGRAM}
+    ${ARGN}
+    WORKING_DIRECTORY ${TEST_FOLDER}
+    RESULT_VARIABLE TEST_RESULT
+    OUTPUT_FILE ${TEST_OUTPUT}
+    ERROR_FILE ${TEST_OUTPUT}.err
+    ERROR_VARIABLE TEST_ERROR
+)
+
+message (STATUS "COMMAND Result: ${TEST_RESULT}")
+
+if (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
+  file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
+  if (TEST_MASK_FILE)
+    STRING(REGEX REPLACE "CurrentDir is [^\n]+\n" "CurrentDir is (dir name)\n" TEST_STREAM "${TEST_STREAM}") 
+  endif (TEST_MASK_FILE)
+
+  if (ERROR_APPEND)
+    file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") 
+  else (ERROR_APPEND)
+    file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}")
+  endif (ERROR_APPEND)
+endif (EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
+
+if (TEST_MASK_ERROR)
+  if (NOT TEST_ERRREF)
+    file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
+  else (NOT TEST_ERRREF)
+    file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  endif (NOT TEST_ERRREF)
+  string (REGEX REPLACE "Time:[^\n]+\n" "Time:  XXXX\n" TEST_STREAM "${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 "HDF5 .[1-9]*[.][0-9]*[.][0-9]*[^)]*" "HDF5 (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}") 
+  if (NOT TEST_ERRREF)
+    file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}")
+  else (NOT TEST_ERRREF)
+    file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+  endif (NOT TEST_ERRREF)
+endif (TEST_MASK_ERROR)
+
+# if the return value is !=0 bail out
+if (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
+  message (STATUS "ERROR OUTPUT: ${TEST_STREAM}")
+  message (FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n${TEST_ERROR}")
+endif (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
+
+message (STATUS "COMMAND Error: ${TEST_ERROR}")
+
+if (NOT TEST_SKIP_COMPARE)
+  if (WIN32 AND NOT MINGW)
+    file (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM)
+    file (WRITE ${TEST_FOLDER}/${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}/${TEST_REFERENCE}
+      RESULT_VARIABLE TEST_RESULT
+  )
+  if (NOT ${TEST_RESULT} STREQUAL 0)
+  set (TEST_RESULT 0)
+  file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT} test_act)
+  list (LENGTH test_act len_act)
+  file (STRINGS ${TEST_FOLDER}/${TEST_REFERENCE} test_ref)
+  list (LENGTH test_ref len_ref)
+  if (NOT ${len_act} STREQUAL "0")
+    MATH (EXPR _FP_LEN "${len_ref} - 1")
+    foreach (line RANGE 0 ${_FP_LEN})
+      list (GET test_act ${line} str_act)
+      list (GET test_ref ${line} str_ref)
+      if (NOT "${str_act}" STREQUAL "${str_ref}")
+        if (NOT "${str_act}" STREQUAL "")
+          set (TEST_RESULT 1)
+          message ("line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n")
+         endif (NOT "${str_act}" STREQUAL "")
+      endif (NOT "${str_act}" STREQUAL "${str_ref}")
+    endforeach (line RANGE 0 ${_FP_LEN})
+  endif (NOT ${len_act} STREQUAL "0")
+  if (NOT ${len_act} STREQUAL ${len_ref})
+    set (TEST_RESULT 1)
+  endif (NOT ${len_act} STREQUAL ${len_ref})
+  endif (NOT ${TEST_RESULT} STREQUAL 0)
+
+  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_OUTPUT} did not match ${TEST_REFERENCE}")
+  endif (NOT ${TEST_RESULT} STREQUAL 0)
+  
+  if (TEST_ERRREF)
+    if (WIN32 AND NOT MINGW)
+      file (READ ${TEST_FOLDER}/${TEST_ERRREF} TEST_STREAM)
+      file (WRITE ${TEST_FOLDER}/${TEST_ERRREF} "${TEST_STREAM}")
+    endif (WIN32 AND NOT MINGW)
+
+    # now compare the error output with the error reference
+    execute_process (
+        COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT}.err ${TEST_FOLDER}/${TEST_ERRREF}
+        RESULT_VARIABLE TEST_RESULT
+    )
+    if (NOT ${TEST_RESULT} STREQUAL 0)
+    set (TEST_RESULT 0)
+    file (STRINGS ${TEST_FOLDER}/${TEST_OUTPUT}.err test_act)
+    list (LENGTH test_act len_act)
+    file (STRINGS ${TEST_FOLDER}/${TEST_ERRREF} test_ref)
+    list (LENGTH test_ref len_ref)
+    MATH (EXPR _FP_LEN "${len_ref} - 1")
+    if (NOT ${len_act} STREQUAL "0")
+      MATH (EXPR _FP_LEN "${len_ref} - 1")
+      foreach (line RANGE 0 ${_FP_LEN})
+        list (GET test_act ${line} str_act)
+        list (GET test_ref ${line} str_ref)
+        if (NOT "${str_act}" STREQUAL "${str_ref}")
+          if (NOT "${str_act}" STREQUAL "")
+            set (TEST_RESULT 1)
+            message ("line = ${line}\n***ACTUAL: ${str_act}\n****REFER: ${str_ref}\n")
+           endif (NOT "${str_act}" STREQUAL "")
+        endif (NOT "${str_act}" STREQUAL "${str_ref}")
+      endforeach (line RANGE 0 ${_FP_LEN})
+    endif (NOT ${len_act} STREQUAL "0")
+    if (NOT ${len_act} STREQUAL ${len_ref})
+      set (TEST_RESULT 1)
+    endif (NOT ${len_act} STREQUAL ${len_ref})
+    endif (NOT ${TEST_RESULT} STREQUAL 0)
+
+    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 error output of ${TEST_OUTPUT}.err did not match ${TEST_ERRREF}")
+    endif (NOT ${TEST_RESULT} STREQUAL 0)
+  endif (TEST_ERRREF)
+endif (NOT TEST_SKIP_COMPARE)
+
+if (TEST_GREP_COMPARE)
+  # now grep the output with the reference
+  file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+
+  # TEST_REFERENCE should always be matched
+  string (REGEX MATCH "${TEST_REFERENCE}" TEST_MATCH ${TEST_STREAM}) 
+  string (COMPARE EQUAL "${TEST_REFERENCE}" "${TEST_MATCH}" TEST_RESULT) 
+  if (${TEST_RESULT} STREQUAL "0")
+    message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not contain ${TEST_REFERENCE}")
+  endif (${TEST_RESULT} STREQUAL "0")
+
+  string (REGEX MATCH "${TEST_FILTER}" TEST_MATCH ${TEST_STREAM}) 
+  if (${TEST_EXPECT} STREQUAL "1")
+    # TEST_EXPECT (1) interperts TEST_FILTER as NOT to match
+    string (LENGTH "${TEST_MATCH}" TEST_RESULT) 
+    if (NOT ${TEST_RESULT} STREQUAL "0")
+      message (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did contain ${TEST_FILTER}")
+    endif (NOT ${TEST_RESULT} STREQUAL "0")
+  endif (${TEST_EXPECT} STREQUAL "0")
+endif (TEST_GREP_COMPARE)
+
+# everything went fine...
+message ("${TEST_PROGRAM} Passed")
+
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index cc6ae3e..8348af0 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -1,43 +1,50 @@
-      SUMMARY OF THE HDF5 CONFIGURATION
-      =================================
+	    SUMMARY OF THE HDF5 CONFIGURATION
+	    =================================
 
 General Information:
 -------------------
                    HDF5 Version: @HDF5_PACKAGE_VERSION_STRING@
                   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: @CMAKE_BUILD_TYPE@
-                     C Compiler: @CMAKE_C_COMPILER@
-                         CFLAGS: @CMAKE_C_FLAGS@
-                      H5_CFLAGS: @H5_CFLAGS@
-                      AM_CFLAGS: @AM_CFLAGS@
-                       CPPFLAGS: @CPPFLAGS@
-                    H5_CPPFLAGS: @H5_CPPFLAGS@
-                    AM_CPPFLAGS: @AM_CPPFLAGS@
-               Shared C Library: @H5_ENABLE_SHARED_LIB@
-               Static C Library: @H5_ENABLE_STATIC_LIB@
+                     Build Mode: @CMAKE_BUILD_TYPE@
+              Debugging Symbols: @SYMBOLS@
+                        Asserts: @ASSERTS@
+                      Profiling: @PROFILING@
+             Optimization Level: @OPTIMIZATION@
+
+Linking Options:
+----------------
+                      Libraries: @BUILD_NAME_EXT@
   Statically Linked Executables: @BUILD_STATIC_EXECS@
                         LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@
+                     H5_LDFLAGS: @H5_LDFLAGS@
                      AM_LDFLAGS: @AM_LDFLAGS@
                 Extra libraries: @LINK_LIBS@
                        Archiver: @CMAKE_AR@
                          Ranlib: @CMAKE_RANLIB@
-              Debugged Packages: @DEBUG_PKG@
-                    API Tracing: @HDF5_ENABLE_TRACE@
 
 Languages:
 ----------
+                              C: yes
+                     C Compiler: @CMAKE_C_COMPILER@ @CMAKE_C_COMPILER_VERSION@
+                       CPPFLAGS: @CPPFLAGS@
+                    H5_CPPFLAGS: @H5_CPPFLAGS@
+                    AM_CPPFLAGS: @AM_CPPFLAGS@
+                         CFLAGS: @CMAKE_C_FLAGS@
+                      H5_CFLAGS: @H5_CFLAGS@
+                      AM_CFLAGS: @AM_CFLAGS@
+               Shared C Library: @H5_ENABLE_SHARED_LIB@
+               Static C Library: YES
+
                         Fortran: @HDF5_BUILD_FORTRAN@
- at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @CMAKE_Fortran_COMPILER@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @CMAKE_Fortran_COMPILER@ @CMAKE_Fortran_COMPILER_VERSION@
 @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@
@@ -45,27 +52,32 @@ Languages:
 @BUILD_FORTRAN_CONDITIONAL_TRUE@         Static Fortran Library: YES
 
                             C++: @HDF5_BUILD_CPP_LIB@
- at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CMAKE_CXX_COMPILER@
+ at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CMAKE_CXX_COMPILER@ @CMAKE_CXX_COMPILER_VERSION@
 @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@
 @BUILD_CXX_CONDITIONAL_TRUE@             Shared C++ Library: @H5_ENABLE_SHARED_LIB@
 @BUILD_CXX_CONDITIONAL_TRUE@             Static C++ Library: YES
 
+                            JAVA: @HDF5_BUILD_JAVA@
+ at BUILD_JAVA_CONDITIONAL_TRUE@                   JAVA Compiler: @CMAKE_Java_COMPILER@ @Java_VERSION@
+
 Features:
 ---------
                   Parallel HDF5: @HDF5_ENABLE_PARALLEL@
-             High Level library: @HDF5_BUILD_HL_LIB@
+             High-level library: @HDF5_BUILD_HL_LIB@
                    Threadsafety: @HDF5_ENABLE_THREADSAFE@
-            Default API Mapping: @DEFAULT_API_VERSION@
- With Deprecated Public Symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
+            Default API mapping: @DEFAULT_API_VERSION@
+ With deprecated public symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
          I/O filters (external): @EXTERNAL_FILTERS@
                             MPE: @H5_HAVE_LIBLMPE@
                      Direct VFD: @H5_HAVE_DIRECT@
                         dmalloc: @H5_HAVE_LIBDMALLOC@
-Clear file buffers before write: @HDF5_Enable_Clear_File_Buffers@
+ Packages w/ extra debug output: @INTERNAL_DEBUG_OUTPUT@
+                    API Tracing: @HDF5_ENABLE_TRACE@
            Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@
 Memory allocation sanity checks: @HDF5_MEMORY_ALLOC_SANITY_CHECK@
+            Metadata trace file: @METADATATRACEFILE@
          Function Stack Tracing: @HDF5_ENABLE_CODESTACK@
       Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@
    Optimization Instrumentation: @HDF5_Enable_Instrument@
diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake
index e54db1f..2bebcf2 100644
--- a/config/cmake/mccacheinit.cmake
+++ b/config/cmake/mccacheinit.cmake
@@ -6,6 +6,8 @@
 
 set (CMAKE_INSTALL_FRAMEWORK_PREFIX "Library/Frameworks" CACHE STRING "Frameworks installation directory" FORCE)
 
+set (HDF5_GENERATE_HEADERS ON CACHE BOOL "Rebuild Generated Files" FORCE)
+
 set (BUILD_SHARED_LIBS OFF CACHE BOOL "Build Shared Libraries" FORCE)
 
 set (BUILD_TESTING ON CACHE BOOL "Build HDF5 Unit Testing" FORCE)
diff --git a/config/cmake/scripts/HDF5config.cmake b/config/cmake/scripts/HDF5config.cmake
index 8bcc56b..1503f6c 100755
--- a/config/cmake/scripts/HDF5config.cmake
+++ b/config/cmake/scripts/HDF5config.cmake
@@ -1,13 +1,13 @@
 #############################################################################################
 ### ${CTEST_SCRIPT_ARG} is of the form OPTION=VALUE                                       ###
 ### BUILD_GENERATOR required [Unix, VS2015, VS201564, VS2013, VS201364, VS2012, VS201264] ###
-### ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201264 -C Release -V -O hdf519.log        ###
+### ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201264 -C Release -V -O hdf5.log          ###
 #############################################################################################
 
 cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
 ############################################################################
 # Usage:
-#     ctest -S HDF518config.cmake,OPTION=VALUE -C Release -VV -O test.log
+#     ctest -S HDF5config.cmake,OPTION=VALUE -C Release -VV -O test.log
 # where valid options for OPTION are:
 #     BUILD_GENERATOR - The cmake build generator:
 #            Unix    * Unix Makefiles
@@ -23,20 +23,22 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
 #     CTEST_SOURCE_NAME  -  source folder
 #     STATIC_LIBRARIES  -  Build/use static libraries
 #     FORTRAN_LIBRARIES -  Build/use fortran libraries
+#     JAVA_LIBRARIES -  Build/use java libraries
 #     NO_MAC_FORTRAN  - Yes to be SHARED on a Mac
 ##############################################################################
 
-set(CTEST_SOURCE_VERSION 1.9)
-set(CTEST_SOURCE_VERSEXT "")
+set(CTEST_SOURCE_VERSION 1.10.0)
+set(CTEST_SOURCE_VERSEXT "-pre1")
 
 ##############################################################################
 # handle input parameters to script.
 #BUILD_GENERATOR - which CMake generator to use, required
-#INSTALLDIR - HDF5-1.9 root folder
+#INSTALLDIR - HDF5-1.10.0 root folder
 #CTEST_BUILD_CONFIGURATION - Release, Debug, RelWithDebInfo
-#CTEST_SOURCE_NAME - name of source folder; HDF5-1.9
+#CTEST_SOURCE_NAME - name of source folder; HDF5-1.10.0
 #STATIC_LIBRARIES - Default is YES
 #FORTRAN_LIBRARIES - Default is NO
+#JAVA_LIBRARIES - Default is NO
 #NO_MAC_FORTRAN - set to TRUE to allow shared libs on a Mac
 if(DEFINED CTEST_SCRIPT_ARG)
     # transform ctest script arguments of the form
@@ -88,9 +90,18 @@ if(NOT DEFINED CTEST_SOURCE_NAME)
 endif()
 if(NOT DEFINED STATIC_LIBRARIES)
     set(STATICLIBRARIES "YES")
+else()
+    set(STATICLIBRARIES "NO")
 endif()
 if(NOT DEFINED FORTRAN_LIBRARIES)
     set(FORTRANLIBRARIES "NO")
+else()
+    set(FORTRANLIBRARIES "YES")
+endif()
+if(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "NO")
+else()
+    set(JAVALIBRARIES "YES")
 endif()
 
 set(CTEST_BINARY_NAME "build")
@@ -200,6 +211,12 @@ if(${FORTRANLIBRARIES})
 else()
   set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
 endif()
+####      java       ####
+if(${JAVALIBRARIES})
+  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=ON")
+else()
+  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF")
+endif()
 
 ### disable test program builds
 #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF")
diff --git a/config/cmake/vfdTest.cmake b/config/cmake/vfdTest.cmake
index 4685d88..10f0a7b 100644
--- a/config/cmake/vfdTest.cmake
+++ b/config/cmake/vfdTest.cmake
@@ -35,10 +35,10 @@ EXECUTE_PROCESS (
 
 message (STATUS "COMMAND Result: ${TEST_RESULT}")
 
-if (ERROR_APPEND)
+if (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}_${TEST_VFD}.err)
   file (READ ${TEST_FOLDER}/${TEST_OUTPUT}_${TEST_VFD}.err TEST_STREAM)
   file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT}_${TEST_VFD}.out "${TEST_STREAM}")
-endif (ERROR_APPEND)
+endif (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}_${TEST_VFD}.err)
 
 # if the return value is !=${TEST_EXPECT} bail out
 if (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
diff --git a/config/cmake_ext_mod/prunTest.cmake b/config/cmake_ext_mod/prunTest.cmake
index 089c203..38ecb7e 100644
--- a/config/cmake_ext_mod/prunTest.cmake
+++ b/config/cmake_ext_mod/prunTest.cmake
@@ -49,10 +49,10 @@ 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)
+if (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
   file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
   file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
-endif (ERROR_APPEND)
+endif (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
 
 if (TEST_APPEND)
   file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_ERROR}\n")
diff --git a/config/cmake_ext_mod/runTest.cmake b/config/cmake_ext_mod/runTest.cmake
index c2b7527..3b7d949 100644
--- a/config/cmake_ext_mod/runTest.cmake
+++ b/config/cmake_ext_mod/runTest.cmake
@@ -62,10 +62,10 @@ endif (NOT TEST_INPUT)
 
 message (STATUS "COMMAND Result: ${TEST_RESULT}")
 
-if (ERROR_APPEND)
+if (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
   file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
   file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
-endif (ERROR_APPEND)
+endif (ERROR_APPEND AND EXISTS ${TEST_FOLDER}/${TEST_OUTPUT}.err)
 
 if (TEST_APPEND)
   file (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_RESULT}\n")
@@ -93,9 +93,9 @@ endif (TEST_MASK_MOD)
 if (TEST_MASK_ERROR)
   if (NOT TEST_ERRREF)
     file (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
-  else (NOT TEST_ERRREF)
+  else ()
     file (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
-  endif (NOT TEST_ERRREF)
+  endif ()
    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}")
@@ -105,9 +105,9 @@ if (TEST_MASK_ERROR)
    string (REGEX REPLACE "H5Eset_auto[1-2]*" "H5Eset_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}")
   if (NOT TEST_ERRREF)
     file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
-  else (NOT TEST_ERRREF)
+  else ()
     file (WRITE ${TEST_FOLDER}/${TEST_OUTPUT}.err "${TEST_STREAM}")
-  endif (NOT TEST_ERRREF)
+  endif ()
 endif (TEST_MASK_ERROR)
 
 if (TEST_FILTER)
diff --git a/config/commence.am b/config/commence.am
index 554c9fb..1a26a85 100644
--- a/config/commence.am
+++ b/config/commence.am
@@ -37,6 +37,7 @@ LIBH5TEST=$(top_builddir)/test/libh5test.la
 LIBH5F=$(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST=$(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP=$(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI=$(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS=$(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL=$(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL=$(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/config/gnu-cxxflags b/config/gnu-cxxflags
new file mode 100644
index 0000000..52f46dd
--- /dev/null
+++ b/config/gnu-cxxflags
@@ -0,0 +1,830 @@
+#							-*- 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
+# GNU g++ compiler or a derivative.  It is careful not to do anything
+# if the compiler is not GNU; otherwise `cxx_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for g++
+# unless a compiler version is already known
+#
+#   cxx_vendor:    The compiler name: g++
+#   cxx_version:   Version number: 2.91.60, 2.7.2.1
+#
+if test X = "X$cxx_flags_set"; then
+    # PathScale compiler spits out gcc version string too. Need to
+    # filter it out.
+    # icc beginning with version 12 includes a "gcc version compatiblilty"
+    # string, causing the gcc H5_CFLAGS to be erroneously added.  The line
+    # "grep -v 'icc version'" causes the discarding of any output
+    # containing 'icc version'.  The cc_version for icc is correctly determined
+    # and flags added in the intel-flags script.
+    cxx_version="`$CXX $CXXFLAGS $H5_CXXFLAGS -v 2>&1 | grep -v 'PathScale' |\
+        grep -v 'icc version' |\
+        grep 'gcc version' | sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
+    cxx_vendor=`echo $cxx_version |sed 's/\([a-z]*\).*/\1/'`
+    cxx_version=`echo $cxx_version |sed 's/[-a-z]//g'`
+    if test X = "X$cxx_vendor" -a X != "X$cxx_version"; then
+	cxx_vendor=g++
+    fi
+    if test "-" != "$cxx_vendor-$cxx_version"; then
+	echo "compiler '$CXX' is GNU $cxx_vendor-$cxx_version"
+    fi
+
+    # Some version numbers
+    cxx_vers_major=`echo $cxx_version | cut -f1 -d.`
+    cxx_vers_minor=`echo $cxx_version | cut -f2 -d.`
+    cxx_vers_patch=`echo $cxx_version | cut -f3 -d.`
+    test -n "$cc_vers_major" || cxx_vers_major=0
+    test -n "$cc_vers_minor" || cxx_vers_minor=0
+    test -n "$cc_vers_patch" || cxx_vers_patch=0
+    cxx_vers_all=`expr $cxx_vers_major '*' 1000000 + $cxx_vers_minor '*' 1000 + $cxx_vers_patch`
+fi
+
+# Common g++ flags for various situations
+case "$cxx_vendor-$cxx_version" in
+  g++*)
+    # Architecture-specific flags
+    arch=
+    case "$host_os-$host_cpu" in
+        # FreeBSD sets the information from "uname -m" to the general machine
+        # architecture, not the specific CPU for the machine, so even our
+        # Pentium II Xeon server is set to "i386".  Once we know we are on a FreeBSD
+        # machine, use the "sysctl" command to get the CPU hardware model.
+        freebsd*-i386)
+            host_cpu_model=`sysctl -n hw.model`
+            case "$host_cpu_model" in
+                # Hmm.. this might not catch Celerons, but it won't hurt them either...
+                *Pro*|*II*|*III*|*IV*|*Athlon*)
+                    # architecture-specific optimizations cause problems
+                    # for some users who build binaries to be used on
+                    # multiple architectures.
+                    # arch="-march=i686"
+                ;;
+            esac
+            ;;
+
+        *-i686)
+                    # architecture-specific optimizations cause problems
+                    # for some users who build binaries to be used on
+                    # multiple architectures.
+                    # arch="-march=i686"
+            ;;
+    esac
+
+    # Host-specific flags
+    case "`hostname`" in
+        sleipnir.ncsa.uiuc.edu)
+            arch="$arch -pipe"
+            ;;
+    esac
+
+    # General (copied from H5_CFLAGS)
+    H5_CXXFLAGS="$H5_CXXFLAGS $arch -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wredundant-decls -Winline"
+
+    # C++-specific
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsign-promo -Woverloaded-virtual -Wold-style-cast -Weffc++ -Wreorder -Wnon-virtual-dtor -Wctor-dtor-privacy -Wabi"
+
+    # Production
+    # NDEBUG is handled explicitly by the configure script
+    case "$cxx_vendor-$cxx_version" in
+      g++-[34].*)
+        PROD_CXXFLAGS=
+        ;;
+      g++-5.*)
+        PROD_CXXFLAGS="-fstdarg-opt"
+        ;;
+      *)
+        PROD_CXXFLAGS="-finline-functions"
+        ;;
+    esac
+
+    # Debug
+    # NDEBUG is handled explicitly by the configure script
+    # -g is hanled by the symbols flags
+    case "$cxx_vendor-$cxx_version" in
+      g++-5.*)
+        DEBUG_CXXFLAGS="-ftrapv -fno-common"
+        ;;
+      *)
+        DEBUG_CXXFLAGS=
+        ;;
+    esac
+
+    # Symbols
+    NO_SYMBOLS_CXXFLAGS="-s"
+    SYMBOLS_CXXFLAGS="-g"
+
+    # Profile
+    PROFILE_CXXFLAGS="-pg"
+
+    # Optimization
+    case "$cxx_vendor-$cxx_version" in
+      g++-[34].*)
+        HIGH_OPT_CXXFLAGS="-O3"
+        DEBUG_OPT_CXXFLAGS=
+        ;;
+      g++-5.*)
+        HIGH_OPT_CXXFLAGS="-O3"
+        DEBUG_OPT_CXXFLAGS="-Og"
+        ;;
+      *)
+        HIGH_OPT_CXXFLAGS="-O"
+        DEBUG_OPT_CXXFLAGS=
+        ;;
+    esac
+    NO_OPT_CXXFLAGS="-O0"
+
+    # Flags are set
+    cxx_flags_set=yes
+    ;;
+esac
+
+# Version-specific g++ flags
+#
+# Please follow the pattern below by adding new versions at the top, copying
+# the information from the previous version and adding modifications to that.
+case "$cxx_vendor-$cxx_version" in
+
+# Closer to the g++ 5.2 release, we should check for additional flags to
+# include and break it out into it's own section, like the other versions
+# below. -QAK
+  g++-5*)
+
+    # Append warning flags from gcc-3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow=5"
+
+    # Append more extra warning flags that only gcc 4.6+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+    # Append more extra warning flags that only gcc 4.7+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+
+    # Append more extra warning flags that only gcc 4.8+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsuggest-attribute=format"
+
+    # Append more extra warning flags that only gcc 4.9+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdate-time -Wopenmp-simd"
+
+    # (There was no release of gcc 5.0)
+
+    # Append more extra warning flags that only gcc 5.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Warray-bounds=2"
+    ;;
+
+  g++-4.9*)
+    # Append warning flags
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc 3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc 3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow=5"
+
+    # Append more extra warning flags that only gcc 4.6+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+    # Append more extra warning flags that only gcc 4.7+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+
+    # Append more extra warning flags that only gcc 4.8+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsuggest-attribute=format"
+
+    # Append more extra warning flags that only gcc 4.9+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdate-time -Wopenmp-simd"
+    ;;
+
+  g++-4.8*)
+    # Append warning flags
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow=5"
+
+    # Append more extra warning flags that only gcc 4.6+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+    # Append more extra warning flags that only gcc 4.7+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+
+    # Append more extra warning flags that only gcc 4.8+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsuggest-attribute=format"
+    ;;
+
+  g++-4.7*)
+    # Append warning flags
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow=5"
+
+    # Append more extra warning flags that only gcc 4.6+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+
+    # Append more extra warning flags that only gcc 4.7+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstack-usage=8192 -Wvector-operation-performance -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn"
+    ;;
+
+  g++-4.6*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ knows about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-aliasing -Wstrict-overflow=5"
+
+    # Append more extra warning flags that only gcc 4.6+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wdouble-promotion -Wsuggest-attribute=const -Wtrampolines"
+    ;;
+
+  g++-4.5*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc4.0+ knows about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+
+    # Append more extra warning flags that only gcc 4.5+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-aliasing -Wstrict-overflow=5"
+    ;;
+
+  g++-4.4*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wlarger-than=2048 -Wvla"
+
+    # Append more extra warning flags that only gcc 4.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat"
+    ;;
+
+  g++-4.3*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations -Wvolatile-register-var"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+
+    # Append more extra warning flags that only gcc 4.3+ know about
+    #
+    # Technically, variable-length arrays are part of the C99 standard, but
+    #   we should approach them a bit cautiously... -QAK
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wlogical-op -Wvla"
+    ;;
+
+  g++-4.2*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations -Wvolatile-register-var"
+
+    # Append more extra warning flags that only gcc 4.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wstrict-overflow"
+    ;;
+
+  g++-4.1.*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # Enable more format checking flags, beyond the basic -Wformat included
+    # in -Wall
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+
+    # Append more extra warning flags that only gcc 4.1+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wunsafe-loop-optimizations -Wvolatile-register-var"
+    ;;
+
+  g++-4.0*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #CXXFLAGS="$CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc 4.0+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wvariadic-macros -Winit-self -Wmissing-include-dirs -Wswitch-default -Wswitch-enum -Wunused-macros"
+    ;;
+
+  g++-3.4*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #CXXFLAGS="$CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+
+    # Append more extra warning flags that only gcc3.4+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    H5_CXXFLAGS="`echo $H5_CXXFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+    ;;
+
+  g++-3.3*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append warning flags from gcc-3.2* case
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #CXXFLAGS="$CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+
+    # Append more extra warning flags that only gcc3.3+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wendif-labels"
+    ;;
+
+  g++-3.2*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+
+    # Append more extra warning flags that only gcc3.2+ know about
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #CXXFLAGS="$CXXFLAGS -Wformat=2"
+
+    # The "unreachable code" flag generates many spurious C++ warnings.
+    # We'll disable it for now.
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wunreachable-code"
+    ;;
+
+  g++-3*)
+    # Disable warnings about using 'long long' type
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wno-long-long"
+
+    # Append some extra warning flags that only gcc3+ know about
+    # (don't use -Wpadded flag for normal builds, many of the warnings its
+    #   issuing can't be fixed and they are making it hard to detect other,
+    #   more important warnings)
+    #H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    H5_CXXFLAGS="$H5_CXXFLAGS -Wfloat-equal -Wmissing-format-attribute"
+    ;;
+esac
+
+# Clear cxx info if no flags set
+if test "X$cxx_flags_set" = "X"; then
+  cxx_vendor=
+  cxx_version=
+fi
diff --git a/config/gnu-fflags b/config/gnu-fflags
index 1d6caa1..4585735 100644
--- a/config/gnu-fflags
+++ b/config/gnu-fflags
@@ -76,16 +76,29 @@ if test "X-gfortran" = "X-$f9x_vendor"; then
     FC_BASENAME=gfortran40
     F9XSUFFIXFLAG=""
     FSEARCH_DIRS=""
-    H5_FCFLAGS="$H5_FCFLAGS -pedantic -Wall -Wconversion -Wunderflow -Wimplicit-interface -W"
+    H5_FCFLAGS="$H5_FCFLAGS -pedantic -Wall -Wextra -Wunderflow -Wimplicit-interface -Wsurprising"
+
+    # Turn off warnings for passing non-ANSI types to BIND().
+    # We pass a lot of hid_t, etc. types so this generates a LOT of spurious warnings.
+    H5_FCFLAGS="$H5_FCFLAGS -Wno-c-binding-type"
 
     # Production
-    PROD_FCFLAGS="-O2 -s"
+    PROD_FCFLAGS=
 
     # Debug
-    DEBUG_FCFLAGS="-g -fbounds-check"
+    DEBUG_FCFLAGS="-fbounds-check"
+
+    # Symbols
+    SYMBOLS_FCFLAGS="-g"
+    NO_SYMBOLS_FCFLAGS="-s"
+
+    # Profiling
+    PROFILE_FCFLAGS="-pg"
 
-    # Profile
-    PROFILE_FCFLAGS="-g -pg"
+    # Optimization
+    HIGH_OPT_FCFLAGS="-O2"
+    DEBUG_OPT_FCFLAGS="-O0"
+    NO_OPT_FCFLAGS="-O0"
 
     # Flags are set
     f9x_flags_set=yes
diff --git a/config/gnu-flags b/config/gnu-flags
index e7f8f14..87aef3a 100644
--- a/config/gnu-flags
+++ b/config/gnu-flags
@@ -97,39 +97,62 @@ case "$cc_vendor-$cc_version" in
     H5_CFLAGS="$H5_CFLAGS $arch -std=c99 -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
 
     # Production
+    # NDEBUG is handled explicitly by the configure script
     case "$cc_vendor-$cc_version" in
       gcc-[34].*)
-        PROD_CFLAGS="-O3"
+        PROD_CFLAGS=
         ;;
       gcc-5.*)
-        PROD_CFLAGS="-O3 -fstdarg-opt"
+        PROD_CFLAGS="-fstdarg-opt"
         ;;
       *)
-        PROD_CFLAGS="-O -finline-functions"
+        # gcc automatically inlines based on the optimization level
+        # this is just a failsafe
+        PROD_CFLAGS="-finline-functions"
         ;;
     esac
-    PROD_CPPFLAGS=
 
     # Debug
+    # NDEBUG is handled explicitly by the configure script
+    # -g is hanled by the symbols flags
     case "$cc_vendor-$cc_version" in
       gcc-5.*)
-        DEBUG_CFLAGS="-Og -g -ftrapv -fno-common"
+        DEBUG_CFLAGS="-ftrapv -fno-common"
         ;;
       *)
-        DEBUG_CFLAGS="-g"
+        DEBUG_CFLAGS=
         ;;
     esac
-    #DEBUG_CFLAGS="$DEBUG_CFLAGS -fsanitize=undefined"
-    DEBUG_CPPFLAGS=
+    #DEBUG_CFLAGS="-fsanitize=undefined"
+
+    # Symbols
+    NO_SYMBOLS_CFLAGS="-s"
+    SYMBOLS_CFLAGS="-g"
+
+    # Profile
+    PROFILE_CFLAGS="-pg"
+
+    # Optimization
+    case "$cc_vendor-$cc_version" in
+      gcc-[34].*)
+        HIGH_OPT_CFLAGS="-O3"
+        DEBUG_OPT_CFLAGS=
+        ;;
+      gcc-5.*)
+        HIGH_OPT_CFLAGS="-O3"
+        DEBUG_OPT_CFLAGS="-Og"
+        ;;
+      *)
+        HIGH_OPT_CFLAGS="-O"
+        DEBUG_OPT_CFLAGS=
+        ;;
+    esac
+    NO_OPT_CFLAGS="-O0"
 
     # Try out the new "stack protector" feature introduced in gcc 4.1
     # (We should also think about adding some of the other memory protection options)
     #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wstack-protector -fstack-protector-all"
 
-    # Profile
-    PROFILE_CFLAGS="-Og -g -pg"
-    PROFILE_CPPFLAGS=
-
     # Flags are set
     cc_flags_set=yes
     ;;
diff --git a/config/i686-pc-cygwin b/config/i686-pc-cygwin
index 9b1ab74..7355e4a 100644
--- a/config/i686-pc-cygwin
+++ b/config/i686-pc-cygwin
@@ -104,9 +104,25 @@ case $FC_BASENAME in
 # (just in case since this should be a default EIP)
         H5_FCFLAGS="$H5_FCFLAGS -YEXT_NAMES=UCS"
         FSEARCH_DIRS=""
-        DEBUG_FCFLAGS="-g"
-        PROD_FCFLAGS="-O"
-        PROFILE_FCFLAGS="-g -pg"
+
+        # Production
+        PROD_FCFLAGS=
+
+        # Debug
+        DEBUG_FCFLAGS=
+
+        # Symbols
+        SYMBOLS_FCFLAGS="-g"
+        NO_SYMBOLS_FCFLAGS="-s"
+
+        # Profiling
+        PROFILE_FCFLAGS="-pg"
+
+        # Optimization
+        HIGH_OPT_FCFLAGS="-O"
+        DEBUG_OPT_FCFLAGS=
+        NO_OPT_FCFLAGS=
+
         f9x_flags_set=yes
         ;;
 
diff --git a/config/ibm-aix b/config/ibm-aix
index 28498e2..ef052fb 100644
--- a/config/ibm-aix
+++ b/config/ibm-aix
@@ -59,9 +59,25 @@ if test "X-" = "X-$f9x_flags_set"; then
   FCFLAGS="$FCFLAGS ${F9XSUFFIXFLAG}"
   H5_FCFLAGS="$H5_FCFLAGS ${F9XSUFFIXFLAG}"
   FSEARCH_DIRS="-I./ -I../src"
-  DEBUG_FCFLAGS="-g"
-  PROD_FCFLAGS="-O"
-  PROFILE_FCFLAGS="-g -pg"
+
+  # Produciton
+  PROD_FCFLAGS=
+
+  # Debug
+  DEBUG_FCFLAGS=
+
+  # Symbols
+  SYMBOLS_FCFLAGS="-g"
+  NO_SYMBOLS_FCFLAGS=
+
+  # Profiling
+  PROFILE_FCFLAGS="-pg"
+
+  # Optimization
+  HIGH_OPT_FCFLAGS="-O"
+  DEBUG_OPT_FCFLAGS=
+  NO_OPT_FCFLAGS=
+
   f9x_flags_set=yes
 fi
 
@@ -91,13 +107,30 @@ case $CC_BASENAME in
     ;;
 
   *)
+    # Undetermined compiler
+    # Use very generic flags
     H5_CFLAGS="$H5_CFLAGS -ansi"
-    DEBUG_CFLAGS="-g"
-    DEBUG_CPPFLAGS=
-    PROD_CFLAGS="-O"
-    PROD_CPPFLAGS=
+
+    # Produciton
+    PROD_CFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS=
+
+    # Symbols
+    SYMBOLS_CFLAGS="-g"
+    NO_SYMBOLS_CFLAGS=
+
+    # Profiling
     PROFILE_CFLAGS="-pg"
-    PROFILE_CPPFLAGS=
+
+    # Optimization
+    HIGH_OPT_CFLAGS="-O"
+    DEBUG_OPT_CFLAGS=
+    NO_OPT_CFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
     ;;
 esac
 
diff --git a/config/ibm-flags b/config/ibm-flags
index 462372d..412817c 100644
--- a/config/ibm-flags
+++ b/config/ibm-flags
@@ -55,19 +55,35 @@ if test "XL" = "$cc_vendor"; then
 
     # Turn off shared lib option.  It causes some test suite to fail.
     enable_shared="${enable_shared:-no}"
+    
     # Make sure this is applied to other API compile options such as C++.
     AM_CFLAGS="$AM_CFLAGS"
+
     # -qflag=w:w makes the lowest level of reported compile issues to be "warning"
     # instead of "information". This suppresses a very large number of messages
     # concerning the portability of __inline__.
     H5_CFLAGS="-qlanglvl=stdc99 -qflag=w:w $H5_CFLAGS"
-    DEBUG_CFLAGS="-g -qfullpath"
-    DEBUG_CPPFLAGS=
+
+    # Produciton
+    PROD_CFLAGS=
+
+    # Debug
+    # NDEBUG is handled explicitly in configure
+    DEBUG_CFLAGS="-qfullpath"
+
+    # Symbols
+    SYMBOLS_CFLAGS="-g"
+    NO_SYMBOLS_CFLAGS=
+
+    # Profiling
+    PROFILE_CFLAGS="-pg"
+
+    # Optimization
     # -O causes test/dtypes to fail badly. Turn it off for now.
-    PROD_CFLAGS=""
-    PROD_CPPFLAGS=
-    PROFILE_CFLAGS="-g -qfullpath -pg"
-    PROFILE_CPPFLAGS=
+    HIGH_OPT_CFLAGS=
+    DEBUG_OPT_CFLAGS=
+    NO_OPT_CFLAGS=
+
     # Flags are set
     cc_flags_set=yes
 fi
@@ -106,3 +122,4 @@ if test X != X$CXX; then
 
     fi
 fi
+
diff --git a/config/intel-fflags b/config/intel-fflags
index 3e33fc9..db9543e 100644
--- a/config/intel-fflags
+++ b/config/intel-fflags
@@ -73,14 +73,23 @@ if test "X-ifort" = "X-$f9x_vendor"; then
     H5_FCFLAGS="$H5_FCFLAGS"
 
     # Production
-    PROD_FCFLAGS="-O3"
+    PROD_FCFLAGS=
 
     # Debug
-    DEBUG_FCFLAGS="-g -check all"
+    DEBUG_FCFLAGS="-check all"
 
-    # Profile
+    # Symbols
+    SYMBOLS_FCFLAGS="-g"
+    NO_SYMBOLS_FCFLAGS=
+
+    # Profiling
     # Use this for profiling with gprof
-    PROFILE_FCFLAGS="-g -p"
+    PROFILE_FCFLAGS="-p"
+
+    # Optimization
+    HIGH_OPT_FCFLAGS="-O3"
+    DEBUG_OPT_FCFLAGS=
+    NO_OPT_FCFLAGS=
 
     # Flags are set
     f9x_flags_set=yes
diff --git a/config/intel-flags b/config/intel-flags
index 3187daf..fe7b06d 100644
--- a/config/intel-flags
+++ b/config/intel-flags
@@ -68,20 +68,27 @@ if test "X-icc" = "X-$cc_vendor"; then
 
     # General
     # Default to C99 standard.
-    H5_CFLAGS="${H5_CFLAGS:--std=c99 $arch}"
+    H5_CFLAGS="${H5_CFLAGS:--std=c99 $arch} -Wcheck -Wall"
 
-    # Production is set to default; see settings for specific version further down
-    PROD_CFLAGS="-O" 
-    PROD_CPPFLAGS=
+    # Production
+    PROD_CFLAGS=
 
     # Debug
-    DEBUG_CFLAGS="-Wcheck -Wall -g -O0"
-    DEBUG_CPPFLAGS=
+    # NDEBUG is handled explicitly in configure
+    DEBUG_CFLAGS=
 
-    # Profile
+    # Symbols
+    SYMBOLS_CFLAGS="-g"
+    NO_SYMBOLS_CFLAGS=
+
+    # Profiling
     # Use this for profiling with gprof
-    PROFILE_CFLAGS="-g -p"
-    PROFILE_CPPFLAGS=
+    PROFILE_CFLAGS="-p"
+
+    # Optimization
+    HIGH_OPT_CFLAGS="-O"
+    DEBUG_OPT_CFLAGS="-O0"
+    NO_OPT_CFLAGS="-O0"
 
     # Flags are set
     cc_flags_set=yes
diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1
index 465bfed..5bea816 100644
--- a/config/linux-gnulibc1
+++ b/config/linux-gnulibc1
@@ -51,7 +51,7 @@ if test "X-" = "X-$FC"; then
             FC=gfortran
             FC_BASENAME=gfortran
             ;;
-	pgcc*)
+        pgcc*)
             FC=pgf90
             FC_BASENAME=pgf90
             ;;
@@ -92,6 +92,9 @@ else
     esac
 fi
 
+# Figure out GNU FC compiler flags
+. $srcdir/config/gnu-fflags
+
 # Figure out PGI FC compiler flags
 . $srcdir/config/pgi-fflags
 
@@ -114,9 +117,25 @@ case $FC_BASENAME in
 # (just in case since this should be a default EIP)
         H5_FCFLAGS="$H5_FCFLAGS"
         FSEARCH_DIRS=""
-        DEBUG_FCFLAGS="-g"
-        PROD_FCFLAGS="-O"
-        PROFILE_FCFLAGS="-g -pg"
+
+        # Production
+        PROD_FCFLAGS=
+
+        # Debug
+        DEBUG_FCFLAGS=
+
+        # Symbols
+        SYMBOLS_FCFLAGS="-g"
+        NO_SYMBOLS_FCFLAGS="-s"
+
+        # Profiling
+        PROFILE_FCFLAGS="-pg"
+
+        # Optimization
+        HIGH_OPT_FCFLAGS="-O"
+        DEBUG_OPT_FCFLAGS=
+        NO_OPT_FCFLAGS=
+
         f9x_flags_set=yes
         ;;
 
@@ -130,6 +149,9 @@ if test -z "$CXX"; then
   CXX_BASENAME=g++
 fi
 
+# Figure out GNU CXX compiler flags
+. $srcdir/config/gnu-cxxflags
+
 # compiler version strings
 
 # check if the compiler_version_info is already set
@@ -177,6 +199,7 @@ case $FC in
     *mpif90*)
         fc_version_info=`$FC $FCFLAGS $H5_FCFLAGS -v 2>&1 | grep 'version' |\
             sed 's/^[a-z0-9]* for //' |\
+            sed 's/\"/\\\"/g' |\
             sed 's/^\([a-z]* \)/ built with \1/1'`
         fc_version_info=`echo $fc_version_info`
         ;;
diff --git a/config/pgi-fflags b/config/pgi-fflags
index 8e574e4..08dfe6e 100644
--- a/config/pgi-fflags
+++ b/config/pgi-fflags
@@ -84,15 +84,24 @@ if test "X-pgf90" = "X-$f9x_vendor"; then
     #else
     #    PROD_FCFLAGS="-O2 -s"
     #fi
-    PROD_FCFLAGS="-fast -s -Mnoframe"
+    PROD_FCFLAGS="-fast -Mnoframe"
 
     # Debug
-    DEBUG_FCFLAGS="-g -Mbounds -Mchkptr -Mdclchk"
+    DEBUG_FCFLAGS="-Mbounds -Mchkptr -Mdclchk"
 
-    # Profile
-    PROFILE_FCFLAGS="-g -Mprof=func,line"
+    # Symbols
+    SYMBOLS_FCFLAGS="-g"
+    NO_SYMBOLS_FCFLAGS="-s"
+
+    # Profiling
+    PROFILE_FCFLAGS="-Mprof=func,line"
     # Use this for profiling with gprof
-    #PROFILE_FCFLAGS="-g -pg"
+    #PROFILE_FCFLAGS="-pg"
+
+    # Optimization
+    HIGH_OPT_FCFLAGS=
+    DEBUG_OPT_FCFLAGS=
+    NO_OPT_FCFLAGS=
 
     # Flags are set
     f9x_flags_set=yes
diff --git a/config/pgi-flags b/config/pgi-flags
index 29e6f05..f6878e6 100644
--- a/config/pgi-flags
+++ b/config/pgi-flags
@@ -72,33 +72,49 @@ if test "X-pgcc" = "X-$cc_vendor"; then
 
     # Production
     case "$cc_vendor-$cc_version" in
-      # Tweak down compiler optimizations for v10.6, it has a bug
       pgcc-10.6*)
-        PROD_CFLAGS="-O1 -s"
+        PROD_CFLAGS=
         ;;
-      # Tweak down compiler optimizations for v9.x
       pgcc-9.*)
-        PROD_CFLAGS="-O1 -s"
+        PROD_CFLAGS=
         ;;
       *)
-        PROD_CFLAGS="-fast -s"
+        PROD_CFLAGS="-fast"
         ;;
     esac
-    PROD_CPPFLAGS=
 
     # Debug
-    DEBUG_CFLAGS="-g -Mbounds"
-    DEBUG_CPPFLAGS=
+    # NDEBUG is handled explicitly by the configure script
+    DEBUG_CFLAGS="-Mbounds"
 
-    # Profile
-    PROFILE_CFLAGS="-g -Mprof=func,line"
+    # Symbols
+    SYMBOLS_CFLAGS="-g"
+    NO_SYMBOLS_CFLAGS="-s"
+
+    # Profiling
+    PROFILE_CFLAGS="-Mprof=func,line"
     # Use this for profiling with gprof
-    #PROFILE_CFLAGS="-g -pg"
-    PROFILE_CPPFLAGS=
+    #PROFILE_CFLAGS="-pg"
+
+    # Optimization
+    case "$cc_vendor-$cc_version" in
+      # Tweak down compiler optimizations for v10.6, it has a bug
+      pgcc-10.6*)
+        HIGH_OPT_CFLAGS="-O1"
+        ;;
+      # Tweak down compiler optimizations for v9.x
+      pgcc-9.*)
+        HIGH_OPT_CFLAGS="-O1"
+        ;;
+      *)
+        HIGH_OPT_CFLAGS=
+        ;;
+    esac
+    DEBUG_OPT_CFLAGS=
+    NO_OPT_CFLAGS=
 
     # Flags are set
     cc_flags_set=yes
-
 fi
 
 # Clear cc info if no flags set
diff --git a/config/solaris b/config/solaris
index 310c373..72d7423 100644
--- a/config/solaris
+++ b/config/solaris
@@ -32,16 +32,32 @@ fi
 # Try solaris native compiler flags
 if test "X-" = "X-$cc_flags_set"; then
   H5_CFLAGS="$H5_CFLAGS -erroff=%none -DBSD_COMP"
+
+  # Production
+  # NDEBUG is handled explicitly by the configure script
+  PROD_CFLAGS=
+
+  # Debug
+  # NDEBUG is handled explicitly by the configure script
+  # -g is hanled by the symbols flags
+  DEBUG_CFLAGS=
+
+  # Symbols
+  NO_SYMBOLS_CFLAGS="-s"
+  SYMBOLS_CFLAGS="-g"
+
+  # Profile
+  PROFILE_CFLAGS="-xpg"
+
+  # Optimization
   # -g produces rather slow code. "-g -O" produces much faster code with some
   # loss of debugger functions such as not able to print local variables.
-  DEBUG_CFLAGS="-g -O"
-  DEBUG_CPPFLAGS=
-  PROD_CFLAGS="-O -s"
-  PROD_CPPFLAGS=
-  PROFILE_CFLAGS=-xpg
-  PROFILE_CPPFLAGS=
+  HIGH_OPT_CFLAGS="-O"
+  DEBUG_OPT_CFLAGS="-O"
+  NO_OPT_CFLAGS=
+
   cc_flags_set=yes
-# Special linking flag is needed to build with Fortran on Solaris 5.9
+    # Special linking flag is needed to build with Fortran on Solaris 5.9
     system_version="`uname -r`"
     case "$system_version" in
 	5.9*)
@@ -52,10 +68,6 @@ if test "X-" = "X-$cc_flags_set"; then
 	    ;;
     esac
 
-  # Turn off optimization flag for SUNpro compiler versions 4.x which
-  # have an optimization bug.  Version 5.0 works.
-  ($CC -V 2>&1) | grep -s 'cc: .* C 4\.' >/dev/null 2>&1 \
-       && PROD_CFLAGS="`echo $PROD_CFLAGS | sed -e 's/-O//'`"
 fi
 
 LIBS="$LIBS"
@@ -69,12 +81,34 @@ fi
 if test "X-" = "X-$f9x_flags_set"; then
   F9XSUFFIXFLAG=""
   FSEARCH_DIRS=""
+
   H5_FCFLAGS="$H5_FCFLAGS"
+
+  # TODO: Revisit these flags.
+
+  # Production
+  # NDEBUG is handled explicitly by the configure script
+  PROD_FCFLAGS=
+
+  # Debug
+  # NDEBUG is handled explicitly by the configure script
+  # -g is hanled by the symbols flags
+  DEBUG_FCFLAGS=
+
+  # Symbols
+  NO_SYMBOLS_FCFLAGS=
+  SYMBOLS_FCFLAGS="-g"
+
+  # Profile
+  PROFILE_FCFLAGS=
+
+  # Optimization
   # -g produces rather slow code. "-g -O" produces much faster code with some
   # loss of debugger functions such as not able to print local variables.
-  DEBUG_FCFLAGS="-g -O"
-  PROD_FCFLAGS="-O2"
-  PROFILE_FCFLAGS=""
+  HIGH_OPT_FCFLAGS="-O2"
+  DEBUG_OPT_FCFLAGS="-O"
+  NO_OPT_FCFLAGS=
+
   f9x_flags_set=yes
 fi
 
@@ -107,14 +141,30 @@ fi
 if test -z "$cxx_flags_set"; then
   H5_CXXFLAGS="$H5_CXXFLAGS -instances=static"
   H5_CPPFLAGS="$H5_CPPFLAGS -LANG:std"
+
+  # Production
+  # NDEBUG is handled explicitly by the configure script
+  PROD_CXXFLAGS=
+
+  # Debug
+  # NDEBUG is handled explicitly by the configure script
+  # -g is hanled by the symbols flags
+  DEBUG_CXXFLAGS=
+
+  # Symbols
+  NO_SYMBOLS_CXXFLAGS="-s"
+  SYMBOLS_CXXFLAGS="-g"
+
+  # Profile
+  PROFILE_CXXFLAGS="-xpg"
+
+  # Optimization
   # -g produces rather slow code. "-g -O" produces much faster code with some
   # loss of debugger functions such as not able to print local variables.
-  DEBUG_CXXFLAGS="-g -O"
-  DEBUG_CPPFLAGS=
-  PROD_CXXFLAGS="-O -s"
-  PROD_CPPFLAGS=
-  PROFILE_CXXFLAGS=-xpg
-  PROFILE_CPPFLAGS=
+  HIGH_OPT_CXXFLAGS="-O"
+  DEBUG_OPT_CXXFLAGS="-O"
+  NO_OPT_CXXFLAGS=
+
   cxx_flags_set=yes
 fi
 
@@ -156,4 +206,3 @@ case $CXX in
         ;;
 esac
 
-
diff --git a/config/x86_64-pc-cygwin b/config/x86_64-pc-cygwin
index 9b1ab74..210aa2b 100644
--- a/config/x86_64-pc-cygwin
+++ b/config/x86_64-pc-cygwin
@@ -104,9 +104,25 @@ case $FC_BASENAME in
 # (just in case since this should be a default EIP)
         H5_FCFLAGS="$H5_FCFLAGS -YEXT_NAMES=UCS"
         FSEARCH_DIRS=""
-        DEBUG_FCFLAGS="-g"
-        PROD_FCFLAGS="-O"
-        PROFILE_FCFLAGS="-g -pg"
+
+        # Production
+        PROD_FCFLAGS=
+
+        # Debug
+        DEBUG_FCFLAGS=
+
+        # Symbols
+        SYMBOLS_FCFLAGS="-g"
+        NO_SYMBOLS_FCFLAGS="-s"
+
+        # Profiling
+        PROFILE_FCFLAGS="-pg"
+
+        # Optimization
+        HIGH_OPT_FCFLAGS="-O"
+        DEBUG_OPT_FCFLAGS=
+        NO_OPT_FCFLAGS=
+
         f9x_flags_set=yes
         ;;
 
@@ -119,3 +135,4 @@ if test -z "$CXX"; then
   CXX=g++
   CXX_BASENAME=g++
 fi
+
diff --git a/configure b/configure
index c26c389..601d807 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Id: configure.ac 22697 2012-08-19 14:35:47Z hdftest .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for HDF5 1.10.0-alpha1.
+# Generated by GNU Autoconf 2.69 for HDF5 1.10.0-pre1.
 #
 # Report bugs to <help at hdfgroup.org>.
 #
@@ -591,8 +591,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HDF5'
 PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.10.0-alpha1'
-PACKAGE_STRING='HDF5 1.10.0-alpha1'
+PACKAGE_VERSION='1.10.0-pre1'
+PACKAGE_STRING='HDF5 1.10.0-pre1'
 PACKAGE_BUGREPORT='help at hdfgroup.org'
 PACKAGE_URL=''
 
@@ -640,9 +640,14 @@ LTLIBOBJS
 LIBOBJS
 HAVE_SHARED_CONDITIONAL_FALSE
 HAVE_SHARED_CONDITIONAL_TRUE
+enable_static
+enable_shared
+STATIC_SHARED
 SEARCH
 BUILD_HDF5_HL_CONDITIONAL_FALSE
 BUILD_HDF5_HL_CONDITIONAL_TRUE
+BUILD_JAVA_CONDITIONAL_FALSE
+BUILD_JAVA_CONDITIONAL_TRUE
 BUILD_FORTRAN_CONDITIONAL_FALSE
 BUILD_FORTRAN_CONDITIONAL_TRUE
 BUILD_PARALLEL_CONDITIONAL_FALSE
@@ -655,6 +660,7 @@ DEPRECATED_SYMBOLS
 BUILD_ALL_CONDITIONAL_FALSE
 BUILD_ALL_CONDITIONAL_TRUE
 ROOT
+JAVA_VERSION
 CXX_VERSION
 FC_VERSION
 CC_VERSION
@@ -666,21 +672,33 @@ CONFIG_DATE
 H5_VERSION
 DIRECT_VFD_CONDITIONAL_FALSE
 DIRECT_VFD_CONDITIONAL_TRUE
+DIRECT_VFD
+INSTRUMENT_LIBRARY
+MPE
 ADD_PARALLEL_FILES
+MEMORYALLOCSANITYCHECK
 USINGMEMCHECKER
-CLEARFILEBUF
-INSTRUMENT_LIBRARY
 TRACE_API
-DEBUG_PKG
+METADATATRACEFILE
+CODESTACK
+INTERNAL_DEBUG_OUTPUT
+OPTIMIZATION
+PROFILING
+ASSERTS
+SYMBOLS
 HAVE_PTHREAD
+THREADSAFE
 BUILD_SHARED_SZIP_CONDITIONAL_FALSE
 BUILD_SHARED_SZIP_CONDITIONAL_TRUE
 LL_PATH
 USE_FILTER_SZIP
 USE_FILTER_DEFLATE
+EXTERNAL_FILTERS
+HAVE_DMALLOC
 LT_STATIC_EXEC
 USE_PLUGINS_CONDITIONAL_FALSE
 USE_PLUGINS_CONDITIONAL_TRUE
+STATIC_EXEC
 LT_SYS_LIBRARY_PATH
 OTOOL64
 OTOOL
@@ -703,6 +721,21 @@ LIBTOOL
 FORTRAN_SHARED_CONDITIONAL_FALSE
 FORTRAN_SHARED_CONDITIONAL_TRUE
 H5_FORTRAN_SHARED
+JAVA_PATH_NAME
+TESTS_JUNIT
+JAVA_JUNIT
+JUNIT
+_ACJNI_JAVAC
+JAVADOC
+JAR
+UUDECODE
+JAVAC
+JAVA
+JAVAFLAGS
+JAVACFLAGS
+JAVAPREFIX
+H5_CLASSPATH
+HDF_JAVA
 TESTPARALLEL
 RUNPARALLEL
 RUNSERIAL
@@ -712,12 +745,16 @@ TR
 AR
 HL_FOR
 HL
+HDF5_HL
 CXXCPP
 am__fastdepCXX_FALSE
 am__fastdepCXX_TRUE
 CXXDEPMODE
 ac_ct_CXX
 CXXFLAGS
+CXX
+HDF_CXX
+Fortran_COMPILER_ID
 H5CONFIG_F_IKIND
 H5CONFIG_F_NUM_IKIND
 H5CONFIG_F_RKIND_SIZEOF
@@ -754,7 +791,10 @@ HSIZE_T
 HADDR_T
 R_INTEGER
 R_LARGE
+FC
 HDF5_INTERFACES
+HDF_FORTRAN
+PAC_C_MAX_REAL_PRECISION
 EGREP
 GREP
 CPP
@@ -774,35 +814,25 @@ ac_ct_CC
 LDFLAGS
 CFLAGS
 CC
-Fortran_COMPILER_ID
-PAC_C_MAX_REAL_PRECISION
+BUILD_MODE
 UNAME_INFO
-enable_static
-enable_shared
-STATIC_SHARED
-THREADSAFE
-DIRECT_VFD
-HAVE_DMALLOC
-CODESTACK
-INSTRUMENT
-HDF5_HL
-CXX
-HDF_CXX
-FC
-HDF_FORTRAN
-STATIC_EXEC
-MPE
-EXTERNAL_FILTERS
 AM_LDFLAGS
+AM_JAVAFLAGS
+AM_JAVACFLAGS
+AM_JNIFLAGS
 AM_CPPFLAGS
 AM_CXXFLAGS
 AM_FCFLAGS
 AM_CFLAGS
 H5_LDFLAGS
+H5_JAVAFLAGS
+H5_JAVACFLAGS
+H5_JNIFLAGS
 H5_CXXFLAGS
 H5_FCFLAGS
 H5_CPPFLAGS
 H5_CFLAGS
+JNIFLAGS
 CPPFLAGS
 host_os
 host_vendor
@@ -885,11 +915,16 @@ ac_user_opts='
 enable_option_checking
 enable_silent_rules
 enable_maintainer_mode
+enable_build_mode
 enable_dependency_tracking
 enable_unsupported
 enable_fortran
 enable_cxx
 enable_hl
+enable_java
+with_java_prefix
+with_javac_flags
+with_java_flags
 enable_shared
 enable_static
 with_pic
@@ -900,7 +935,6 @@ with_sysroot
 enable_libtool_lock
 enable_static_exec
 enable_sharedlib_rpath
-enable_production
 with_fnord
 with_dmalloc
 with_zlib
@@ -908,13 +942,19 @@ with_szlib
 enable_threadsafe
 with_pthread
 enable_debug
+enable_production
+enable_symbols
+enable_asserts
+enable_profiling
+enable_optimization
+enable_internal_debug
 enable_codestack
 enable_metadata_trace_file
 enable_trace
-enable_instrument
-enable_clear_file_buffers
 enable_using_memchecker
+enable_memory_alloc_sanity_check
 enable_parallel
+enable_instrument
 with_mpe
 enable_direct_vfd
 with_default_plugindir
@@ -1482,7 +1522,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.10.0-alpha1 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.10.0-pre1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1552,7 +1592,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HDF5 1.10.0-alpha1:";;
+     short | recursive ) echo "Configuration of HDF5 1.10.0-pre1:";;
    esac
   cat <<\_ACEOF
 
@@ -1565,6 +1605,15 @@ Optional Features:
   --enable-maintainer-mode
                           enable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
+  --enable-build-mode=(debug|production|clean)
+                          Sets the build mode. Debug turns on symbols, API
+                          tracing, asserts, and debug optimization, as well as
+                          several other minor configure options that aid in
+                          debugging. Production turns high optimizations on.
+                          Clean turns nothing on and disables optimization
+                          (i.e.: a 'clean slate' configuration). All these
+                          settings can be overridden by using specific
+                          configure flags. [default=debug]
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
@@ -1572,7 +1621,9 @@ Optional Features:
   --enable-unsupported    Allow unsupported combinations of configure options
   --enable-fortran        Compile the Fortran interface [default=no]
   --enable-cxx            Compile the C++ interface [default=no]
-  --enable-hl             Enable the high level library [default=yes]
+  --enable-hl             Enable the high-level library. [default=yes (unless
+                          build mode = clean)]
+  --enable-java           Compile the Java JNI interface [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
@@ -1582,36 +1633,77 @@ Optional Features:
                           [default=no]
   --disable-sharedlib-rpath
                           Disable use of the '=Wl,-rpath' linker option
-  --enable-production     Determines how to run the compiler.
   --enable-threadsafe     Enable thread-safe capability. Not compatible with
                           the high-level library, Fortran, or C++ wrappers.
                           [default=no]
-  --enable-debug=all      Turn on debugging in all packages. One may also
-                          specify a comma-separated list of package names
-                          without the leading H5 or the word no. The default
-                          is most packages if production is disabled; no if it
-                          is enabled.
+  --enable-debug          DEPRECATED: use --enable-build-mode=debug
+  --enable-production     DEPRECATED: use --enable-build-mode=production
+  --enable-symbols=(yes|no|<custom>)
+                          Add debug symbols to the library (e.g.: build with
+                          -g). This is independent of the build mode and
+                          optimization level. The custom string allows special
+                          settings like -ggdb, etc. to be used. [default=yes
+                          if debug build, otherwise no]
+  --enable-asserts        Determines whether NDEBUG is defined or not, which
+                          controls assertions. This is independent of the
+                          build mode and presence of debugging symbols.
+                          [default=yes if debug build, otherwise no]
+  --enable-profiling=(yes|no|<custom>)
+                          Enable profiling flags (e.g.: -pg). This can be set
+                          independently from the build mode. The custom
+                          setting can be used to pass alternative profiling
+                          flags (e.g.: -P for using Prof with gcc).
+                          [default=no]
+  --enable-optimization=(high|debug|none|<custom>)
+                          Enable optimization flags/settings (e.g.: -O3). This
+                          can be set independently from the build mode.
+                          Optimizations for a given compiler can be specified
+                          at several levels: High, with aggressive
+                          optimizations turned on; debug, with optimizations
+                          that are unlikely to interfere with debugging or
+                          profiling; and none, with no optimizations at all.
+                          See the compiler-specific config/*-flags file for
+                          more details. Alternatively, optimization options
+                          can be specified directly by specifying them as a
+                          string value. These custom optimzation flags will
+                          completely replace all other optimization flags.
+                          [default depends on build mode: debug=debug,
+                          production=high, clean=none]
+  --enable-internal-debug=(yes|all|no|none|<pkg list>)
+                          Enable extra debugging output on HDF5 library
+                          errors. One may also specify a comma-separated list
+                          of package names without the leading H5. This is
+                          independent of the build mode and is mainly of
+                          interest to HDF Group developers. Yes/all and
+                          no/none are synonymous. [default=all if debug build,
+                          otherwise none]
   --enable-codestack      Enable the function stack tracing (for developer
-                          debugging).
+                          debugging). [default=no]
   --enable-metadata-trace-file
-                          Enable metadata trace file collection.
-  --enable-trace          Enable API tracing capability. Default=no if debug
-                          is disabled.
-  --enable-instrument     Enable library instrumentation of optimization
-                          tracing. Default=no if debug is disabled.
-  --enable-clear-file-buffers
-                          Securely clear file buffers before writing to file.
-                          Default=yes.
+                          Enable metadata trace file collection. [default=no]
+  --enable-trace          Enable HDF5 API tracing capability. [default=yes if
+                          debug build, otherwise no]
   --enable-using-memchecker
                           Enable this option if a memory allocation and/or
                           bounds checking tool will be used on the HDF5
                           library. Enabling this causes the library to be more
-                          picky about it's memory operations and also disables
+                          picky about its memory operations and also disables
                           the library's free space manager code. This option
                           is orthogonal to the
                           --enable-memory-alloc-sanity-check option.
-                          Default=no.
+                          [default=no]
+  --enable-memory-alloc-sanity-check
+                          Enable this option to turn on internal memory
+                          allocation sanity checking. This could cause more
+                          memory use and somewhat slower allocation. This
+                          option is orthogonal to the
+                          --enable-using-memchecker option. [default=yes if
+                          debug build, otherwise no]
   --enable-parallel       Search for MPI-IO and MPI support files
+  --enable-instrument     Enable library instrumentation of optimization
+                          tracing (only used with parallel builds).
+                          [default=yes if a parallel debug build, otherwise
+                          no]
   --enable-direct-vfd     Build the direct I/O virtual file driver (VFD). This
                           is based on the POSIX (sec2) VFD and requires the
                           open() call to take the O_DIRECT flag. [default=no]
@@ -1623,16 +1715,20 @@ Optional Features:
   --enable-build-all      Build helper programs that only developers should
                           need [default=no]
   --enable-deprecated-symbols
-                          Enable deprecated public API symbols [default=yes]
+                          Enable deprecated public API symbols. [default=yes
+                          (unless build mode = clean)]
   --enable-strict-format-checks
-                          Enable strict file format checks, default=yes if
-                          debug flag is enabled, no otherwise
+                          Enable strict file format checks. [default=yes if
+                          debug build, otherwise no]
   --enable-embedded-libinfo
                           Enable embedded library information [default=yes]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-java-prefix=PFX  prefix where Java runtime is installed (optional)
+  --with-javac-flags=FLAGS flags to pass to the Java compiler (optional)
+  --with-java-flags=FLAGS flags to pass to the Java VM (optional)
   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-aix-soname=aix|svr4|both
@@ -1748,7 +1844,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HDF5 configure 1.10.0-alpha1
+HDF5 configure 1.10.0-pre1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2663,7 +2759,7 @@ 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.10.0-alpha1, which was
+It was created by HDF5 $as_me 1.10.0-pre1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3535,7 +3631,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='hdf5'
- VERSION='1.10.0-alpha1'
+ VERSION='1.10.0-pre1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3810,6 +3906,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
+
 ## H5_CFLAGS (and company) are for CFLAGS that should be used on HDF5, but
 ## not exported to h5cc (or h5fc, etc.)
 
@@ -3818,6 +3915,9 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
+
+
+
 ## AM_CFLAGS (and company) are for CFLAGS that should be used on HDF5,
 ## and WILL be exported to h5cc (or h5fc, etc) if set by configure.
 
@@ -3826,16 +3926,25 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
+
+
+
 ## Make sure flags are initialized.
 AM_CFLAGS="${AM_CFLAGS}"
 AM_CXXFLAGS="${AM_CXXFLAGS}"
 AM_FCFLAGS="${AM_FCFLAGS}"
 AM_CPPFLAGS="${AM_CPPFLAGS}"
+AM_JNIFLAGS="${AM_JNIFLAGS}"
+AM_JAVACFLAGS="${AM_JAVACFLAGS}"
+AM_JAVAFLAGS="${AM_JAVAFLAGS}"
 AM_LDFLAGS="${AM_LDFLAGS}"
 CFLAGS="${CFLAGS}"
 CXXFLAGS="${CXXFLAGS}"
 FCFLAGS="${FCFLAGS}"
 CPPFLAGS="${CPPFLAGS}"
+JNIFLAGS="${JNIFLAGS}"
+JAVACFLAGS="${JAVACFLAGS}"
+JAVAFLAGS="${JAVAFLAGS}"
 LDFLAGS="${LDFLAGS}"
 
 ## Configure may need to alter any of the *FLAGS variables in order for
@@ -3844,6 +3953,8 @@ LDFLAGS="${LDFLAGS}"
 saved_user_CFLAGS="$CFLAGS"
 saved_user_CXXFLAGS="$CXXFLAGS"
 saved_user_FCFLAGS="$FCFLAGS"
+saved_user_JAVACFLAGS="$JAVACFLAGS"
+saved_user_JAVAFLAGS="$JAVAFLAGS"
 saved_user_LDFLAGS="$LDFLAGS"
 saved_user_CPPFLAGS="$CPPFLAGS"
 
@@ -3862,46 +3973,11 @@ set >&5
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
 $as_echo "done" >&6; }
 
-## Define all symbol variables used for configure summary.
-## EXTERNAL_FILTERS equals all external filters. Default none.
-## MPE: whether MPE option is enabled. Default no.
-## STATIC_EXEC: whether static-exec is enabled. Default no.
-## HDF_FORTRAN: whether Fortran is enabled. Default no.
-## FC: Fortran compiler.
-## HDF_CXX: whether C++ is enabled. Default no.
-## CXX: C++ compiler.
-## HDF5_HL: whether high-level library is enabled. Default is yes.
-## INSTRUMENT: whether INSTRUMENT is enabled. No default set here.
-## CODESTACK: whether CODESTACK is enabled. Default no.
-## HAVE_DMALLOC: whether system has dmalloc support. Default no.
-## HAVE_FLOAT128: whether system has Quad-Precision Math Library. Default no.
-## DIRECT_VFD: whether DIRECT_VFD is enabled. Default no.
-## THREADSAFE: whether THREADSAFE is enabled. Default no.
-## STATIC_SHARED: whether static and/or shared libraries are requested.
-## enable_shared: whether shared lib is enabled.
-## enable_static: whether static lib is enabled.
-## UNAME_INFO: System information.
-
-
- MPE=no
- STATIC_EXEC=no
- HDF_FORTRAN=no
- HDF_FORTRAN=no
- HDF_CXX=no
- HDF_CXX=no
- HDF5_HL=yes
-
- CODESTACK=no
- HAVE_DMALLOC=no
- DIRECT_VFD=no
- THREADSAFE=no
-
-
-
- UNAME_INFO=`uname -a`
-
+## ----------------------------------------------------------------------
+## Save system information for the library settings file.
+##
 
-Fortran_COMPILER_ID=none
+UNAME_INFO=`uname -a`
 
 ## ----------------------------------------------------------------------
 ## Some platforms have broken basename, and/or xargs programs. Check
@@ -3957,13 +4033,13 @@ fi
 ## turning on debug or profiling flags for the compiler.  The search order
 ## is:
 ##
-##	CPU-VENDOR-OS
-##	VENDOR-OS
-##	CPU-OS
-##	CPU-VENDOR
-##	OS
-##	VENDOR
-##	CPU
+##    CPU-VENDOR-OS
+##    VENDOR-OS
+##    CPU-OS
+##    CPU-VENDOR
+##    OS
+##    VENDOR
+##    CPU
 ##
 ## If the `OS' ends with a version number then remove it. For instance,
 ## `freebsd3.1' would become `freebsd'
@@ -4031,11 +4107,64 @@ $as_echo "no" >&6; }
 done
 
 ## ----------------------------------------------------------------------
+## Determine build mode (debug, production, clean).
+## This has to be done early since the build mode is referred to
+## frequently.
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build mode" >&5
+$as_echo_n "checking build mode... " >&6; }
+# Check whether --enable-build-mode was given.
+if test "${enable_build_mode+set}" = set; then :
+  enableval=$enable_build_mode; BUILD_MODE=$enableval
+fi
+
+
+## Set the default
+## Depends on branch, set via script at branch creation time
+if test "X-$BUILD_MODE" = X- ; then
+    BUILD_MODE=debug
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+case "X-$BUILD_MODE" in
+  X-clean)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: clean" >&5
+$as_echo "clean" >&6; }
+    ;;
+  X-debug)
+
+$as_echo "#define DEBUG_BUILD 1" >>confdefs.h
+
+    H5_CFLAGS="$H5_CFLAGS $DEBUG_CFLAGS"
+    H5_CPPFLAGS="$H5_CPPFLAGS $DEBUG_CPPFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: debug" >&5
+$as_echo "debug" >&6; }
+    ;;
+  X-production)
+    H5_CFLAGS="$H5_CFLAGS $PROD_CFLAGS"
+    H5_CPPFLAGS="$H5_CPPFLAGS $PROD_CPPFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: production" >&5
+$as_echo "production" >&6; }
+    ;;
+  *)
+    as_fn_error $? "Unrecognized build mode: $BUILD_MODE. Use debug, production, or clean." "$LINENO" 5
+esac
+
+## ----------------------------------------------------------------------
 ## Some built-in configure checks can only see CFLAGS (not AM_CFLAGS), so
 ## we need to add this in so configure works as intended. We will need to
 ## reset this value at the end of configure, to preserve the user's settings.
 CFLAGS="${AM_CFLAGS} ${CFLAGS}"
 FCFLAGS="${AM_FCFLAGS} ${FCFLAGS}"
+JAVACFLAGS="${AM_JAVACFLAGS} ${JAVACFLAGS}"
+JAVAFLAGS="${AM_JAVAFLAGS} ${JAVAFLAGS}"
 CXXFLAGS="${AM_CXXFLAGS} ${CXXFLAGS}"
 CPPFLAGS="${AM_CPPFLAGS} ${CPPFLAGS}"
 LDFLAGS="${AM_LDFLAGS} ${LDFLAGS}"
@@ -6119,7 +6248,9 @@ _ACEOF
 
 
 
+## ----------------------------------------------------------------------
 ## Check for non-standard extenstion __FLOAT128
+##
 HAVE_FLOAT128=0
 HAVE_QUADMATH=0
 FLT128_DIG=0
@@ -6273,6 +6404,8 @@ fi
 
 
 
+
+
 if test "$ac_cv_sizeof___float128" != 0 && test "$FLT128_DIG" != 0 ; then
 
 $as_echo "#define HAVE_FLOAT128 1" >>confdefs.h
@@ -6288,9 +6421,17 @@ _ACEOF
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PAC_C_MAX_REAL_PRECISION" >&5
 $as_echo "$PAC_C_MAX_REAL_PRECISION" >&6; }
+
 ## ----------------------------------------------------------------------
 ## Check if they would like the Fortran interface compiled
 ##
+
+## This needs to be exposed for the library info file even if Fortran is disabled.
+
+
+## Default is no Fortran
+HDF_FORTRAN=no
+
  HDF5_INTERFACES=""
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran interface enabled" >&5
 $as_echo_n "checking if Fortran interface enabled... " >&6; }
@@ -6315,7 +6456,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   ac_config_headers="$ac_config_headers fortran/src/H5config_f.inc"
 
 
-   HDF_FORTRAN=yes
+
 
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
@@ -8279,6 +8420,8 @@ ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
 
 
+  Fortran_COMPILER_ID=none
+
 cat >>confdefs.h <<_ACEOF
 #define Fortran_COMPILER_ID $Fortran_COMPILER_ID
 _ACEOF
@@ -8468,10 +8611,16 @@ fi
 ## ----------------------------------------------------------------------
 ## Check if they would like the C++ interface compiled
 ##
+## This needs to be exposed for the library info file even if C++ is disabled.
+
+
+## Default is no C++
+HDF_CXX=no
+
 ## We need to check for a C++ compiler unconditionally, since
 ## AC_PROG_CXX defines some macros that Automake 1.9.x uses and will
 ## miss even if c++ is not enabled.
-  ac_ext=cpp
+ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -8888,7 +9037,7 @@ else
 fi
 
 
-  ac_ext=cpp
+ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -9020,7 +9169,7 @@ 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
-	## this is checked for when AC_HEADER_STDC is done
+    ## this is checked for when AC_HEADER_STDC is done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if c++ interface enabled" >&5
 $as_echo_n "checking if c++ interface enabled... " >&6; }
@@ -9035,6 +9184,9 @@ if test "X$HDF_CXX" = "Xyes"; then
   echo "yes"
   HDF5_INTERFACES="$HDF5_INTERFACES c++"
 
+  ## Expose the compiler for *.in files
+
+
   ## Change to the C++ language
   ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
@@ -9043,7 +9195,7 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-  # Checking if C++ needs old style header files in includes
+  ## Checking if C++ needs old style header files in includes
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CXX needs old style header files in includes" >&5
@@ -9069,7 +9221,7 @@ rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
 
-  # Checking if C++ can handle namespaces
+  ## Checking if C++ can handle namespaces
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CXX can handle namespaces" >&5
 $as_echo_n "checking if $CXX can handle namespaces... " >&6; }
@@ -9100,7 +9252,7 @@ rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
 
-  # Checking if C++ has offsetof extension
+  ## Checking if C++ has offsetof extension
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CXX has offsetof extension" >&5
 $as_echo_n "checking if $CXX has offsetof extension... " >&6; }
@@ -9151,7 +9303,7 @@ rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
 
-  # if C++ can handle static cast
+  ## if C++ can handle static cast
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CXX can handle static cast" >&5
 $as_echo_n "checking if $CXX can handle static cast... " >&6; }
@@ -9199,27 +9351,44 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 ## Check if they would like the High Level library  compiled
 ##
 
- HL=""
-## name of fortran folder inside "hl", if FORTRAN compile is requested
- HL_FOR=""
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if high level library is enabled" >&5
-$as_echo_n "checking if high level library is enabled... " >&6; }
+## This needs to be exposed for the library info file even if the HL
+## library is disabled.
+
+
+## The high-level library is enabled unless the build mode is clean.
+if test "X-$BUILD_MODE" = "X-clean" ; then
+  HDF5_HL=no
+else
+  HDF5_HL=yes
+fi
+
+## high-level library directories (set when needed, blank until then)
+##
+## main high-level library
+
+HL=""
+## Fortran high-level library
+
+HL_FOR=""
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the high-level library is enabled" >&5
+$as_echo_n "checking if the high-level library is enabled... " >&6; }
 # Check whether --enable-hl was given.
 if test "${enable_hl+set}" = set; then :
   enableval=$enable_hl; HDF5_HL=$enableval
-else
-  HDF5_HL=yes
 fi
 
 
-if test "X$HDF5_HL" = "Xyes"; then
- echo "yes"
+if test "X-$HDF5_HL" = "X-yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
  HL="hl"
 
 $as_echo "#define INCLUDE_HL 1" >>confdefs.h
 
 else
- echo "no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -9314,7 +9483,8 @@ fi
 
 
 ## ----------------------------------------------------------------------
-## Set up ${TR} which is used to process DEBUG_PKG.
+## Set up ${TR} which is used to process the package list for extra
+## debugging output in the C library.
 
 # Extract the first word of "tr", so it can be a program name with args.
 set dummy tr; ac_word=$2
@@ -9387,36 +9557,36 @@ fi
 ## The following variables are used to distinguish between building a
 ## serial and parallel library.
 ##
-##    HAVE_PARALLEL	-- defined in H5config.h if we are building
-##			   a parallel library even if configure wasn't
-##			   able to find some header file or library that
-##			   might be required. This is defined if the
-##			   user explicitly states
-##			   that a parallel library is being built by supplying
-##			   the `--enable-parallel' configure switch.
+##    HAVE_PARALLEL    -- defined in H5config.h if we are building
+##               a parallel library even if configure wasn't
+##               able to find some header file or library that
+##               might be required. This is defined if the
+##               user explicitly states
+##               that a parallel library is being built by supplying
+##               the `--enable-parallel' configure switch.
 ##
-##    PARALLEL		-- This variable is set to a non-null value if
-##			   we're building a parallel version of the library.
+##    PARALLEL        -- This variable is set to a non-null value if
+##               we're building a parallel version of the library.
 ##
-##    RUNSERIAL	        -- This is a command which will be prepended to
-##			   the executable name to run the executable using
-##			   a single process. For serial versions of the
-##			   library this will normally be empty. For parallel
-##			   versions it might be something like `mpiexec -n 1'.
-##			   The value of this variable is substituted in *.in
-##			   files.
+##    RUNSERIAL            -- This is a command which will be prepended to
+##               the executable name to run the executable using
+##               a single process. For serial versions of the
+##               library this will normally be empty. For parallel
+##               versions it might be something like `mpiexec -n 1'.
+##               The value of this variable is substituted in *.in
+##               files.
 ##
-##    RUNPARALLEL	-- This is a command which will be prepended to
-##			   the executable name to run the executable on
-##			   multiple processors. For the serial library the
-##			   value will normally be the empty string. For
-##			   parallel library it should be something like
-##			   "mpiexec -n \$\${NPROCS:=6}" where NPROCS will
-##			   eventually contain the number of processors on which
-##			   to run the executable (the double dollarsigns are to
-##			   protect the expansion until make executes the
-##			   command).  The value of this variable is
-##			   substituted in *.in files.
+##    RUNPARALLEL    -- This is a command which will be prepended to
+##               the executable name to run the executable on
+##               multiple processors. For the serial library the
+##               value will normally be the empty string. For
+##               parallel library it should be something like
+##               "mpiexec -n \$\${NPROCS:=6}" where NPROCS will
+##               eventually contain the number of processors on which
+##               to run the executable (the double dollarsigns are to
+##               protect the expansion until make executes the
+##               command).  The value of this variable is
+##               substituted in *.in files.
 ##
 
 
@@ -9437,6 +9607,1080 @@ case "`uname`" in
 esac
 
 ## ----------------------------------------------------------------------
+## Check if they would like the Java native interface (JNI) compiled
+##
+
+## This needs to be exposed for the library info file even if JAVA is disabled.
+
+
+## Default is no JAVA
+HDF_JAVA=no
+
+ H5_CLASSPATH=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Java JNI interface enabled" >&5
+$as_echo_n "checking if Java JNI interface enabled... " >&6; }
+
+# Check whether --enable-java was given.
+if test "${enable_java+set}" = set; then :
+  enableval=$enable_java; HDF_JAVA=$enableval
+fi
+
+
+if test "X$HDF_JAVA" = "Xyes"; then
+  if test "X${enable_shared}" != "Xno"; then
+    echo "yes"
+    if test "X$CLASSPATH" = "X"; then
+      H5_CLASSPATH=".:$srcdir/java/lib"
+    else
+      H5_CLASSPATH=".:$CLASSPATH:$srcdir/java/lib"
+    fi
+    ## Checks for programs.
+
+
+# Check whether --with-java-prefix was given.
+if test "${with_java_prefix+set}" = set; then :
+  withval=$with_java_prefix;
+fi
+
+
+# Check whether --with-javac-flags was given.
+if test "${with_javac_flags+set}" = set; then :
+  withval=$with_javac_flags;
+fi
+
+
+# Check whether --with-java-flags was given.
+if test "${with_java_flags+set}" = set; then :
+  withval=$with_java_flags;
+fi
+
+JAVAPREFIX=$with_java_prefix
+JAVACFLAGS=$with_javac_flags
+JAVAFLAGS=$with_java_flags
+
+    H5_JAVACFLAGS=$JAVACFLAGS
+    H5_JAVAFLAGS=$JAVAFLAGS
+
+if test "x$JAVAPREFIX" = x; then :
+  test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVAC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVAC"; then
+  ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVAC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVAC" && break
+done
+
+else
+  test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVAC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVAC"; then
+  ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $JAVAPREFIX/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVAC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVAC" && break
+done
+
+fi
+test "x$JAVAC" = x && as_fn_error $? "no acceptable Java compiler found in \$PATH" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5
+$as_echo_n "checking if $JAVAC works... " >&6; }
+if ${ac_cv_prog_javac_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* #line 9762 "configure" */
+public class Test {
+}
+EOF
+if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1; then
+  ac_cv_prog_javac_works=yes
+else
+  as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5
+  echo "configure: failed program was:" >&5
+  cat $JAVA_TEST >&5
+fi
+rm -f $JAVA_TEST $CLASS_TEST
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5
+$as_echo "$ac_cv_prog_javac_works" >&6; }
+
+
+
+if test "x$JAVAPREFIX" = x; then :
+  test x$JAVA = x && for ac_prog in kaffe java
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVA+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVA"; then
+  ac_cv_prog_JAVA="$JAVA" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVA="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVA=$ac_cv_prog_JAVA
+if test -n "$JAVA"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5
+$as_echo "$JAVA" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVA" && break
+done
+
+else
+  test x$JAVA = x && for ac_prog in kaffe java
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVA+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVA"; then
+  ac_cv_prog_JAVA="$JAVA" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $JAVAPREFIX/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVA="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVA=$ac_cv_prog_JAVA
+if test -n "$JAVA"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5
+$as_echo "$JAVA" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVA" && break
+done
+
+fi
+test x$JAVA = x && as_fn_error $? "no acceptable Java virtual machine found in \$PATH" "$LINENO" 5
+
+# Extract the first word of "uudecode", so it can be a program name with args.
+set dummy uudecode; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_UUDECODE+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $UUDECODE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_UUDECODE="$UUDECODE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_UUDECODE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_UUDECODE" && ac_cv_path_UUDECODE="no"
+  ;;
+esac
+fi
+UUDECODE=$ac_cv_path_UUDECODE
+if test -n "$UUDECODE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UUDECODE" >&5
+$as_echo "$UUDECODE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test x$UUDECODE != xno; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if uudecode can decode base 64 file" >&5
+$as_echo_n "checking if uudecode can decode base 64 file... " >&6; }
+if ${ac_cv_prog_uudecode_base64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+cat << \EOF > Test.uue
+begin-base64 644 Test.class
+yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
+bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
+bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s
+YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG
+aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB
+AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB
+AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ=
+====
+EOF
+if $UUDECODE Test.uue; then
+        ac_cv_prog_uudecode_base64=yes
+else
+        echo "configure: 9937: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+        echo "configure: failed file was:" >&5
+        cat Test.uue >&5
+        ac_cv_prog_uudecode_base64=no
+fi
+rm -f Test.uue
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_uudecode_base64" >&5
+$as_echo "$ac_cv_prog_uudecode_base64" >&6; }
+fi
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+        rm -f Test.class
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: I have to compile Test.class from scratch" >&5
+$as_echo "$as_me: WARNING: I have to compile Test.class from scratch" >&2;}
+        if test x$ac_cv_prog_javac_works = xno; then
+                as_fn_error $? "Cannot compile java source. $JAVAC does not work properly" "$LINENO" 5
+        fi
+        if test x$ac_cv_prog_javac_works = x; then
+
+if test "x$JAVAPREFIX" = x; then :
+  test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVAC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVAC"; then
+  ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVAC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVAC" && break
+done
+
+else
+  test "x$JAVAC" = x && for ac_prog in "gcj -C" guavac jikes javac
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVAC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVAC"; then
+  ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $JAVAPREFIX/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVAC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVAC" && break
+done
+
+fi
+test "x$JAVAC" = x && as_fn_error $? "no acceptable Java compiler found in \$PATH" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $JAVAC works" >&5
+$as_echo_n "checking if $JAVAC works... " >&6; }
+if ${ac_cv_prog_javac_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* #line 10054 "configure" */
+public class Test {
+}
+EOF
+if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1; then
+  ac_cv_prog_javac_works=yes
+else
+  as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5
+  echo "configure: failed program was:" >&5
+  cat $JAVA_TEST >&5
+fi
+rm -f $JAVA_TEST $CLASS_TEST
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_javac_works" >&5
+$as_echo "$ac_cv_prog_javac_works" >&6; }
+
+
+        fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $JAVA works" >&5
+$as_echo_n "checking if $JAVA works... " >&6; }
+if ${ac_cv_prog_java_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+TEST=Test
+cat << \EOF > $JAVA_TEST
+/* [#]line 10089 "configure" */
+public class Test {
+public static void main (String args[]) {
+        System.exit (0);
+} }
+EOF
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+        if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } && test -s $CLASS_TEST; then
+                :
+        else
+          echo "configure: failed program was:" >&5
+          cat $JAVA_TEST >&5
+          as_fn_error $? "The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" "$LINENO" 5
+        fi
+fi
+if { ac_try='$JAVA -classpath . $JAVAFLAGS $TEST'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1; then
+  ac_cv_prog_java_works=yes
+else
+  echo "configure: failed program was:" >&5
+  cat $JAVA_TEST >&5
+  as_fn_error $? "The Java VM $JAVA failed (see config.log, check the CLASSPATH?)" "$LINENO" 5
+fi
+rm -fr $JAVA_TEST $CLASS_TEST Test.uue
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_java_works" >&5
+$as_echo "$ac_cv_prog_java_works" >&6; }
+
+
+
+
+if test "x$JAVAPREFIX" = x; then :
+  test "x$JAR" = x && for ac_prog in jar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAR"; then
+  ac_cv_prog_JAR="$JAR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAR=$ac_cv_prog_JAR
+if test -n "$JAR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5
+$as_echo "$JAR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAR" && break
+done
+
+else
+  test "x$JAR" = x && for ac_prog in jar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAR"; then
+  ac_cv_prog_JAR="$JAR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $JAVAPREFIX/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAR=$ac_cv_prog_JAR
+if test -n "$JAR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5
+$as_echo "$JAR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAR" && break
+done
+
+fi
+test "x$JAR" = x && as_fn_error $? "no acceptable jar program found in \$PATH" "$LINENO" 5
+
+
+if test "x$JAVAPREFIX" = x; then :
+  test "x$JAVADOC" = x && for ac_prog in javadoc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVADOC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVADOC"; then
+  ac_cv_prog_JAVADOC="$JAVADOC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVADOC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVADOC=$ac_cv_prog_JAVADOC
+if test -n "$JAVADOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVADOC" >&5
+$as_echo "$JAVADOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVADOC" && break
+done
+
+else
+  test "x$JAVADOC" = x && for ac_prog in javadoc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVADOC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$JAVADOC"; then
+  ac_cv_prog_JAVADOC="$JAVADOC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $JAVAPREFIX/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_JAVADOC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVADOC=$ac_cv_prog_JAVADOC
+if test -n "$JAVADOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVADOC" >&5
+$as_echo "$JAVADOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$JAVADOC" && break
+done
+
+fi
+test "x$JAVADOC" = x && as_fn_error $? "no acceptable javadoc generator found in \$PATH" "$LINENO" 5
+
+    ## Find the include directories needed for building JNI code
+
+
+JNI_INCLUDE_DIRS=""
+
+if test "x$JAVA_HOME" != x; then
+	_JTOPDIR="$JAVA_HOME"
+else
+	if test "x$JAVAC" = x; then
+		JAVAC=javac
+	fi
+	# Extract the first word of "$JAVAC", so it can be a program name with args.
+set dummy $JAVAC; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path__ACJNI_JAVAC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $_ACJNI_JAVAC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path__ACJNI_JAVAC="$_ACJNI_JAVAC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path__ACJNI_JAVAC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="no"
+  ;;
+esac
+fi
+_ACJNI_JAVAC=$ac_cv_path__ACJNI_JAVAC
+if test -n "$_ACJNI_JAVAC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_ACJNI_JAVAC" >&5
+$as_echo "$_ACJNI_JAVAC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+	if test "x$_ACJNI_JAVAC" = xno; then
+		as_fn_error $? "cannot find JDK; try setting \$JAVAC or \$JAVA_HOME" "$LINENO" 5
+	fi
+
+# find the include directory relative to the javac executable
+_cur=""$_ACJNI_JAVAC""
+while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking symlink for $_cur" >&5
+$as_echo_n "checking symlink for $_cur... " >&6; }
+        _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
+        case "$_slink" in
+        /*) _cur="$_slink";;
+        # 'X' avoids triggering unwanted echo options.
+        *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[^/]*$::'`"$_slink";;
+        esac
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cur" >&5
+$as_echo "$_cur" >&6; }
+done
+_ACJNI_FOLLOWED="$_cur"
+
+	_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[^/]*$::'`
+fi
+
+case "$host_os" in
+        darwin*)        # Apple JDK is at /System location and has headers symlinked elsewhere
+                        case "$_JTOPDIR" in
+                        /System/Library/Frameworks/JavaVM.framework/*)
+				_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
+				_JINC="$_JTOPDIR/Headers";;
+			*)      _JINC="$_JTOPDIR/include";;
+                        esac;;
+        *)              _JINC="$_JTOPDIR/include";;
+esac
+$as_echo "$as_me:${as_lineno-$LINENO}: _JTOPDIR=$_JTOPDIR" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: _JINC=$_JINC" >&5
+
+# On Mac OS X 10.6.4, jni.h is a symlink:
+# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
+# -> ../../CurrentJDK/Headers/jni.h.
+as_ac_File=`$as_echo "ac_cv_file_$_JINC/jni.h" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $_JINC/jni.h" >&5
+$as_echo_n "checking for $_JINC/jni.h... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "$_JINC/jni.h"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
+else
+  _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
+	 as_ac_File=`$as_echo "ac_cv_file_$_JTOPDIR/include/jni.h" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $_JTOPDIR/include/jni.h" >&5
+$as_echo_n "checking for $_JTOPDIR/include/jni.h... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "$_JTOPDIR/include/jni.h"; then
+  eval "$as_ac_File=yes"
+else
+  eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+  JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
+else
+  as_fn_error $? "cannot find JDK header files" "$LINENO" 5
+fi
+
+
+fi
+
+
+# get the likely subdirectories for system specific java includes
+case "$host_os" in
+bsdi*)          _JNI_INC_SUBDIRS="bsdos";;
+freebsd*)       _JNI_INC_SUBDIRS="freebsd";;
+darwin*)        _JNI_INC_SUBDIRS="darwin";;
+linux*)         _JNI_INC_SUBDIRS="linux genunix";;
+osf*)           _JNI_INC_SUBDIRS="alpha";;
+solaris*)       _JNI_INC_SUBDIRS="solaris";;
+mingw*)		_JNI_INC_SUBDIRS="win32";;
+cygwin*)	_JNI_INC_SUBDIRS="win32";;
+*)              _JNI_INC_SUBDIRS="genunix";;
+esac
+
+# add any subdirectories that are present
+for JINCSUBDIR in $_JNI_INC_SUBDIRS
+do
+    if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
+         JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
+    fi
+done
+
+    for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
+    do
+      JNIFLAGS="$JNIFLAGS -I$JNI_INCLUDE_DIR"
+    done
+    ## Find junit for testing the JNI code
+
+if test "x$CLASSPATH" = x; then
+        echo "You have no CLASSPATH, I hope it is good"
+else
+        echo "You have CLASSPATH $CLASSPATH, hope it is correct"
+fi
+
+    CLASSPATH_ENV=$H5_CLASSPATH
+
+if ${ac_cv_prog_JUNIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+ac_var_name=`echo junit.textui.TestRunner | sed 's/\./_/g'`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for junit.textui.TestRunner class" >&5
+$as_echo_n "checking for junit.textui.TestRunner class... " >&6; }
+if eval \${ax_cv_class_$ac_var_name+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+if test x$ac_cv_prog_uudecode_base64 = xyes; then
+cat << \EOF > Test.uue
+begin-base64 644 Test.class
+yv66vgADAC0AKQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
+bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
+bWJlclRhYmxlDAAKAAsBAANlcnIBABVMamF2YS9pby9QcmludFN0cmVhbTsJ
+AA0ACQcADgEAEGphdmEvbGFuZy9TeXN0ZW0IABABABBNaXNzaW5nIGFyZ3Vt
+ZW50DAASABMBAAdwcmludGxuAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWCgAV
+ABEHABYBABNqYXZhL2lvL1ByaW50U3RyZWFtDAAYABkBAARleGl0AQAEKEkp
+VgoADQAXDAAcAB0BAAdmb3JOYW1lAQAlKExqYXZhL2xhbmcvU3RyaW5nOylM
+amF2YS9sYW5nL0NsYXNzOwoAHwAbBwAgAQAPamF2YS9sYW5nL0NsYXNzBwAi
+AQAgamF2YS9sYW5nL0NsYXNzTm90Rm91bmRFeGNlcHRpb24BAAY8aW5pdD4B
+AAMoKVYMACMAJAoAAwAlAQAKU291cmNlRmlsZQEACVRlc3QuamF2YQAhAAEA
+AwAAAAAAAgAJAAUABgABAAcAAABtAAMAAwAAACkqvgSiABCyAAwSD7YAFBBN
+uAAaKgMyuAAeTKcACE0EuAAaAUwDuAAasQABABMAGgAdACEAAQAIAAAAKgAK
+AAAACgAAAAsABgANAA4ADgATABAAEwASAB4AFgAiABgAJAAZACgAGgABACMA
+JAABAAcAAAAhAAEAAQAAAAUqtwAmsQAAAAEACAAAAAoAAgAAAAQABAAEAAEA
+JwAAAAIAKA==
+====
+EOF
+                if $UUDECODE Test.uue; then
+                        :
+                else
+                        echo "configure: 10519: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+                        echo "configure: failed file was:" >&5
+                        cat Test.uue >&5
+                        ac_cv_prog_uudecode_base64=no
+                fi
+        rm -f Test.uue
+        if { ac_try='$JAVA $JAVAFLAGS Test junit.textui.TestRunner'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1; then
+                eval "ac_cv_class_$ac_var_name=yes"
+        else
+                eval "ac_cv_class_$ac_var_name=no"
+        fi
+        rm -f Test.class
+else
+
+cat << \EOF > Test.java
+/* #line 10539 "configure" */
+import junit.textui.TestRunner;
+public class Test {
+
+}
+EOF
+if { ac_try='$JAVAC $JAVACFLAGS Test.java'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } && test -s Test.class
+then
+  eval "ac_cv_class_$ac_var_name=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat Test.java >&5
+  rm -fr Test.java Test.class
+  eval "ac_cv_class_$ac_var_name=no"
+fi
+rm -fr Test.java Test.class
+fi
+eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
+eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`"
+HAVE_LAST_CLASS=$ac_var_val
+if test x$ac_var_val = xyes; then
+        :
+else
+        :
+fi
+
+fi
+
+eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_var_val" >&5
+$as_echo "$ac_var_val" >&6; }
+
+if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then
+  ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner'
+fi
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for junit" >&5
+$as_echo_n "checking for junit... " >&6; }
+if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then
+  JUNIT="$ac_cv_prog_JUNIT"
+  JAVA_JUNIT='$(JAVA_JUNIT)'
+  TESTS_JUNIT='$(TESTS_JUNIT)'
+else
+  JUNIT=
+  JAVA_JUNIT=
+  TESTS_JUNIT=
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_JUNIT" >&5
+$as_echo "$JAVA_JUNIT" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JAVA_HOME" >&5
+$as_echo_n "checking for JAVA_HOME... " >&6; }
+# We used a fake loop so that we can use "break" to exit when the result
+# is found.
+while true
+do
+  # If the user defined JAVA_HOME, don't touch it.
+  test "${JAVA_HOME+set}" = set && break
+
+  # On Mac OS X 10.5 and following, run /usr/libexec/java_home to get
+  # the value of JAVA_HOME to use.
+  # (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html).
+  JAVA_HOME=`/usr/libexec/java_home 2>/dev/null`
+  test x"$JAVA_HOME" != x && break
+
+  # See if we can find the java executable, and compute from there.
+  TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1`
+  if test x$TRY_JAVA_HOME != x; then
+    PATH=$PATH:$TRY_JAVA_HOME/bin
+  fi
+  # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_JAVA_PATH_NAME+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $JAVA_PATH_NAME in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_JAVA_PATH_NAME="$JAVA_PATH_NAME" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_JAVA_PATH_NAME="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+JAVA_PATH_NAME=$ac_cv_path_JAVA_PATH_NAME
+if test -n "$JAVA_PATH_NAME"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_PATH_NAME" >&5
+$as_echo "$JAVA_PATH_NAME" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  if test "x$JAVA_PATH_NAME" != x; then
+    JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[/]bin[/]java.*/\1/"`
+    break
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: Could not compute JAVA_HOME" >&5
+$as_echo "$as_me: Could not compute JAVA_HOME" >&6;}
+  break
+done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_HOME" >&5
+$as_echo "$JAVA_HOME" >&6; }
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  else
+    as_fn_error $? "Java requires shared libraries to be built" "$LINENO" 5
+    HDF_JAVA="no"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+## ----------------------------------------------------------------------
 ## Fortran libraries are not currently supported on Mac. Disable them.
 ## (this is overridable with --enable-unsupported).
 ##
@@ -23619,6 +24863,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 ##   This check needs to occur after libtool is initialized because
 ##   we check a libtool cache value and may issue a warning based
 ##   on its result.
+
+
+## Default is no
+STATIC_EXEC=no
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should install only statically linked executables" >&5
 $as_echo_n "checking if we should install only statically linked executables... " >&6; }
 # Check whether --enable-static_exec was given.
@@ -23631,8 +24880,8 @@ if test "X$STATIC_EXEC" = "Xyes"; then
   echo "yes"
   ## Issue a warning if -static flag is not supported.
   if test "X$lt_cv_prog_compiler_static_works" = "Xno"; then
-      echo "    warning: -static flag not supported on this system; executable won't statically link shared system libraries."
-      LT_STATIC_EXEC=""
+    echo "    warning: -static flag not supported on this system; executable won't statically link shared system libraries."
+    LT_STATIC_EXEC=""
   else
     LT_STATIC_EXEC="-all-static"
   fi
@@ -23693,57 +24942,6 @@ $as_echo "error" >&6; }
 esac
 
 ## ----------------------------------------------------------------------
-## Production flags?  Save the value in $CONFIG_MODE so we have it for
-## the record.
-##
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for production mode" >&5
-$as_echo_n "checking for production mode... " >&6; }
-# Check whether --enable-production was given.
-if test "${enable_production+set}" = set; then :
-  enableval=$enable_production;
-fi
-
-
-case "X-$enable_production" in
-  X-yes)
-    enable_production="yes"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: production" >&5
-$as_echo "production" >&6; }
-    CONFIG_MODE=production
-    H5_CFLAGS="$H5_CFLAGS $PROD_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $PROD_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
-    ;;
-  X-|X-no)
-    enable_production="no"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: development" >&5
-$as_echo "development" >&6; }
-    CONFIG_MODE=development
-    H5_CFLAGS="$H5_CFLAGS $DEBUG_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $DEBUG_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_FCFLAGS"
-    ;;
-  X-pg|X-profile)
-    enable_production="profile"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: profile" >&5
-$as_echo "profile" >&6; }
-    CONFIG_MODE=profile
-    H5_CFLAGS="$H5_CFLAGS $PROFILE_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $PROFILE_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILE_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $PROFILE_FCFLAGS"
-    ;;
-  *)
-    enable_production="user-defined"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: user-defined" >&5
-$as_echo "user-defined" >&6; }
-    CONFIG_MODE="$enableval"
-    ;;
-esac
-
-## ----------------------------------------------------------------------
 ## Check for system libraries. "dl" stands for dynamically loaded library
 ##
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ceil in -lm" >&5
@@ -24429,10 +25627,6 @@ fi
 ##
 case "$host_cpu-$host_vendor-$host_os" in
   *linux*)
-    ## Make available various LFS-related routines using the following
-    ## _LARGEFILE*_SOURCE macros.
-    AM_CPPFLAGS="-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $AM_CPPFLAGS"
-
     ## Add POSIX support on Linux systems, so <features.h> defines
     ## __USE_POSIX, which is required to get the prototype for fdopen
     ## defined correctly in <stdio.h>.
@@ -24467,100 +25661,6 @@ esac
 CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
 CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-
-#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 ()
-{
-off64_t n = 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  for ac_func in lseek64 fseeko64 ftello64 ftruncate64
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipping test for lseek64, fseeko64 , ftello64, ftruncate64 because off64_t is not defined" >&5
-$as_echo "skipping test for lseek64, fseeko64 , ftello64, ftruncate64 because off64_t is not defined" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-for ac_func in fseeko ftello
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#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 ()
-{
-struct stat64 sb;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  for ac_func in stat64 fstat64
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: skipping test for stat64 and fstat64" >&5
-$as_echo "skipping test for stat64 and fstat64" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
 ## Checkpoint the cache
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -25591,39 +26691,6 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off64_t" >&5
-$as_echo_n "checking size of off64_t... " >&6; }
-if ${ac_cv_sizeof_off64_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off64_t))" "ac_cv_sizeof_off64_t"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_off64_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (off64_t)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_off64_t=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off64_t" >&5
-$as_echo "$ac_cv_sizeof_off64_t" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_OFF64_T $ac_cv_sizeof_off64_t
-_ACEOF
-
-
 
 if test "X$C9x" = "Xyes"; then
   cat >>confdefs.h <<\EOF
@@ -25814,6 +26881,11 @@ fi
 ## If the library path is specified then it must be preceded by a comma.
 ##
 
+
+## Default is not present
+HAVE_DMALLOC=no
+
+
 # Check whether --with-dmalloc was given.
 if test "${with_dmalloc+set}" = set; then :
   withval=$with_dmalloc;
@@ -26017,6 +27089,14 @@ fi
 esac
 
 ## ----------------------------------------------------------------------
+## Make the external filters list available to *.in files
+## At this point it's unset (no external filters by default) but it
+## will be filled in during the deflate (zlib) and szip processing
+## below.
+##
+
+
+## ----------------------------------------------------------------------
 ## Is the GNU zlib present? It has a header file `zlib.h' and a library
 ## `-lz' and their locations might be specified with the `--with-zlib'
 ## command-line switch. The value is an include path and/or a library path.
@@ -26252,7 +27332,7 @@ $as_echo "#define HAVE_FILTER_DEFLATE 1" >>confdefs.h
   if test "X$EXTERNAL_FILTERS" != "X"; then
     EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
   fi
-  EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate(zlib)"
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate(zlib)"
 fi
 
 
@@ -26551,13 +27631,13 @@ $as_echo "no" >&6; }
     if test "X$EXTERNAL_FILTERS" != "X"; then
       EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
     fi
-    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(encoder)"
+      EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(encoder)"
   fi
   if test ${hdf5_cv_szlib_can_encode} = "no"; then
     if test "X$EXTERNAL_FILTERS" != "X"; then
       EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
     fi
-    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(no encoder)"
+      EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(no encoder)"
   fi
 fi
 
@@ -26661,6 +27741,11 @@ rm -f confcache
 ## Enable thread-safe version of library.  It requires Pthreads support
 ## on POSIX systems.
 ##
+
+
+## Default is no thread-safety
+THREADSAFE=no
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread safe support" >&5
 $as_echo_n "checking for thread safe support... " >&6; }
 # Check whether --enable-threadsafe was given.
@@ -26669,7 +27754,7 @@ if test "${enable_threadsafe+set}" = set; then :
 fi
 
 
-## NOTE: The high-level, C++, and Fortran interfaces are not compatible
+## The high-level, C++, and Fortran interfaces are not compatible
 ## with the thread-safety option because the lock is not hoisted
 ## into the higher-level API calls.
 
@@ -27882,57 +28967,277 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-
 ## ----------------------------------------------------------------------
-## Turn on debugging by setting compiler flags
-## This must come after the enable-production since it depends on production.
+## Deprecate old ways of determining debug/production build
+## These can probably be removed in the future (1.10.1?)
 ##
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for debug flags" >&5
-$as_echo_n "checking for debug flags... " >&6; }
 # Check whether --enable-debug was given.
 if test "${enable_debug+set}" = set; then :
-  enableval=$enable_debug; DEBUG_PKG=$enableval
+  enableval=$enable_debug; DEPRECATED_DEBUG=$enableval
 fi
 
 
-## Default to no if producton is enabled
-if test "X-$DEBUG_PKG" = X- ; then
-    if test "$enable_production" = yes ; then
-	DEBUG_PKG=no
-    else
-	DEBUG_PKG=yes
-    fi
+if test "X-$DEPRECATED_DEBUG" != "X-" ; then
+    as_fn_error $? "--enable-debug is deprecated, use --enable-build-mode=debug instead." "$LINENO" 5
+fi
+
+# Check whether --enable-production was given.
+if test "${enable_production+set}" = set; then :
+  enableval=$enable_production; DEPRECATED_PRODUCTION=$enableval
+fi
+
+
+if test "X-$DEPRECATED_PRODUCTION" != "X-" ; then
+    as_fn_error $? "--enable-production is deprecated, use --enable-build-mode=production instead." "$LINENO" 5
+fi
+
+
+## ----------------------------------------------------------------------
+## Check if the compiler should include symbols
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking enable debugging symbols" >&5
+$as_echo_n "checking enable debugging symbols... " >&6; }
+# Check whether --enable-symbols was given.
+if test "${enable_symbols+set}" = set; then :
+  enableval=$enable_symbols; SYMBOLS=$enableval
+fi
+
+
+## Set default
+if test "X-$SYMBOLS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    SYMBOLS=yes
+  else
+    SYMBOLS=no
+  fi
 fi
 
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
 
-all_packages="ac,b,b2,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z"
-case "X-$DEBUG_PKG" in
+case "X-$SYMBOLS" in
   X-yes)
-    DEBUG_PKG="d,e,f,g,hg,i,mm,o,p,s,t,v,z"
-##    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: default ($DEBUG_PKG)" >&5
-$as_echo "default ($DEBUG_PKG)" >&6; }
+    H5_CFLAGS="$H5_CFLAGS $SYMBOLS_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
     ;;
-  X-all)
-    DEBUG_PKG=$all_packages
-##    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: all ($DEBUG_PKG)" >&5
-$as_echo "all ($DEBUG_PKG)" >&6; }
+  X-no)
+    H5_CFLAGS="$H5_CFLAGS $NO_SYMBOLS_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $NO_SYMBOLS_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $NO_SYMBOLS_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
     ;;
-  X-no|X-none)
+  *)
+    H5_CFLAGS="$H5_CFLAGS $SYMBOLS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS"
+    H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS"
+    SYMBOLS="custom ($SYMBOLS)"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SYMBOLS" >&5
+$as_echo "$SYMBOLS" >&6; }
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the assert macro should be enabled
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking enable asserts" >&5
+$as_echo_n "checking enable asserts... " >&6; }
+# Check whether --enable-asserts was given.
+if test "${enable_asserts+set}" = set; then :
+  enableval=$enable_asserts; ASSERTS=$enableval
+fi
+
+
+## Set default
+if test "X-$ASSERTS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    ASSERTS=yes
+  else
+    ASSERTS=no
+  fi
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+case "X-$ASSERTS" in
+  X-yes)
+    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    ;;
+  X-no)
+    H5_CPPFLAGS="$H5_CPPFLAGS -DNDEBUG"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  *)
+    as_fn_error $? "Unrecognized value: $ASSERTS" "$LINENO" 5
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the compiler should use profiling flags/settings
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking profiling" >&5
+$as_echo_n "checking profiling... " >&6; }
+# Check whether --enable-profiling was given.
+if test "${enable_profiling+set}" = set; then :
+  enableval=$enable_profiling; PROFILING=$enableval
+fi
+
+
+## Default is no profiling
+if test "X-$PROFILING" = X- ; then
+    PROFILING=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+case "X-$PROFILING" in
+  X-yes)
+    H5_CFLAGS="$H5_CFLAGS $PROFILE_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILE_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $PROFILE_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    ;;
+  X-no)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  *)
+    H5_CFLAGS="$H5_CFLAGS $PROFILING"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILING"
+    H5_FCFLAGS="$H5_FCFLAGS $PROFILING"
+    PROFILING="custom ($PROFILING)"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROFILING" >&5
+$as_echo "$PROFILING" >&6; }
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the compiler should use a particular optimization setting
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking optimization level" >&5
+$as_echo_n "checking optimization level... " >&6; }
+# Check whether --enable-optimization was given.
+if test "${enable_optimization+set}" = set; then :
+  enableval=$enable_optimization; OPTIMIZATION=$enableval
+fi
+
+
+## Set the default optimization level. This depends on the compiler mode.
+if test "X-$OPTIMIZATION" = X- ; then
+  case "X-$BUILD_MODE" in
+  X-debug)
+    OPTIMIZATION=debug
+    ;;
+  X-production)
+    OPTIMIZATION=high
+    ;;
+  X-clean)
+    OPTIMIZATION=none
+    ;;
+  esac
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+case "X-$OPTIMIZATION" in
+  X-high)
+    H5_CFLAGS="$H5_CFLAGS $HIGH_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $HIGH_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $HIGH_OPT_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: high" >&5
+$as_echo "high" >&6; }
+    ;;
+  X-debug)
+    H5_CFLAGS="$H5_CFLAGS $DEBUG_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_OPT_FCFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: debug" >&5
+$as_echo "debug" >&6; }
+    ;;
+  X-none)
+    H5_CFLAGS="$H5_CFLAGS $NO_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $NO_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $NO_OPT_FCFLAGS"
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
 $as_echo "none" >&6; }
-    DEBUG_PKG=
-##    H5_CPPFLAGS="$H5_CPPFLAGS -DNDEBUG"
     ;;
   *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_PKG" >&5
-$as_echo "$DEBUG_PKG" >&6; }
+    H5_CFLAGS="$H5_CFLAGS $OPTIMIZATION"
+    H5_CXXFLAGS="$H5_CXXFLAGS $OPTIMIZATION"
+    H5_FCFLAGS="$H5_FCFLAGS $OPTIMIZATION"
+    OPTIMIZATION="custom ($OPTIMIZATION)"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPTIMIZATION" >&5
+$as_echo "$OPTIMIZATION" >&6; }
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Enable/disable internal package-level debugging output
+##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for internal debug output" >&5
+$as_echo_n "checking for internal debug output... " >&6; }
+# Check whether --enable-internal-debug was given.
+if test "${enable_internal_debug+set}" = set; then :
+  enableval=$enable_internal_debug; INTERNAL_DEBUG_OUTPUT=$enableval
+fi
+
+
+## Set default
+if test "X-$INTERNAL_DEBUG_OUTPUT" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    INTERNAL_DEBUG_OUTPUT=all
+  else
+    INTERNAL_DEBUG_OUTPUT=none
+  fi
+fi
+
+
+
+## These are all the packages that use H5*_DEBUG.
+## There is no harm in specifying a package not in this list;
+## you'll just get an unused H5<pkg>_DEBUG symbol.
+##
+## Some packages that define debug checks or output are
+## too specialized or have huge performance hits. These
+## are not listed in the "all" packages list.
+##
+## all_packages="AC,B,B2,D,F,FA,FL,FS,HL,I,O,S,ST,T,Z"
+all_packages="AC,B2,D,F,HL,I,O,S,ST,T,Z"
+
+case "X-$INTERNAL_DEBUG_OUTPUT" in
+  X-yes|X-all)
+    INTERNAL_DEBUG_OUTPUT=$all_packages
+    DEBUG_PKG_LIST=$all_packages
+    ;;
+  X-no|X-none)
+    INTERNAL_DEBUG_OUTPUT=none
+    DEBUG_PKG_LIST=
+    ;;
+  *)
+    DEBUG_PKG_LIST=$INTERNAL_DEBUG_OUTPUT
     ;;
 esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTERNAL_DEBUG_OUTPUT" >&5
+$as_echo "$INTERNAL_DEBUG_OUTPUT" >&6; }
 
-if test -n "$DEBUG_PKG"; then
-  for pkg in `echo $DEBUG_PKG | ${TR} ${as_cr_letters}"," ${as_cr_LETTERS}" "`; do
+## Define H5*_DEBUG symbols that control package output
+## NOTE: No sanity checking done here!
+if test -n "$DEBUG_PKG_LIST"; then
+  for pkg in `echo $DEBUG_PKG_LIST | ${TR} ${as_cr_letters}"," ${as_cr_LETTERS}" "`; do
     H5_CPPFLAGS="$H5_CPPFLAGS -DH5${pkg}_DEBUG"
   done
 fi
@@ -27948,20 +29253,30 @@ if test "${enable_codestack+set}" = set; then :
 fi
 
 
+## Set the default level.
+if test "X-$CODESTACK" = X- ; then
+  CODESTACK=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
 case "X-$CODESTACK" in
   X-yes)
-      CODESTACK=yes
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
 $as_echo "#define HAVE_CODESTACK 1" >>confdefs.h
 
     ;;
-  *)
-      CODESTACK=no
+  X-no)
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
+  *)
+      as_fn_error $? "Unrecognized value: $CODESTACK" "$LINENO" 5
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
@@ -27975,186 +29290,154 @@ if test "${enable_metadata_trace_file+set}" = set; then :
 fi
 
 
+## Set the default level.
+if test "X-$METADATATRACEFILE" = X- ; then
+  METADATATRACEFILE=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
 case "X-$METADATATRACEFILE" in
   X-yes)
-      METADATATRACEFILE=yes
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
 $as_echo "#define METADATA_TRACE_FILE 1" >>confdefs.h
 
     ;;
-  *)
-      METADATATRACEFILE=no
+  X-no)
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
+  *)
+      as_fn_error $? "Unrecognized value: $METADATATRACEFILE" "$LINENO" 5
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
 ## Enable tracing of the API
-## This must come after the enable-debug since it depends on debug.
 ##
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for API tracing" >&5
 $as_echo_n "checking for API tracing... " >&6; };
 # Check whether --enable-trace was given.
 if test "${enable_trace+set}" = set; then :
-  enableval=$enable_trace; TRACE=$enableval
+  enableval=$enable_trace; TRACE_API=$enableval
 fi
 
 
-## Default to no if debug is disabled
-if test "X-$TRACE" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    TRACE=no
+## Set the default level.
+if test "X-$TRACE_API" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    TRACE_API=yes
   else
-    TRACE=yes
+    TRACE_API=no
   fi
 fi
 
-case "X-$TRACE" in
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+case "X-$TRACE_API" in
   X-yes)
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    TRACE_API=yes
     H5_CPPFLAGS="$H5_CPPFLAGS -DH5_DEBUG_API"
     ;;
-  X-no|*)
+  X-no)
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    TRACE_API=no
     H5_CPPFLAGS="$H5_CPPFLAGS -UH5_DEBUG_API"
     ;;
+  *)
+    as_fn_error $? "Unrecognized value: $TRACE_API" "$LINENO" 5
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
-## Enable instrumenting of the library's internal operations
-## This must come after the enable-debug since it depends on debug.
+## Check if they would like to use a memory checking tool (like valgrind's
+##     'memcheck' tool, or Rational Purify, etc) and the library should be
+##     more scrupulous with it's memory operations.  Enabling this also
+##     disables the library's free space manager code.
 ##
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for instrumented library" >&5
-$as_echo_n "checking for instrumented library... " >&6; };
-# Check whether --enable-instrument was given.
-if test "${enable_instrument+set}" = set; then :
-  enableval=$enable_instrument; INSTRUMENT=$enableval
-fi
-
-
-## Default to no if debug is disabled
-if test "X-$INSTRUMENT" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    INSTRUMENT=no
-  else
-    INSTRUMENT=yes
-  fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a memory checking tool will be used" >&5
+$as_echo_n "checking whether a memory checking tool will be used... " >&6; }
+# Check whether --enable-using-memchecker was given.
+if test "${enable_using_memchecker+set}" = set; then :
+  enableval=$enable_using_memchecker; USINGMEMCHECKER=$enableval
 fi
 
-case "X-$INSTRUMENT" in
-  X-yes)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    INSTRUMENT_LIBRARY=yes
-
-$as_echo "#define HAVE_INSTRUMENTED_LIBRARY 1" >>confdefs.h
 
-    ;;
-  X-no|*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    INSTRUMENT_LIBRARY=no
-    ;;
-esac
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
 
-## ----------------------------------------------------------------------
-## Check if they would like to securely clear file buffers before they are
-##     written.
-##
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to clear file buffers" >&5
-$as_echo_n "checking whether to clear file buffers... " >&6; }
-# Check whether --enable-clear-file-buffers was given.
-if test "${enable_clear_file_buffers+set}" = set; then :
-  enableval=$enable_clear_file_buffers; CLEARFILEBUF=$enableval
+## Set the default level.
+if test "X-$USINGMEMCHECKER" = X- ; then
+  USINGMEMCHECKER=no
 fi
 
+case "X-$USINGMEMCHECKER" in
+  X-yes)
+
+$as_echo "#define USING_MEMCHECKER 1" >>confdefs.h
 
-case "X-$CLEARFILEBUF" in
-  *)
-      CLEARFILEBUF=yes
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-
-$as_echo "#define CLEAR_MEMORY 1" >>confdefs.h
-
     ;;
   X-no)
-      CLEARFILEBUF=no
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
+  *)
+      as_fn_error $? "Unrecognized value: $USINGMEMCHECKER" "$LINENO" 5
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
-## Check if they would like to use a memory checking tool (like valgrind's
-##     'memcheck' tool, or Rational Purify, etc) and the library should be
-##     more scrupulous with it's memory operations.  Enabling this also
-##     disables the library's free space manager code.
+## Check if they would like to enable the internal memory allocation sanity
+##     checking code.
 ##
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a memory checking tool will be used" >&5
-$as_echo_n "checking whether a memory checking tool will be used... " >&6; }
-# Check whether --enable-using-memchecker was given.
-if test "${enable_using_memchecker+set}" = set; then :
-  enableval=$enable_using_memchecker; USINGMEMCHECKER=$enableval
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether internal memory allocation sanity checking is used" >&5
+$as_echo_n "checking whether internal memory allocation sanity checking is used... " >&6; }
+# Check whether --enable-memory-alloc-sanity-check was given.
+if test "${enable_memory_alloc_sanity_check+set}" = set; then :
+  enableval=$enable_memory_alloc_sanity_check; MEMORYALLOCSANITYCHECK=$enableval
 fi
 
 
-case "X-$USINGMEMCHECKER" in
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+
+
+## Set default
+if test "X-$MEMORYALLOCSANITYCHECK" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    MEMORYALLOCSANITYCHECK=yes
+  else
+    MEMORYALLOCSANITYCHECK=no
+  fi
+fi
+
+case "X-$MEMORYALLOCSANITYCHECK" in
   X-yes)
-      USINGMEMCHECKER=yes
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define USING_MEMCHECKER 1" >>confdefs.h
+$as_echo "#define MEMORY_ALLOC_SANITY_CHECK 1" >>confdefs.h
 
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
     ;;
-  *)
-      USINGMEMCHECKER=no
+  X-no)
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
+  *)
+      as_fn_error $? "Unrecognized value: $MEMORYALLOCSANITYCHECK" "$LINENO" 5
+    ;;
 esac
 
-## ----------------------------------------------------------------------
-## Check if they would like to enable the internal memory allocation sanity
-##     checking code.
-##
-##AC_SUBST([MEMORYALLOCSANITYCHECK])
-##AC_MSG_CHECKING([whether internal memory allocation sanity checking is used])
-##AC_ARG_ENABLE([memory-alloc-sanity-check],
-##              [AS_HELP_STRING([--enable-memory-alloc-sanity-check],
-##                              [Enable this option to turn on internal memory
-##                              allocation sanity checking.  This could cause
-##                              more memory use and somewhat slower allocation.
-##                              This option is orthogonal to the
-##                              --enable-using-memchecker option.
-##                              Default=no.])],
-##              [MEMORYALLOCSANITYCHECK=$enableval])
-##
-##case "X-$MEMORYALLOCSANITYCHECK" in
-##  X-yes)
-##      MEMORYALLOCSANITYCHECK=yes
-##      AC_MSG_RESULT([yes])
-##      AC_DEFINE([MEMORY_ALLOC_SANITY_CHECK], [1],
-##                [Define to enable internal memory allocation sanity checking.])
-##    ;;
-##  *)
-##      MEMORYALLOCSANITYCHECK=no
-##      AC_MSG_RESULT([no])
-##    ;;
-##esac
-
 ## Checkpoint the cache
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -28303,7 +29586,7 @@ int
 main ()
 {
  MPI_Init(0, (void *)0);
-		      MPI_File_open(0, (void *)0, 0, 0, (void *)0);
+            MPI_File_open(0, (void *)0, 0, 0, (void *)0);
   ;
   return 0;
 }
@@ -28314,7 +29597,7 @@ $as_echo "yes" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-		    as_fn_error $? "unable to link a simple MPI-IO C program" "$LINENO" 5
+            as_fn_error $? "unable to link a simple MPI-IO C program" "$LINENO" 5
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
@@ -28374,8 +29657,12 @@ esac
 
 ## ----------------------------------------------------------------------
 ## Print some other parallel information and do some sanity checks.
+## Needs to be done outside of the PARALLEL block since the serial
+## build also needs to have values defined.
 ##
  ADD_PARALLEL_FILES="no"
+ MPE=no
+ INSTRUMENT_LIBRARY=no
 
 if test -n "$PARALLEL"; then
   ## The 'testpar' directory should participate in the build
@@ -28488,6 +29775,47 @@ rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
+  ## ----------------------------------------------------------------------
+  ## Enable instrumenting of the library's internal operations
+  ## in parallel builds.
+  ##
+
+  ## Set default
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    INSTRUMENT_LIBRARY=yes
+  else
+    INSTRUMENT_LIBRARY=no
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for instrumented library" >&5
+$as_echo_n "checking for instrumented library... " >&6; };
+  # Check whether --enable-instrument was given.
+if test "${enable_instrument+set}" = set; then :
+  enableval=$enable_instrument; INSTRUMENT_LIBRARY=$enableval
+fi
+
+
+  ## Allow this variable to be substituted in
+  ## other files (src/libhdf5.settings.in, etc.)
+
+
+  case "X-$INSTRUMENT_LIBRARY" in
+    X-yes)
+
+$as_echo "#define HAVE_INSTRUMENTED_LIBRARY 1" >>confdefs.h
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      ;;
+    X-no)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      ;;
+    *)
+      as_fn_error $? "Unrecognized value: $INSTRUMENT_LIBRARY" "$LINENO" 5
+      ;;
+  esac
+
   ## --------------------------------------------------------------------
   ## Do we want MPE instrumentation feature on?
   ##
@@ -28763,6 +30091,11 @@ fi
 ## ----------------------------------------------------------------------
 ## Check if Direct I/O driver is enabled by --enable-direct-vfd
 ##
+
+
+## Default is no direct VFD
+DIRECT_VFD=no
+
 if ${hdf5_cv_direct_io+:} false; then :
   $as_echo_n "(cached) " >&6
 else
@@ -28821,6 +30154,7 @@ else
 $as_echo "no" >&6; }
 fi
 
+## Direct VFD files are not built if not required.
  if test "X$DIRECT_VFD" = "Xyes"; then
   DIRECT_VFD_CONDITIONAL_TRUE=
   DIRECT_VFD_CONDITIONAL_FALSE='#'
@@ -29379,7 +30713,7 @@ if test -n "$ORGANIZATION"; then
   CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
 fi
 
-## Configuration mode (production, development, profile, etc) saved above.
+## Configuration mode (production, debug, etc.) saved above.
 
 
 ## Byte sex from the AC_C_BIGENDIAN macro.
@@ -29448,7 +30782,7 @@ CXX_NOFLAGS=`echo $CXX | sed 's/ -.*//'`
 if `echo $CXX_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
   CXX_VERSION="$CXX"
 else
-  CXX_VERSION="$FC";
+  CXX_VERSION="$CXX";
   for x in `echo $PATH | sed -e 's/:/ /g'`; do
     if test -x $x/$CXX_NOFLAGS; then
       CXX_VERSION="$x/$CXX"
@@ -29460,6 +30794,27 @@ if test -n "$cxx_version_info"; then
   CXX_VERSION="$CXX_VERSION ( $cxx_version_info)"
 fi
 
+
+## Strip anything that looks like a flag off of $JAVA
+JAVA_NOFLAGS=`echo $JAVA | sed 's/ -.*//'`
+
+if `echo $JAVA_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
+  JAVA_VERSION="$JAVA"
+else
+  JAVA_VERSION="$JAVA";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$JAVA_NOFLAGS; then
+      JAVA_VERSION="$x/$JAVA"
+      break
+    fi
+  done
+fi
+java_version_info=`$JAVA -version 2>&1 |\
+  grep 'version' | sed -e 's/version "//' | sed -e 's/"//'`
+if test -n "$java_version_info"; then
+  JAVA_VERSION="$JAVA_VERSION ( $java_version_info)"
+fi
+
 ## ----------------------------------------------------------------------
 ## Where is the root of the source tree. Give an absolute address so
 ## we can find it no matter which directory of the distribution is our
@@ -29506,13 +30861,19 @@ fi
 ## Enable deprecated public API symbols
 ##
 
+## Enabled unless the build mode is clean.
+if test "X-$BUILD_MODE" = "X-clean" ; then
+  DEPREC_SYMBOLS=no
+else
+  DEPREC_SYMBOLS=yes
+fi
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if deprecated public symbols are available" >&5
 $as_echo_n "checking if deprecated public symbols are available... " >&6; };
 # Check whether --enable-deprecated-symbols was given.
 if test "${enable_deprecated_symbols+set}" = set; then :
   enableval=$enable_deprecated_symbols; DEPREC_SYMBOLS=$enableval
-else
-  DEPREC_SYMBOLS=yes
 fi
 
 
@@ -29559,6 +30920,9 @@ elif test "X$withval" = "Xv18"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: v18" >&5
 $as_echo "v18" >&6; }
     DEFAULT_API_VERSION=v18
+
+$as_echo "#define USE_18_API_DEFAULT 1" >>confdefs.h
+
 elif test "X$withval" = "Xv110"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: v110" >&5
 $as_echo "v110" >&6; }
@@ -29585,32 +30949,33 @@ fi
 $as_echo_n "checking whether to perform strict file format checks... " >&6; };
 # Check whether --enable-strict-format-checks was given.
 if test "${enable_strict_format_checks+set}" = set; then :
-  enableval=$enable_strict_format_checks; STRICT_CHECKS=$enableval
+  enableval=$enable_strict_format_checks; STRICT_FORMAT_CHECKS=$enableval
 fi
 
 
-## Default to yes if debug is enabled
-if test "X-$STRICT_CHECKS" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    STRICT_CHECKS=no
+## Set the default level. This depends on the compiler mode.
+if test "X-$STRICT_FORMAT_CHECKS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    STRICT_FORMAT_CHECKS=yes
   else
-    STRICT_CHECKS=yes
+    STRICT_FORMAT_CHECKS=no
   fi
 fi
 
-case "X-$STRICT_CHECKS" in
+case "X-$STRICT_FORMAT_CHECKS" in
   X-yes)
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    STRICT_FORMAT_CHECKS=yes
 
 $as_echo "#define STRICT_FORMAT_CHECKS 1" >>confdefs.h
 
     ;;
-  X-no|*)
+  X-no)
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    STRICT_FORMAT_CHECKS=no
+    ;;
+  *)
+    as_fn_error $? "Unrecognized value: $STRICT_FORMAT_CHECKS" "$LINENO" 5
     ;;
 esac
 
@@ -29730,6 +31095,8 @@ CFLAGS="$saved_user_CFLAGS"
 FCFLAGS="$saved_user_FCFLAGS"
 CXXFLAGS="$saved_user_CXXFLAGS"
 CPPFLAGS="$saved_user_CPPFLAGS"
+JAVACFLAGS="$saved_user_JAVACFLAGS"
+JAVAFLAGS="$saved_user_JAVAFLAGS"
 LDFLAGS="$saved_user_LDFLAGS"
 
 
@@ -29761,6 +31128,14 @@ else
   BUILD_FORTRAN_CONDITIONAL_FALSE=
 fi
 
+ if test "X$HDF_JAVA" = "Xyes"; then
+  BUILD_JAVA_CONDITIONAL_TRUE=
+  BUILD_JAVA_CONDITIONAL_FALSE='#'
+else
+  BUILD_JAVA_CONDITIONAL_TRUE='#'
+  BUILD_JAVA_CONDITIONAL_FALSE=
+fi
+
  if test "X$HDF5_HL" = "Xyes"; then
   BUILD_HDF5_HL_CONDITIONAL_TRUE=
   BUILD_HDF5_HL_CONDITIONAL_FALSE='#'
@@ -30211,7 +31586,7 @@ Usage: $0 [OPTIONS]
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-HDF5 config.lt 1.10.0-alpha1
+HDF5 config.lt 1.10.0-pre1
 configured by $0, generated by GNU Autoconf 2.69.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -31622,6 +32997,11 @@ else
   enable_static=no
 fi
 
+## Expose things for *.in markup
+
+
+
+
 if test "X$enable_static" = "Xyes" && test "X$enable_shared" = "Xyes"; then
   STATIC_SHARED="static, shared"
 elif test "X$enable_static" = "Xyes"; then
@@ -31644,7 +33024,7 @@ else
 fi
 
 
-ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile test/testcheck_version.sh test/testerror.sh test/testflushrefresh.sh test/H5srcdir_str.h test/testlibinfo.sh test/testlinks_env.sh test/testswmr.sh test/test_plugin.sh test/test_usecases.sh test/testvdsswmr.sh testpar/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumppbits.sh tools/h5dump/testh5dumpvds.sh tools/h5dump/testh5dumpxml.sh tools/h5ls/testh5l [...]
+ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile test/testcheck_version.sh test/testerror.sh test/testflushrefresh.sh test/H5srcdir_str.h test/testlibinfo.sh test/testlinks_env.sh test/testswmr.sh test/test_plugin.sh test/test_usecases.sh test/testvdsswmr.sh testpar/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumppbits.sh tools/h5dump/testh5dumpvds.sh tools/h5dump/testh5dumpxml.sh tools/h5ls/testh5l [...]
 
 
 cat >confcache <<\_ACEOF
@@ -31821,6 +33201,10 @@ if test -z "${BUILD_FORTRAN_CONDITIONAL_TRUE}" && test -z "${BUILD_FORTRAN_CONDI
   as_fn_error $? "conditional \"BUILD_FORTRAN_CONDITIONAL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_JAVA_CONDITIONAL_TRUE}" && test -z "${BUILD_JAVA_CONDITIONAL_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_JAVA_CONDITIONAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${BUILD_HDF5_HL_CONDITIONAL_TRUE}" && test -z "${BUILD_HDF5_HL_CONDITIONAL_FALSE}"; then
   as_fn_error $? "conditional \"BUILD_HDF5_HL_CONDITIONAL\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -32226,7 +33610,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.10.0-alpha1, which was
+This file was extended by HDF5 $as_me 1.10.0-pre1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -32292,7 +33676,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.10.0-alpha1
+HDF5 config.status 1.10.0-pre1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -32962,6 +34346,20 @@ do
     "fortran/examples/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/examples/Makefile" ;;
     "fortran/examples/run-fortran-ex.sh") CONFIG_FILES="$CONFIG_FILES fortran/examples/run-fortran-ex.sh" ;;
     "fortran/examples/testh5fc.sh") CONFIG_FILES="$CONFIG_FILES fortran/examples/testh5fc.sh" ;;
+    "java/Makefile") CONFIG_FILES="$CONFIG_FILES java/Makefile" ;;
+    "java/src/Makefile") CONFIG_FILES="$CONFIG_FILES java/src/Makefile" ;;
+    "java/src/jni/Makefile") CONFIG_FILES="$CONFIG_FILES java/src/jni/Makefile" ;;
+    "java/test/Makefile") CONFIG_FILES="$CONFIG_FILES java/test/Makefile" ;;
+    "java/test/junit.sh") CONFIG_FILES="$CONFIG_FILES java/test/junit.sh" ;;
+    "java/examples/Makefile") CONFIG_FILES="$CONFIG_FILES java/examples/Makefile" ;;
+    "java/examples/intro/Makefile") CONFIG_FILES="$CONFIG_FILES java/examples/intro/Makefile" ;;
+    "java/examples/intro/runExample.sh") CONFIG_FILES="$CONFIG_FILES java/examples/intro/runExample.sh" ;;
+    "java/examples/datasets/Makefile") CONFIG_FILES="$CONFIG_FILES java/examples/datasets/Makefile" ;;
+    "java/examples/datasets/runExample.sh") CONFIG_FILES="$CONFIG_FILES java/examples/datasets/runExample.sh" ;;
+    "java/examples/datatypes/Makefile") CONFIG_FILES="$CONFIG_FILES java/examples/datatypes/Makefile" ;;
+    "java/examples/datatypes/runExample.sh") CONFIG_FILES="$CONFIG_FILES java/examples/datatypes/runExample.sh" ;;
+    "java/examples/groups/Makefile") CONFIG_FILES="$CONFIG_FILES java/examples/groups/Makefile" ;;
+    "java/examples/groups/runExample.sh") CONFIG_FILES="$CONFIG_FILES java/examples/groups/runExample.sh" ;;
     "hl/Makefile") CONFIG_FILES="$CONFIG_FILES hl/Makefile" ;;
     "hl/src/Makefile") CONFIG_FILES="$CONFIG_FILES hl/src/Makefile" ;;
     "hl/test/Makefile") CONFIG_FILES="$CONFIG_FILES hl/test/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 52c77e5..21edef5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ AC_PREREQ([2.69])
 ## NOTE: Do not forget to change the version number here when we do a
 ## release!!!
 ##
-AC_INIT([HDF5], [1.10.0-alpha1], [help at hdfgroup.org])
+AC_INIT([HDF5], [1.10.0-pre1], [help at hdfgroup.org])
 
 AC_CONFIG_SRCDIR([src/H5.c])
 AC_CONFIG_HEADERS([src/H5config.h])
@@ -103,6 +103,7 @@ AC_CONFIG_COMMANDS([pubconf], [
 
 AC_CANONICAL_HOST
 AC_SUBST([CPPFLAGS])
+AC_SUBST([JNIFLAGS])
 
 ## H5_CFLAGS (and company) are for CFLAGS that should be used on HDF5, but
 ## not exported to h5cc (or h5fc, etc.)
@@ -110,6 +111,9 @@ AC_SUBST([H5_CFLAGS])
 AC_SUBST([H5_CPPFLAGS])
 AC_SUBST([H5_FCFLAGS])
 AC_SUBST([H5_CXXFLAGS])
+AC_SUBST([H5_JNIFLAGS])
+AC_SUBST([H5_JAVACFLAGS])
+AC_SUBST([H5_JAVAFLAGS])
 AC_SUBST([H5_LDFLAGS])
 
 ## AM_CFLAGS (and company) are for CFLAGS that should be used on HDF5,
@@ -118,6 +122,9 @@ AC_SUBST([AM_CFLAGS])
 AC_SUBST([AM_FCFLAGS])
 AC_SUBST([AM_CXXFLAGS])
 AC_SUBST([AM_CPPFLAGS])
+AC_SUBST([AM_JNIFLAGS])
+AC_SUBST([AM_JAVACFLAGS])
+AC_SUBST([AM_JAVAFLAGS])
 AC_SUBST([AM_LDFLAGS])
 
 ## Make sure flags are initialized.
@@ -125,11 +132,17 @@ AM_CFLAGS="${AM_CFLAGS}"
 AM_CXXFLAGS="${AM_CXXFLAGS}"
 AM_FCFLAGS="${AM_FCFLAGS}"
 AM_CPPFLAGS="${AM_CPPFLAGS}"
+AM_JNIFLAGS="${AM_JNIFLAGS}"
+AM_JAVACFLAGS="${AM_JAVACFLAGS}"
+AM_JAVAFLAGS="${AM_JAVAFLAGS}"
 AM_LDFLAGS="${AM_LDFLAGS}"
 CFLAGS="${CFLAGS}"
 CXXFLAGS="${CXXFLAGS}"
 FCFLAGS="${FCFLAGS}"
 CPPFLAGS="${CPPFLAGS}"
+JNIFLAGS="${JNIFLAGS}"
+JAVACFLAGS="${JAVACFLAGS}"
+JAVAFLAGS="${JAVAFLAGS}"
 LDFLAGS="${LDFLAGS}"
 
 ## Configure may need to alter any of the *FLAGS variables in order for
@@ -138,6 +151,8 @@ LDFLAGS="${LDFLAGS}"
 saved_user_CFLAGS="$CFLAGS"
 saved_user_CXXFLAGS="$CXXFLAGS"
 saved_user_FCFLAGS="$FCFLAGS"
+saved_user_JAVACFLAGS="$JAVACFLAGS"
+saved_user_JAVAFLAGS="$JAVAFLAGS"
 saved_user_LDFLAGS="$LDFLAGS"
 saved_user_CPPFLAGS="$CPPFLAGS"
 
@@ -154,46 +169,11 @@ AC_MSG_CHECKING([shell variables initial values])
 set >&AS_MESSAGE_LOG_FD
 AC_MSG_RESULT([done])
 
-## Define all symbol variables used for configure summary.
-## EXTERNAL_FILTERS equals all external filters. Default none.
-## MPE: whether MPE option is enabled. Default no.
-## STATIC_EXEC: whether static-exec is enabled. Default no.
-## HDF_FORTRAN: whether Fortran is enabled. Default no.
-## FC: Fortran compiler.
-## HDF_CXX: whether C++ is enabled. Default no.
-## CXX: C++ compiler.
-## HDF5_HL: whether high-level library is enabled. Default is yes.
-## INSTRUMENT: whether INSTRUMENT is enabled. No default set here.
-## CODESTACK: whether CODESTACK is enabled. Default no.
-## HAVE_DMALLOC: whether system has dmalloc support. Default no.
-## HAVE_FLOAT128: whether system has Quad-Precision Math Library. Default no.
-## DIRECT_VFD: whether DIRECT_VFD is enabled. Default no.
-## THREADSAFE: whether THREADSAFE is enabled. Default no.
-## STATIC_SHARED: whether static and/or shared libraries are requested.
-## enable_shared: whether shared lib is enabled.
-## enable_static: whether static lib is enabled.
-## UNAME_INFO: System information.
-
-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([FC]) HDF_FORTRAN=no
-AC_SUBST([HDF_CXX]) HDF_CXX=no
-AC_SUBST([CXX]) HDF_CXX=no
-AC_SUBST([HDF5_HL]) HDF5_HL=yes
-AC_SUBST([INSTRUMENT])
-AC_SUBST([CODESTACK]) CODESTACK=no
-AC_SUBST([HAVE_DMALLOC]) HAVE_DMALLOC=no
-AC_SUBST([DIRECT_VFD]) DIRECT_VFD=no
-AC_SUBST([THREADSAFE]) THREADSAFE=no
-AC_SUBST([STATIC_SHARED])
-AC_SUBST([enable_shared])
-AC_SUBST([enable_static])
-AC_SUBST([UNAME_INFO]) UNAME_INFO=`uname -a`
-AC_SUBST([PAC_C_MAX_REAL_PRECISION])
-AC_SUBST([Fortran_COMPILER_ID])
-Fortran_COMPILER_ID=none
+## ----------------------------------------------------------------------
+## Save system information for the library settings file.
+##
+AC_SUBST([UNAME_INFO])
+UNAME_INFO=`uname -a`
 
 ## ----------------------------------------------------------------------
 ## Some platforms have broken basename, and/or xargs programs. Check
@@ -237,13 +217,13 @@ fi
 ## turning on debug or profiling flags for the compiler.  The search order
 ## is:
 ##
-##	CPU-VENDOR-OS
-##	VENDOR-OS
-##	CPU-OS
-##	CPU-VENDOR
-##	OS
-##	VENDOR
-##	CPU
+##    CPU-VENDOR-OS
+##    VENDOR-OS
+##    CPU-OS
+##    CPU-VENDOR
+##    OS
+##    VENDOR
+##    CPU
 ##
 ## If the `OS' ends with a version number then remove it. For instance,
 ## `freebsd3.1' would become `freebsd'
@@ -305,11 +285,67 @@ while test -n "$hname"; do
 done
 
 ## ----------------------------------------------------------------------
+## Determine build mode (debug, production, clean).
+## This has to be done early since the build mode is referred to
+## frequently.
+##
+AC_MSG_CHECKING([build mode])
+AC_ARG_ENABLE([build-mode],
+              [AS_HELP_STRING([--enable-build-mode=(debug|production|clean)],
+                              [Sets the build mode. Debug turns on symbols, API
+                               tracing, asserts, and debug optimization,
+                               as well as several other minor configure options
+                               that aid in debugging.
+                               Production turns high optimizations on.
+                               Clean turns nothing on and disables optimization
+                               (i.e.: a 'clean slate' configuration).
+                               All these settings can be overridden by using
+                               specific configure flags.
+                               [default=debug]
+                               ])],
+              [BUILD_MODE=$enableval])
+
+## Set the default
+## Depends on branch, set via script at branch creation time
+if test "X-$BUILD_MODE" = X- ; then
+    BUILD_MODE=debug
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([BUILD_MODE])
+
+case "X-$BUILD_MODE" in
+  X-clean)
+    AC_MSG_RESULT([clean])
+    ;;
+  X-debug)
+    AC_DEFINE([DEBUG_BUILD], [1], [Define if this is a debug build.])
+    H5_CFLAGS="$H5_CFLAGS $DEBUG_CFLAGS"
+    H5_CPPFLAGS="$H5_CPPFLAGS $DEBUG_CPPFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_FCFLAGS"
+    AC_MSG_RESULT([debug])
+    ;;
+  X-production)
+    H5_CFLAGS="$H5_CFLAGS $PROD_CFLAGS"
+    H5_CPPFLAGS="$H5_CPPFLAGS $PROD_CPPFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
+    AC_MSG_RESULT([production])
+    ;;
+  *)
+    AC_MSG_ERROR([Unrecognized build mode: $BUILD_MODE. Use debug, production, or clean.])
+esac
+
+## ----------------------------------------------------------------------
 ## Some built-in configure checks can only see CFLAGS (not AM_CFLAGS), so
 ## we need to add this in so configure works as intended. We will need to
 ## reset this value at the end of configure, to preserve the user's settings.
 CFLAGS="${AM_CFLAGS} ${CFLAGS}"
 FCFLAGS="${AM_FCFLAGS} ${FCFLAGS}"
+JAVACFLAGS="${AM_JAVACFLAGS} ${JAVACFLAGS}"
+JAVAFLAGS="${AM_JAVAFLAGS} ${JAVAFLAGS}"
 CXXFLAGS="${AM_CXXFLAGS} ${CXXFLAGS}"
 CPPFLAGS="${AM_CPPFLAGS} ${CPPFLAGS}"
 LDFLAGS="${AM_LDFLAGS} ${LDFLAGS}"
@@ -376,7 +412,9 @@ AC_CHECK_SIZEOF([float])
 AC_CHECK_SIZEOF([double])
 AC_CHECK_SIZEOF([long double])
 
+## ----------------------------------------------------------------------
 ## Check for non-standard extenstion __FLOAT128
+##
 HAVE_FLOAT128=0
 HAVE_QUADMATH=0
 FLT128_DIG=0
@@ -387,6 +425,8 @@ AC_CHECK_SIZEOF([_Quad])
 AC_CHECK_HEADERS([quadmath.h], [HAVE_QUADMATH=1], [])
 PAC_FC_LDBL_DIG
 
+AC_SUBST([PAC_C_MAX_REAL_PRECISION])
+
 if test "$ac_cv_sizeof___float128" != 0 && test "$FLT128_DIG" != 0 ; then
   AC_DEFINE([HAVE_FLOAT128], [1], [Determine if __float128 is available])
   PAC_C_MAX_REAL_PRECISION=$FLT128_DIG
@@ -395,9 +435,17 @@ else
 fi
 AC_DEFINE_UNQUOTED([PAC_C_MAX_REAL_PRECISION], $PAC_C_MAX_REAL_PRECISION, [Determine the maximum decimal precision in C])
 AC_MSG_RESULT([$PAC_C_MAX_REAL_PRECISION])
+
 ## ----------------------------------------------------------------------
 ## Check if they would like the Fortran interface compiled
 ##
+
+## This needs to be exposed for the library info file even if Fortran is disabled.
+AC_SUBST([HDF_FORTRAN])
+
+## Default is no Fortran
+HDF_FORTRAN=no
+
 AC_SUBST([HDF5_INTERFACES]) HDF5_INTERFACES=""
 AC_MSG_CHECKING([if Fortran interface enabled])
 AC_ARG_ENABLE([fortran],
@@ -413,14 +461,14 @@ fi
 
 if test "X$HDF_FORTRAN" = "Xyes"; then
 
-## We will output an include file for Fortran, H5config_f.inc which 
-## contains various configure definitions used by the Fortran Library. 
-## Prepend H5_ to all macro names. This avoids name conflict between HDF5 macro 
+## We will output an include file for Fortran, H5config_f.inc which
+## contains various configure definitions used by the Fortran Library.
+## Prepend H5_ to all macro names. This avoids name conflict between HDF5 macro
 ## names and those generated by another software package that uses the HDF5 library.
-  AC_CONFIG_HEADERS([fortran/src/H5config_f.inc], 
+  AC_CONFIG_HEADERS([fortran/src/H5config_f.inc],
     [cat fortran/src/H5config_f.inc | sed '1d;s%^/\* \(.*\) \*/%\1%;s/#define /#define H5_/;s/#undef /#undef H5_/' >fortran/src/H5config_f.inc.tmp; mv -f fortran/src/H5config_f.inc.tmp fortran/src/H5config_f.inc])
 
-  AC_SUBST([FC]) HDF_FORTRAN=yes
+  AC_SUBST([FC])
 
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
@@ -456,7 +504,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   ## Checking if the compiler supports the required Fortran 2003 features and
   ## stopping if it does not.
   PAC_PROG_FC_HAVE_F2003_REQUIREMENTS
- 
+
   if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
     AC_MSG_ERROR([Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran])
   fi
@@ -472,7 +520,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
 
   ## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
   PAC_PROG_FC_C_SIZEOF
-	
+
   ## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
   PAC_PROG_FC_STORAGE_SIZE
 
@@ -481,12 +529,12 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
     FC_SIZEOF_A="STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
     FC_SIZEOF_B="STORAGE_SIZE(b, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
     FC_SIZEOF_C="STORAGE_SIZE(c, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
-  else 
+  else
     if test "X$HAVE_SIZEOF_FORTRAN" = "Xyes";then
       FC_SIZEOF_A="SIZEOF(a)"
       FC_SIZEOF_B="SIZEOF(b)"
       FC_SIZEOF_C="SIZEOF(c)"
-    else	
+    else
       ## If neither intrinsic functions SIZEOF or STORAGE_SIZE is available then stop configure with an error
       AC_MSG_ERROR([Fortran compiler requires either intrinsic functions SIZEOF or STORAGE_SIZE])
     fi
@@ -496,7 +544,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   PAC_PROG_FC_ISO_FORTRAN_ENV
   ## Check KIND and size of native integer
   PAC_FC_NATIVE_INTEGER
- 
+
   ## Find all available KINDs
   PAC_FC_AVAIL_KINDS
   ## Find all sizeofs for available KINDs
@@ -507,7 +555,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   AC_SUBST([PAC_FC_MAX_REAL_PRECISION])
   AC_SUBST([PAC_FC_ALL_INTEGER_KINDS])
   AC_SUBST([PAC_FC_ALL_REAL_KINDS_SIZEOF])
-  AC_SUBST([PAC_FC_ALL_INTEGER_KINDS_SIZEOF])  
+  AC_SUBST([PAC_FC_ALL_INTEGER_KINDS_SIZEOF])
   AC_SUBST([PAC_FORTRAN_NATIVE_INTEGER_KIND])
   AC_SUBST([PAC_FORTRAN_NATIVE_INTEGER_SIZEOF])
   AC_SUBST([PAC_FORTRAN_NATIVE_REAL_KIND])
@@ -519,15 +567,17 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   AC_SUBST([FORTRAN_C_LONG_DOUBLE_IS_UNIQUE])
   AC_SUBST([FORTRAN_SIZEOF_LONG_DOUBLE])
   AC_SUBST([H5CONFIG_F_NUM_RKIND])
-  AC_SUBST([H5CONFIG_F_RKIND])	
-  AC_SUBST([H5CONFIG_F_RKIND_SIZEOF])	
+  AC_SUBST([H5CONFIG_F_RKIND])
+  AC_SUBST([H5CONFIG_F_RKIND_SIZEOF])
   AC_SUBST([H5CONFIG_F_NUM_IKIND])
   AC_SUBST([H5CONFIG_F_IKIND])
+  AC_SUBST([Fortran_COMPILER_ID])
+  Fortran_COMPILER_ID=none
   AC_DEFINE_UNQUOTED([Fortran_COMPILER_ID], $Fortran_COMPILER_ID, [Define Fortran compiler ID])
 
   ## Setting definition if there is a 16 byte fortran integer
   if `echo $PAC_FC_ALL_INTEGER_KINDS_SIZEOF | grep '16' >/dev/null`; then
-    HAVE_Fortran_INTEGER_SIZEOF_16="1" 	
+    HAVE_Fortran_INTEGER_SIZEOF_16="1"
     AC_DEFINE([HAVE_Fortran_INTEGER_SIZEOF_16], [1], [Determine if INTEGER*16 is available])
   else
     HAVE_Fortran_INTEGER_SIZEOF_16="0"
@@ -541,7 +591,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   if  test "X$HAVE_C_SIZEOF_FORTRAN" = "Xyes"; then
     AC_DEFINE([FORTRAN_HAVE_C_SIZEOF], [1], [Define if we have Fortran intrinsic C_SIZEOF])
   fi
-	
+
   if  test "X$HAVE_SIZEOF_FORTRAN" = "Xyes"; then
     AC_DEFINE([FORTRAN_HAVE_SIZEOF], [1], [Define if we have Fortran intrinsic SIZEOF])
   fi
@@ -549,9 +599,9 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   ## See if C_LONG_DOUBLE is available
   PAC_PROG_FC_HAVE_C_LONG_DOUBLE
 
-  FORTRAN_HAVE_C_LONG_DOUBLE="0" 
+  FORTRAN_HAVE_C_LONG_DOUBLE="0"
   if test "X$HAVE_C_LONG_DOUBLE_FORTRAN" = "Xyes"; then
-    FORTRAN_HAVE_C_LONG_DOUBLE="1" 
+    FORTRAN_HAVE_C_LONG_DOUBLE="1"
     AC_DEFINE([FORTRAN_HAVE_C_LONG_DOUBLE], [1], [Define if we have Fortran C_LONG_DOUBLE])
   fi
 
@@ -566,7 +616,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
       FORTRAN_C_LONG_DOUBLE_IS_UNIQUE="0"
     fi
   fi
-  
+
   FORTRAN_SIZEOF_LONG_DOUBLE=${ac_cv_sizeof_long_double}
   AC_DEFINE_UNQUOTED([FORTRAN_SIZEOF_LONG_DOUBLE], ["${ac_cv_sizeof_long_double}"], [Determine the size of C long double])
 
@@ -577,7 +627,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
 
   dnl remove the invalid kind from the list
   if test "$ac_cv_sizeof___float128" != 0;then
-    if test "$ac_cv_sizeof___float128" != "$max_real_fortran_sizeof" && 
+    if test "$ac_cv_sizeof___float128" != "$max_real_fortran_sizeof" &&
        test "${ac_cv_sizeof_long_double}" != "$max_real_fortran_sizeof" &&
        dnl account for the fact that the C compiler can have 16-byte __float128 and the Fortran compiler only has 8-byte doubles,
        dnl so we don't want to remove the 8-byte Fortran doubles. This is sometimes the case if different C and Fortran vendors
@@ -592,7 +642,7 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
     fi
   fi
   AC_MSG_CHECKING([for Fortran interoperable KINDS with C])
-  AC_MSG_RESULT([$PAC_FC_ALL_REAL_KINDS])	
+  AC_MSG_RESULT([$PAC_FC_ALL_REAL_KINDS])
 
   dnl count the number of real kinds
   H5CONFIG_F_NUM_RKIND="INTEGER, PARAMETER :: num_rkinds = `echo \"[$]PAC_FC_ALL_REAL_KINDS\" |  tr -d -c ',\n' | awk '{ print length + 1; }'`"
@@ -612,11 +662,17 @@ fi
 ## ----------------------------------------------------------------------
 ## Check if they would like the C++ interface compiled
 ##
+## This needs to be exposed for the library info file even if C++ is disabled.
+AC_SUBST([HDF_CXX])
+
+## Default is no C++
+HDF_CXX=no
+
 ## We need to check for a C++ compiler unconditionally, since
 ## AC_PROG_CXX defines some macros that Automake 1.9.x uses and will
 ## miss even if c++ is not enabled.
-  AC_PROG_CXX
-  AC_PROG_CXXCPP	## this is checked for when AC_HEADER_STDC is done
+AC_PROG_CXX
+AC_PROG_CXXCPP    ## this is checked for when AC_HEADER_STDC is done
 
 AC_MSG_CHECKING([if c++ interface enabled])
 
@@ -629,19 +685,22 @@ if test "X$HDF_CXX" = "Xyes"; then
   echo "yes"
   HDF5_INTERFACES="$HDF5_INTERFACES c++"
 
+  ## Expose the compiler for *.in files
+  AC_SUBST([CXX])
+
   ## Change to the C++ language
   AC_LANG_PUSH(C++)
 
-  # Checking if C++ needs old style header files in includes
+  ## Checking if C++ needs old style header files in includes
   PAC_PROG_CXX_HEADERS
 
-  # Checking if C++ can handle namespaces
+  ## Checking if C++ can handle namespaces
   PAC_PROG_CXX_NAMESPACE
 
-  # Checking if C++ has offsetof extension
+  ## Checking if C++ has offsetof extension
   PAC_PROG_CXX_OFFSETOF
 
-  # if C++ can handle static cast
+  ## if C++ can handle static cast
   PAC_PROG_CXX_STATIC_CAST
 
 else
@@ -657,23 +716,41 @@ AC_LANG_POP(C++)
 ## Check if they would like the High Level library  compiled
 ##
 
-AC_SUBST(HL) HL=""
-## name of fortran folder inside "hl", if FORTRAN compile is requested
-AC_SUBST(HL_FOR) HL_FOR=""
-AC_MSG_CHECKING([if high level library is enabled])
+## This needs to be exposed for the library info file even if the HL
+## library is disabled.
+AC_SUBST([HDF5_HL])
+
+## The high-level library is enabled unless the build mode is clean.
+if test "X-$BUILD_MODE" = "X-clean" ; then
+  HDF5_HL=no
+else
+  HDF5_HL=yes
+fi
+
+## high-level library directories (set when needed, blank until then)
+##
+## main high-level library
+AC_SUBST(HL)
+HL=""
+## Fortran high-level library
+AC_SUBST(HL_FOR)
+HL_FOR=""
+
+AC_MSG_CHECKING([if the high-level library is enabled])
 AC_ARG_ENABLE([hl],
      [AS_HELP_STRING([--enable-hl],
-                     [Enable the high level library [default=yes]])],
-     [HDF5_HL=$enableval],
-     [HDF5_HL=yes])
+                     [Enable the high-level library.
+                     [default=yes (unless build mode = clean)]
+                     ])],
+     [HDF5_HL=$enableval])
 
-if test "X$HDF5_HL" = "Xyes"; then
- echo "yes"
+if test "X-$HDF5_HL" = "X-yes"; then
+ AC_MSG_RESULT([yes])
  HL="hl"
  AC_DEFINE([INCLUDE_HL], [1],
-           [Define if HDF5's high-level library headers should be included in hdf5.h])
+           [Define if the high-level library headers should be included in hdf5.h])
 else
- echo "no"
+  AC_MSG_RESULT([no])
 fi
 
 
@@ -696,7 +773,8 @@ AC_PROG_INSTALL
 
 
 ## ----------------------------------------------------------------------
-## Set up ${TR} which is used to process DEBUG_PKG.
+## Set up ${TR} which is used to process the package list for extra
+## debugging output in the C library.
 
 AC_PATH_PROG([TR], [tr])
 
@@ -727,36 +805,36 @@ fi
 ## The following variables are used to distinguish between building a
 ## serial and parallel library.
 ##
-##    HAVE_PARALLEL	-- defined in H5config.h if we are building
-##			   a parallel library even if configure wasn't
-##			   able to find some header file or library that
-##			   might be required. This is defined if the
-##			   user explicitly states
-##			   that a parallel library is being built by supplying
-##			   the `--enable-parallel' configure switch.
-##
-##    PARALLEL		-- This variable is set to a non-null value if
-##			   we're building a parallel version of the library.
-##
-##    RUNSERIAL	        -- This is a command which will be prepended to
-##			   the executable name to run the executable using
-##			   a single process. For serial versions of the
-##			   library this will normally be empty. For parallel
-##			   versions it might be something like `mpiexec -n 1'.
-##			   The value of this variable is substituted in *.in
-##			   files.
-##
-##    RUNPARALLEL	-- This is a command which will be prepended to
-##			   the executable name to run the executable on
-##			   multiple processors. For the serial library the
-##			   value will normally be the empty string. For
-##			   parallel library it should be something like
-##			   "mpiexec -n \$\${NPROCS:=6}" where NPROCS will
-##			   eventually contain the number of processors on which
-##			   to run the executable (the double dollarsigns are to
-##			   protect the expansion until make executes the
-##			   command).  The value of this variable is
-##			   substituted in *.in files.
+##    HAVE_PARALLEL    -- defined in H5config.h if we are building
+##               a parallel library even if configure wasn't
+##               able to find some header file or library that
+##               might be required. This is defined if the
+##               user explicitly states
+##               that a parallel library is being built by supplying
+##               the `--enable-parallel' configure switch.
+##
+##    PARALLEL        -- This variable is set to a non-null value if
+##               we're building a parallel version of the library.
+##
+##    RUNSERIAL            -- This is a command which will be prepended to
+##               the executable name to run the executable using
+##               a single process. For serial versions of the
+##               library this will normally be empty. For parallel
+##               versions it might be something like `mpiexec -n 1'.
+##               The value of this variable is substituted in *.in
+##               files.
+##
+##    RUNPARALLEL    -- This is a command which will be prepended to
+##               the executable name to run the executable on
+##               multiple processors. For the serial library the
+##               value will normally be the empty string. For
+##               parallel library it should be something like
+##               "mpiexec -n \$\${NPROCS:=6}" where NPROCS will
+##               eventually contain the number of processors on which
+##               to run the executable (the double dollarsigns are to
+##               protect the expansion until make executes the
+##               command).  The value of this variable is
+##               substituted in *.in files.
 ##
 AC_SUBST([PARALLEL])
 AC_SUBST([RUNSERIAL])
@@ -777,6 +855,62 @@ case "`uname`" in
 esac
 
 ## ----------------------------------------------------------------------
+## Check if they would like the Java native interface (JNI) compiled
+##
+
+## This needs to be exposed for the library info file even if JAVA is disabled.
+AC_SUBST([HDF_JAVA])
+
+## Default is no JAVA
+HDF_JAVA=no
+
+AC_SUBST([H5_CLASSPATH]) H5_CLASSPATH=""
+AC_MSG_CHECKING([if Java JNI interface enabled])
+
+AC_ARG_ENABLE([java],
+              [AS_HELP_STRING([--enable-java],
+                              [Compile the Java JNI interface [default=no]])],
+              [HDF_JAVA=$enableval])
+
+if test "X$HDF_JAVA" = "Xyes"; then
+  if test "X${enable_shared}" != "Xno"; then
+    echo "yes"
+    if test "X$CLASSPATH" = "X"; then
+      H5_CLASSPATH=".:$srcdir/java/lib"
+    else
+      H5_CLASSPATH=".:$CLASSPATH:$srcdir/java/lib"
+    fi
+    ## Checks for programs.
+    AX_JAVA_OPTIONS
+    H5_JAVACFLAGS=$JAVACFLAGS
+    H5_JAVAFLAGS=$JAVAFLAGS
+    AX_PROG_JAVAC
+    AX_PROG_JAVA
+    AX_PROG_JAR
+    AX_PROG_JAVADOC
+    ## Find the include directories needed for building JNI code
+    AX_JNI_INCLUDE_DIR()
+    for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
+    do
+      JNIFLAGS="$JNIFLAGS -I$JNI_INCLUDE_DIR"
+    done
+    ## Find junit for testing the JNI code
+    AX_CHECK_CLASSPATH()
+    CLASSPATH_ENV=$H5_CLASSPATH
+    AX_CHECK_JUNIT()
+    AX_CHECK_JAVA_HOME
+
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_ERROR([Java requires shared libraries to be built])
+    HDF_JAVA="no"
+    AC_MSG_RESULT([no])
+  fi
+else
+  AC_MSG_RESULT([no])
+fi
+
+## ----------------------------------------------------------------------
 ## Fortran libraries are not currently supported on Mac. Disable them.
 ## (this is overridable with --enable-unsupported).
 ##
@@ -832,6 +966,11 @@ LT_INIT([dlopen,win32-dll])
 ##   This check needs to occur after libtool is initialized because
 ##   we check a libtool cache value and may issue a warning based
 ##   on its result.
+AC_SUBST([STATIC_EXEC])
+
+## Default is no
+STATIC_EXEC=no
+
 AC_MSG_CHECKING([if we should install only statically linked executables])
 AC_ARG_ENABLE([static_exec],
               [AS_HELP_STRING([--enable-static-exec],
@@ -843,8 +982,8 @@ if test "X$STATIC_EXEC" = "Xyes"; then
   echo "yes"
   ## Issue a warning if -static flag is not supported.
   if test "X$lt_cv_prog_compiler_static_works" = "Xno"; then
-      echo "    warning: -static flag not supported on this system; executable won't statically link shared system libraries."
-      LT_STATIC_EXEC=""
+    echo "    warning: -static flag not supported on this system; executable won't statically link shared system libraries."
+    LT_STATIC_EXEC=""
   else
     LT_STATIC_EXEC="-all-static"
   fi
@@ -893,50 +1032,6 @@ case "X-$RPATH" in
 esac
 
 ## ----------------------------------------------------------------------
-## Production flags?  Save the value in $CONFIG_MODE so we have it for
-## the record.
-##
-AC_MSG_CHECKING([for production mode])
-AC_ARG_ENABLE([production],
-              [AS_HELP_STRING([--enable-production],
-                              [Determines how to run the compiler.])])
-
-case "X-$enable_production" in
-  X-yes)
-    enable_production="yes"
-    AC_MSG_RESULT([production])
-    CONFIG_MODE=production
-    H5_CFLAGS="$H5_CFLAGS $PROD_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $PROD_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $PROD_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $PROD_FCFLAGS"
-    ;;
-  X-|X-no)
-    enable_production="no"
-    AC_MSG_RESULT([development])
-    CONFIG_MODE=development
-    H5_CFLAGS="$H5_CFLAGS $DEBUG_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $DEBUG_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_FCFLAGS"
-    ;;
-  X-pg|X-profile)
-    enable_production="profile"
-    AC_MSG_RESULT([profile])
-    CONFIG_MODE=profile
-    H5_CFLAGS="$H5_CFLAGS $PROFILE_CFLAGS"
-    H5_CPPFLAGS="$H5_CPPFLAGS $PROFILE_CPPFLAGS"
-    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILE_CXXFLAGS"
-    H5_FCFLAGS="$H5_FCFLAGS $PROFILE_FCFLAGS"
-    ;;
-  *)
-    enable_production="user-defined"
-    AC_MSG_RESULT([user-defined])
-    CONFIG_MODE="$enableval"
-    ;;
-esac
-
-## ----------------------------------------------------------------------
 ## Check for system libraries. "dl" stands for dynamically loaded library
 ##
 AC_CHECK_LIB([m], [ceil])
@@ -1027,10 +1122,6 @@ fi
 ##
 case "$host_cpu-$host_vendor-$host_os" in
   *linux*)
-    ## Make available various LFS-related routines using the following
-    ## _LARGEFILE*_SOURCE macros.
-    AM_CPPFLAGS="-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $AM_CPPFLAGS"
-
     ## Add POSIX support on Linux systems, so <features.h> defines
     ## __USE_POSIX, which is required to get the prototype for fdopen
     ## defined correctly in <stdio.h>.
@@ -1065,23 +1156,6 @@ esac
 CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
 CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <sys/types.h>
-]],
-    [[off64_t n = 0;]])],
-    [AC_CHECK_FUNCS([lseek64 fseeko64 ftello64 ftruncate64])],
-    [AC_MSG_RESULT([skipping test for lseek64, fseeko64 , ftello64, ftruncate64 because off64_t is not defined])])
-
-AC_CHECK_FUNCS([fseeko ftello])
-
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <sys/types.h>
-#include <sys/stat.h>
-]],
-[[struct stat64 sb;]])],
-[AC_CHECK_FUNCS([stat64 fstat64])],
-[AC_MSG_RESULT([skipping test for stat64 and fstat64])])
-
 ## Checkpoint the cache
 AC_CACHE_SAVE
 
@@ -1132,7 +1206,6 @@ cat >>confdefs.h <<\EOF
 #include <sys/types.h> /*for off_t definition*/
 EOF
 AC_CHECK_SIZEOF([off_t])
-AC_CHECK_SIZEOF([off64_t])
 
 if test "X$C9x" = "Xyes"; then
   cat >>confdefs.h <<\EOF
@@ -1185,6 +1258,11 @@ AC_ARG_WITH([fnord],
 ## command-line switch. The value is an include path and/or a library path.
 ## If the library path is specified then it must be preceded by a comma.
 ##
+AC_SUBST([HAVE_DMALLOC])
+
+## Default is not present
+HAVE_DMALLOC=no
+
 AC_ARG_WITH([dmalloc],
             [AS_HELP_STRING([--with-dmalloc=DIR],
                             [Use dmalloc memory debugging aid [default=no]])],,
@@ -1249,6 +1327,14 @@ case $withval in
 esac
 
 ## ----------------------------------------------------------------------
+## Make the external filters list available to *.in files
+## At this point it's unset (no external filters by default) but it
+## will be filled in during the deflate (zlib) and szip processing
+## below.
+##
+AC_SUBST([EXTERNAL_FILTERS])
+
+## ----------------------------------------------------------------------
 ## Is the GNU zlib present? It has a header file `zlib.h' and a library
 ## `-lz' and their locations might be specified with the `--with-zlib'
 ## command-line switch. The value is an include path and/or a library path.
@@ -1338,7 +1424,7 @@ if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2"
   if test "X$EXTERNAL_FILTERS" != "X"; then
     EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
   fi
-  EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate(zlib)"
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate(zlib)"
 fi
 
 
@@ -1461,13 +1547,13 @@ if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
     if test "X$EXTERNAL_FILTERS" != "X"; then
       EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
     fi
-    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(encoder)"
+      EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(encoder)"
   fi
   if test ${hdf5_cv_szlib_can_encode} = "no"; then
     if test "X$EXTERNAL_FILTERS" != "X"; then
       EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
     fi
-    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(no encoder)"
+      EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip(no encoder)"
   fi
 fi
 
@@ -1480,6 +1566,11 @@ AC_CACHE_SAVE
 ## Enable thread-safe version of library.  It requires Pthreads support
 ## on POSIX systems.
 ##
+AC_SUBST([THREADSAFE])
+
+## Default is no thread-safety
+THREADSAFE=no
+
 AC_MSG_CHECKING([for thread safe support])
 AC_ARG_ENABLE([threadsafe],
               [AS_HELP_STRING([--enable-threadsafe],
@@ -1487,7 +1578,7 @@ AC_ARG_ENABLE([threadsafe],
                               [default=no]])],
               [THREADSAFE=$enableval])
 
-## NOTE: The high-level, C++, and Fortran interfaces are not compatible
+## The high-level, C++, and Fortran interfaces are not compatible
 ## with the thread-safety option because the lock is not hoisted
 ## into the higher-level API calls.
 
@@ -1807,7 +1898,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
                         double d;
                     } u;
                 } di_struct_t;
-                di_struct_t x = {0, { .d = 0.0}}; ]])], 
+                di_struct_t x = {0, { .d = 0.0}}; ]])],
                [AC_DEFINE([HAVE_C99_DESIGNATED_INITIALIZER], [1],
                          [Define if the compiler understands C99 designated initialization of structs and unions])
                  AC_MSG_RESULT([yes])],
@@ -1840,56 +1931,289 @@ AC_MSG_RESULT([%${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u])
 AC_DEFINE_UNQUOTED([PRINTF_LL_WIDTH], ["$hdf5_cv_printf_ll"],
                    [Width for printf() for type `long long' or `__int64', use `ll'])
 
-
 ## ----------------------------------------------------------------------
-## Turn on debugging by setting compiler flags
-## This must come after the enable-production since it depends on production.
+## Deprecate old ways of determining debug/production build
+## These can probably be removed in the future (1.10.1?)
 ##
-AC_MSG_CHECKING([for debug flags])
 AC_ARG_ENABLE([debug],
-              [AS_HELP_STRING([--enable-debug=all],
-                              [Turn on debugging in all packages. One may
-                               also specify a comma-separated list of
-                               package names without the leading H5 or
-                               the word no. The default is most packages
-			       if production is disabled; no if it is enabled.
+              [AS_HELP_STRING([--enable-debug],
+               [DEPRECATED: use --enable-build-mode=debug])],
+              [DEPRECATED_DEBUG=$enableval])
+
+if test "X-$DEPRECATED_DEBUG" != "X-" ; then
+    AC_MSG_ERROR([--enable-debug is deprecated, use --enable-build-mode=debug instead.])
+fi
+
+AC_ARG_ENABLE([production],
+              [AS_HELP_STRING([--enable-production],
+               [DEPRECATED: use --enable-build-mode=production])],
+              [DEPRECATED_PRODUCTION=$enableval])
+
+if test "X-$DEPRECATED_PRODUCTION" != "X-" ; then
+    AC_MSG_ERROR([--enable-production is deprecated, use --enable-build-mode=production instead.])
+fi
+
+
+## ----------------------------------------------------------------------
+## Check if the compiler should include symbols
+##
+AC_MSG_CHECKING([enable debugging symbols])
+AC_ARG_ENABLE([symbols],
+              [AS_HELP_STRING([--enable-symbols=(yes|no|<custom>)],
+                              [Add debug symbols to the library (e.g.: build with -g).
+                               This is independent of the build mode and optimization
+                               level. The custom string allows special settings like
+                               -ggdb, etc. to be used.
+                               [default=yes if debug build, otherwise no]
                                ])],
-              [DEBUG_PKG=$enableval])
+              [SYMBOLS=$enableval])
 
-## Default to no if producton is enabled
-if test "X-$DEBUG_PKG" = X- ; then
-    if test "$enable_production" = yes ; then
-	DEBUG_PKG=no
-    else
-	DEBUG_PKG=yes
-    fi
+## Set default
+if test "X-$SYMBOLS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    SYMBOLS=yes
+  else
+    SYMBOLS=no
+  fi
 fi
 
-AC_SUBST([DEBUG_PKG])
-all_packages="ac,b,b2,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z"
-case "X-$DEBUG_PKG" in
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([SYMBOLS])
+
+case "X-$SYMBOLS" in
   X-yes)
-    DEBUG_PKG="d,e,f,g,hg,i,mm,o,p,s,t,v,z"
-##    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
-    AC_MSG_RESULT([default ($DEBUG_PKG)])
+    H5_CFLAGS="$H5_CFLAGS $SYMBOLS_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS_FCFLAGS"
+    AC_MSG_RESULT([yes])
     ;;
-  X-all)
-    DEBUG_PKG=$all_packages
-##    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
-    AC_MSG_RESULT([all ($DEBUG_PKG)])
+  X-no)
+    H5_CFLAGS="$H5_CFLAGS $NO_SYMBOLS_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $NO_SYMBOLS_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $NO_SYMBOLS_FCFLAGS"
+    AC_MSG_RESULT([no])
     ;;
-  X-no|X-none)
+  *)
+    H5_CFLAGS="$H5_CFLAGS $SYMBOLS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $SYMBOLS"
+    H5_FCFLAGS="$H5_FCFLAGS $SYMBOLS"
+    SYMBOLS="custom ($SYMBOLS)"
+    AC_MSG_RESULT([$SYMBOLS])
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the assert macro should be enabled
+##
+AC_MSG_CHECKING([enable asserts])
+AC_ARG_ENABLE([asserts],
+              [AS_HELP_STRING([--enable-asserts],
+                              [Determines whether NDEBUG is defined or not, which
+                               controls assertions.
+                               This is independent of the build mode and presence
+                               of debugging symbols.
+                               [default=yes if debug build, otherwise no]
+                               ])],
+              [ASSERTS=$enableval])
+
+## Set default
+if test "X-$ASSERTS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    ASSERTS=yes
+  else
+    ASSERTS=no
+  fi
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([ASSERTS])
+
+case "X-$ASSERTS" in
+  X-yes)
+    H5_CPPFLAGS="$H5_CPPFLAGS -UNDEBUG"
+    AC_MSG_RESULT([yes])
+    ;;
+  X-no)
+    H5_CPPFLAGS="$H5_CPPFLAGS -DNDEBUG"
+    AC_MSG_RESULT([no])
+    ;;
+  *)
+    AC_MSG_ERROR([Unrecognized value: $ASSERTS])
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the compiler should use profiling flags/settings
+##
+AC_MSG_CHECKING([profiling])
+AC_ARG_ENABLE([profiling],
+              [AS_HELP_STRING([--enable-profiling=(yes|no|<custom>)],
+                              [Enable profiling flags (e.g.: -pg).
+                               This can be set independently from the build mode.
+                               The custom setting can be used to pass alternative
+                               profiling flags (e.g.: -P for using Prof with gcc).
+                               [default=no]
+                               ])],
+              [PROFILING=$enableval])
+
+## Default is no profiling
+if test "X-$PROFILING" = X- ; then
+    PROFILING=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([PROFILING])
+
+case "X-$PROFILING" in
+  X-yes)
+    H5_CFLAGS="$H5_CFLAGS $PROFILE_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILE_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $PROFILE_FCFLAGS"
+    AC_MSG_RESULT([yes])
+    ;;
+  X-no)
+    AC_MSG_RESULT([no])
+    ;;
+  *)
+    H5_CFLAGS="$H5_CFLAGS $PROFILING"
+    H5_CXXFLAGS="$H5_CXXFLAGS $PROFILING"
+    H5_FCFLAGS="$H5_FCFLAGS $PROFILING"
+    PROFILING="custom ($PROFILING)"
+    AC_MSG_RESULT([$PROFILING])
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Check if the compiler should use a particular optimization setting
+##
+AC_MSG_CHECKING([optimization level])
+AC_ARG_ENABLE([optimization],
+              [AS_HELP_STRING([--enable-optimization=(high|debug|none|<custom>)],
+                              [Enable optimization flags/settings (e.g.: -O3).
+                               This can be set independently from the build mode.
+                               Optimizations for a given compiler can be specified
+                               at several levels: High, with aggressive optimizations
+                               turned on; debug, with optimizations that are
+                               unlikely to interfere with debugging or profiling;
+                               and none, with no optimizations at all.
+                               See the compiler-specific config/*-flags file for more
+                               details.
+                               Alternatively, optimization options can
+                               be specified directly by specifying them as a
+                               string value. These custom optimzation flags will
+                               completely replace all other optimization flags.
+                               [default depends on build mode: debug=debug,
+                                production=high, clean=none]
+                               ])],
+              [OPTIMIZATION=$enableval])
+
+## Set the default optimization level. This depends on the compiler mode.
+if test "X-$OPTIMIZATION" = X- ; then
+  case "X-$BUILD_MODE" in
+  X-debug)
+    OPTIMIZATION=debug
+    ;;
+  X-production)
+    OPTIMIZATION=high
+    ;;
+  X-clean)
+    OPTIMIZATION=none
+    ;;
+  esac
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([OPTIMIZATION])
+
+case "X-$OPTIMIZATION" in
+  X-high)
+    H5_CFLAGS="$H5_CFLAGS $HIGH_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $HIGH_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $HIGH_OPT_FCFLAGS"
+    AC_MSG_RESULT([high])
+    ;;
+  X-debug)
+    H5_CFLAGS="$H5_CFLAGS $DEBUG_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $DEBUG_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $DEBUG_OPT_FCFLAGS"
+    AC_MSG_RESULT([debug])
+    ;;
+  X-none)
+    H5_CFLAGS="$H5_CFLAGS $NO_OPT_CFLAGS"
+    H5_CXXFLAGS="$H5_CXXFLAGS $NO_OPT_CXXFLAGS"
+    H5_FCFLAGS="$H5_FCFLAGS $NO_OPT_FCFLAGS"
     AC_MSG_RESULT([none])
-    DEBUG_PKG=
-##    H5_CPPFLAGS="$H5_CPPFLAGS -DNDEBUG"
     ;;
   *)
-    AC_MSG_RESULT([$DEBUG_PKG])
+    H5_CFLAGS="$H5_CFLAGS $OPTIMIZATION"
+    H5_CXXFLAGS="$H5_CXXFLAGS $OPTIMIZATION"
+    H5_FCFLAGS="$H5_FCFLAGS $OPTIMIZATION"
+    OPTIMIZATION="custom ($OPTIMIZATION)"
+    AC_MSG_RESULT([$OPTIMIZATION])
+    ;;
+esac
+
+## ----------------------------------------------------------------------
+## Enable/disable internal package-level debugging output
+##
+AC_MSG_CHECKING([for internal debug output])
+AC_ARG_ENABLE([internal-debug],
+              [AS_HELP_STRING([--enable-internal-debug=(yes|all|no|none|<pkg list>)],
+                              [Enable extra debugging output on HDF5 library
+                               errors. One may also specify a comma-separated
+                               list of package names without the leading H5.
+                               This is independent of the build mode
+                               and is mainly of interest to HDF Group developers.
+                               Yes/all and no/none are synonymous.
+                               [default=all if debug build, otherwise none]
+                               ])],
+              [INTERNAL_DEBUG_OUTPUT=$enableval])
+
+## Set default
+if test "X-$INTERNAL_DEBUG_OUTPUT" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    INTERNAL_DEBUG_OUTPUT=all
+  else
+    INTERNAL_DEBUG_OUTPUT=none
+  fi
+fi
+
+AC_SUBST([INTERNAL_DEBUG_OUTPUT])
+
+## These are all the packages that use H5*_DEBUG.
+## There is no harm in specifying a package not in this list;
+## you'll just get an unused H5<pkg>_DEBUG symbol.
+##
+## Some packages that define debug checks or output are
+## too specialized or have huge performance hits. These
+## are not listed in the "all" packages list.
+##
+## all_packages="AC,B,B2,D,F,FA,FL,FS,HL,I,O,S,ST,T,Z"
+all_packages="AC,B2,D,F,HL,I,O,S,ST,T,Z"
+
+case "X-$INTERNAL_DEBUG_OUTPUT" in
+  X-yes|X-all)
+    INTERNAL_DEBUG_OUTPUT=$all_packages
+    DEBUG_PKG_LIST=$all_packages
+    ;;
+  X-no|X-none)
+    INTERNAL_DEBUG_OUTPUT=none
+    DEBUG_PKG_LIST=
+    ;;
+  *)
+    DEBUG_PKG_LIST=$INTERNAL_DEBUG_OUTPUT
     ;;
 esac
+AC_MSG_RESULT([$INTERNAL_DEBUG_OUTPUT])
 
-if test -n "$DEBUG_PKG"; then
-  for pkg in `echo $DEBUG_PKG | ${TR} ${as_cr_letters}"," ${as_cr_LETTERS}" "`; do
+## Define H5*_DEBUG symbols that control package output
+## NOTE: No sanity checking done here!
+if test -n "$DEBUG_PKG_LIST"; then
+  for pkg in `echo $DEBUG_PKG_LIST | ${TR} ${as_cr_letters}"," ${as_cr_LETTERS}" "`; do
     H5_CPPFLAGS="$H5_CPPFLAGS -DH5${pkg}_DEBUG"
   done
 fi
@@ -1900,20 +2224,32 @@ fi
 AC_MSG_CHECKING([whether function stack tracking is enabled])
 AC_ARG_ENABLE([codestack],
               [AS_HELP_STRING([--enable-codestack],
-                              [Enable the function stack tracing (for developer debugging).])],
+                              [Enable the function stack tracing (for developer debugging).
+                               [default=no]
+                              ])],
               [CODESTACK=$enableval])
 
+## Set the default level.
+if test "X-$CODESTACK" = X- ; then
+  CODESTACK=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([CODESTACK])
+
 case "X-$CODESTACK" in
   X-yes)
-      CODESTACK=yes
       AC_MSG_RESULT([yes])
       AC_DEFINE([HAVE_CODESTACK], [1],
                 [Define if the function stack tracing code is to be compiled in])
     ;;
-  *)
-      CODESTACK=no
+  X-no)
       AC_MSG_RESULT([no])
     ;;
+  *)
+      AC_MSG_ERROR([Unrecognized value: $CODESTACK])
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
@@ -1922,113 +2258,69 @@ esac
 AC_MSG_CHECKING([whether metadata trace file code is enabled])
 AC_ARG_ENABLE([metadata-trace-file],
               [AS_HELP_STRING([--enable-metadata-trace-file],
-                              [Enable metadata trace file collection.])],
+                              [Enable metadata trace file collection.
+                               [default=no]
+                              ])],
               [METADATATRACEFILE=$enableval])
 
+## Set the default level.
+if test "X-$METADATATRACEFILE" = X- ; then
+  METADATATRACEFILE=no
+fi
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([METADATATRACEFILE])
+
 case "X-$METADATATRACEFILE" in
   X-yes)
-      METADATATRACEFILE=yes
       AC_MSG_RESULT([yes])
       AC_DEFINE([METADATA_TRACE_FILE], [1],
                 [Define if the metadata trace file code is to be compiled in])
     ;;
-  *)
-      METADATATRACEFILE=no
+  X-no)
       AC_MSG_RESULT([no])
     ;;
+  *)
+      AC_MSG_ERROR([Unrecognized value: $METADATATRACEFILE])
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
 ## Enable tracing of the API
-## This must come after the enable-debug since it depends on debug.
 ##
-AC_SUBST([TRACE_API])
 AC_MSG_CHECKING([for API tracing]);
 AC_ARG_ENABLE([trace],
               [AS_HELP_STRING([--enable-trace],
-                              [Enable API tracing capability. Default=no
-                               if debug is disabled.])],
-              [TRACE=$enableval])
-
-## Default to no if debug is disabled
-if test "X-$TRACE" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    TRACE=no
-  else
-    TRACE=yes
-  fi
-fi
+                              [Enable HDF5 API tracing capability.
+                               [default=yes if debug build, otherwise no]
+                               ])],
+              [TRACE_API=$enableval])
 
-case "X-$TRACE" in
-  X-yes)
-    AC_MSG_RESULT([yes])
+## Set the default level.
+if test "X-$TRACE_API" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
     TRACE_API=yes
-    H5_CPPFLAGS="$H5_CPPFLAGS -DH5_DEBUG_API"
-    ;;
-  X-no|*)
-    AC_MSG_RESULT([no])
-    TRACE_API=no
-    H5_CPPFLAGS="$H5_CPPFLAGS -UH5_DEBUG_API"
-    ;;
-esac
-
-## ----------------------------------------------------------------------
-## Enable instrumenting of the library's internal operations
-## This must come after the enable-debug since it depends on debug.
-##
-AC_SUBST([INSTRUMENT_LIBRARY])
-AC_MSG_CHECKING([for instrumented library]);
-AC_ARG_ENABLE([instrument],
-              [AS_HELP_STRING([--enable-instrument],
-                              [Enable library instrumentation of optimization
-                                tracing.  Default=no if debug is disabled.])],
-              [INSTRUMENT=$enableval])
-
-## Default to no if debug is disabled
-if test "X-$INSTRUMENT" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    INSTRUMENT=no
   else
-    INSTRUMENT=yes
+    TRACE_API=no
   fi
 fi
 
-case "X-$INSTRUMENT" in
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([TRACE_API])
+
+case "X-$TRACE_API" in
   X-yes)
     AC_MSG_RESULT([yes])
-    INSTRUMENT_LIBRARY=yes
-    AC_DEFINE([HAVE_INSTRUMENTED_LIBRARY], [1],
-              [Define if library will contain instrumentation to detect correct optimization operation])
+    H5_CPPFLAGS="$H5_CPPFLAGS -DH5_DEBUG_API"
     ;;
-  X-no|*)
+  X-no)
     AC_MSG_RESULT([no])
-    INSTRUMENT_LIBRARY=no
+    H5_CPPFLAGS="$H5_CPPFLAGS -UH5_DEBUG_API"
     ;;
-esac
-
-## ----------------------------------------------------------------------
-## Check if they would like to securely clear file buffers before they are
-##     written.
-##
-AC_SUBST([CLEARFILEBUF])
-AC_MSG_CHECKING([whether to clear file buffers])
-AC_ARG_ENABLE([clear-file-buffers],
-              [AS_HELP_STRING([--enable-clear-file-buffers],
-                              [Securely clear file buffers before writing
-                              to file.  Default=yes.])],
-              [CLEARFILEBUF=$enableval])
-
-case "X-$CLEARFILEBUF" in
   *)
-      CLEARFILEBUF=yes
-      AC_MSG_RESULT([yes])
-      AC_DEFINE([CLEAR_MEMORY], [1],
-                [Define if the memory buffers being written to disk should be
-                cleared before writing.])
-    ;;
-  X-no)
-      CLEARFILEBUF=no
-      AC_MSG_RESULT([no])
+    AC_MSG_ERROR([Unrecognized value: $TRACE_API])
     ;;
 esac
 
@@ -2038,63 +2330,87 @@ esac
 ##     more scrupulous with it's memory operations.  Enabling this also
 ##     disables the library's free space manager code.
 ##
-AC_SUBST([USINGMEMCHECKER])
 AC_MSG_CHECKING([whether a memory checking tool will be used])
 AC_ARG_ENABLE([using-memchecker],
               [AS_HELP_STRING([--enable-using-memchecker],
                               [Enable this option if a memory allocation and/or
                               bounds checking tool will be used on the HDF5
                               library.  Enabling this causes the library to be
-                              more picky about it's memory operations and also
+                              more picky about its memory operations and also
                               disables the library's free space manager code.
                               This option is orthogonal to the
                               --enable-memory-alloc-sanity-check option.
-                              Default=no.])],
+                              [default=no]
+                              ])],
               [USINGMEMCHECKER=$enableval])
 
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([USINGMEMCHECKER])
+
+## Set the default level.
+if test "X-$USINGMEMCHECKER" = X- ; then
+  USINGMEMCHECKER=no
+fi
+
 case "X-$USINGMEMCHECKER" in
   X-yes)
-      USINGMEMCHECKER=yes
-      AC_MSG_RESULT([yes])
       AC_DEFINE([USING_MEMCHECKER], [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 internal free list manager code.])
+      AC_MSG_RESULT([yes])
     ;;
-  *)
-      USINGMEMCHECKER=no
+  X-no)
       AC_MSG_RESULT([no])
     ;;
+  *)
+      AC_MSG_ERROR([Unrecognized value: $USINGMEMCHECKER])
+    ;;
 esac
 
 ## ----------------------------------------------------------------------
 ## Check if they would like to enable the internal memory allocation sanity
 ##     checking code.
 ##
-##AC_SUBST([MEMORYALLOCSANITYCHECK])
-##AC_MSG_CHECKING([whether internal memory allocation sanity checking is used])
-##AC_ARG_ENABLE([memory-alloc-sanity-check],
-##              [AS_HELP_STRING([--enable-memory-alloc-sanity-check],
-##                              [Enable this option to turn on internal memory
-##                              allocation sanity checking.  This could cause
-##                              more memory use and somewhat slower allocation.
-##                              This option is orthogonal to the
-##                              --enable-using-memchecker option.
-##                              Default=no.])],
-##              [MEMORYALLOCSANITYCHECK=$enableval])
-##
-##case "X-$MEMORYALLOCSANITYCHECK" in
-##  X-yes)
-##      MEMORYALLOCSANITYCHECK=yes
-##      AC_MSG_RESULT([yes])
-##      AC_DEFINE([MEMORY_ALLOC_SANITY_CHECK], [1],
-##                [Define to enable internal memory allocation sanity checking.])
-##    ;;
-##  *)
-##      MEMORYALLOCSANITYCHECK=no
-##      AC_MSG_RESULT([no])
-##    ;;
-##esac
+AC_MSG_CHECKING([whether internal memory allocation sanity checking is used])
+AC_ARG_ENABLE([memory-alloc-sanity-check],
+              [AS_HELP_STRING([--enable-memory-alloc-sanity-check],
+                              [Enable this option to turn on internal memory
+                              allocation sanity checking.  This could cause
+                              more memory use and somewhat slower allocation.
+                              This option is orthogonal to the
+                              --enable-using-memchecker option.
+                               [default=yes if debug build, otherwise no]
+                              ])],
+              [MEMORYALLOCSANITYCHECK=$enableval])
+
+## Allow this variable to be substituted in
+## other files (src/libhdf5.settings.in, etc.)
+AC_SUBST([MEMORYALLOCSANITYCHECK])
+
+## Set default
+if test "X-$MEMORYALLOCSANITYCHECK" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    MEMORYALLOCSANITYCHECK=yes
+  else
+    MEMORYALLOCSANITYCHECK=no
+  fi
+fi
+
+case "X-$MEMORYALLOCSANITYCHECK" in
+  X-yes)
+      AC_DEFINE([MEMORY_ALLOC_SANITY_CHECK], [1],
+                [Define to enable internal memory allocation sanity checking.])
+      AC_MSG_RESULT([yes])
+    ;;
+  X-no)
+      AC_MSG_RESULT([no])
+    ;;
+  *)
+      AC_MSG_ERROR([Unrecognized value: $MEMORYALLOCSANITYCHECK])
+    ;;
+esac
 
 ## Checkpoint the cache
 AC_CACHE_SAVE
@@ -2140,11 +2456,11 @@ case "X-$enable_parallel" in
     ## Try link a simple MPI program.
     AC_MSG_CHECKING([whether a simple MPI-IO C program can be linked])
     AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]],
-                   [[ MPI_Init(0, (void *)0); 
-		      MPI_File_open(0, (void *)0, 0, 0, (void *)0);]])], 
-		   [AC_MSG_RESULT([yes])],
-	  	   [AC_MSG_RESULT([no])
-		    AC_MSG_ERROR([unable to link a simple MPI-IO C program])])
+                   [[ MPI_Init(0, (void *)0);
+            MPI_File_open(0, (void *)0, 0, 0, (void *)0);]])],
+        [AC_MSG_RESULT([yes])],
+            [AC_MSG_RESULT([no])
+            AC_MSG_ERROR([unable to link a simple MPI-IO C program])])
 
     if test "X$HDF_FORTRAN" = "Xyes"; then
       PAC_PROG_FC_MPI_CHECK
@@ -2164,8 +2480,12 @@ esac
 
 ## ----------------------------------------------------------------------
 ## Print some other parallel information and do some sanity checks.
+## Needs to be done outside of the PARALLEL block since the serial
+## build also needs to have values defined.
 ##
 AC_SUBST([ADD_PARALLEL_FILES]) ADD_PARALLEL_FILES="no"
+AC_SUBST([MPE]) MPE=no
+AC_SUBST([INSTRUMENT_LIBRARY]) INSTRUMENT_LIBRARY=no
 
 if test -n "$PARALLEL"; then
   ## The 'testpar' directory should participate in the build
@@ -2220,6 +2540,45 @@ if test -n "$PARALLEL"; then
     )
   fi
 
+  ## ----------------------------------------------------------------------
+  ## Enable instrumenting of the library's internal operations
+  ## in parallel builds.
+  ##
+
+  ## Set default
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    INSTRUMENT_LIBRARY=yes
+  else
+    INSTRUMENT_LIBRARY=no
+  fi
+
+  AC_MSG_CHECKING([for instrumented library]);
+  AC_ARG_ENABLE([instrument],
+                [AS_HELP_STRING([--enable-instrument],
+                                [Enable library instrumentation of optimization
+                                  tracing (only used with parallel builds).
+                                  [default=yes if a parallel debug build, otherwise no]
+                                ])],
+                [INSTRUMENT_LIBRARY=$enableval])
+
+  ## Allow this variable to be substituted in
+  ## other files (src/libhdf5.settings.in, etc.)
+  AC_SUBST([INSTRUMENT_LIBRARY])
+
+  case "X-$INSTRUMENT_LIBRARY" in
+    X-yes)
+      AC_DEFINE([HAVE_INSTRUMENTED_LIBRARY], [1],
+                [Define if parallel library will contain instrumentation to detect correct optimization operation])
+      AC_MSG_RESULT([yes])
+      ;;
+    X-no)
+      AC_MSG_RESULT([no])
+      ;;
+    *)
+      AC_MSG_ERROR([Unrecognized value: $INSTRUMENT_LIBRARY])
+      ;;
+  esac
+
   ## --------------------------------------------------------------------
   ## Do we want MPE instrumentation feature on?
   ##
@@ -2287,6 +2646,11 @@ fi
 ## ----------------------------------------------------------------------
 ## Check if Direct I/O driver is enabled by --enable-direct-vfd
 ##
+AC_SUBST([DIRECT_VFD])
+
+## Default is no direct VFD
+DIRECT_VFD=no
+
 AC_CACHE_VAL([hdf5_cv_direct_io],
     AC_CHECK_DECL([O_DIRECT], [hdf5_cv_direct_io=yes], [hdf5_cv_direct_io=no], [[#include <fcntl.h>]]))
 AC_CACHE_VAL([hdf5_cv_posix_memalign],
@@ -2319,6 +2683,7 @@ else
     AC_MSG_RESULT([no])
 fi
 
+## Direct VFD files are not built if not required.
 AM_CONDITIONAL([DIRECT_VFD_CONDITIONAL], [test "X$DIRECT_VFD" = "Xyes"])
 
 ## ----------------------------------------------------------------------
@@ -2366,13 +2731,13 @@ fi
 ## ----------------------------------------------------------------------
 ## Decide whether the data accuracy has higher priority during data
 ## conversions.  If not, some hard conversions will still be prefered even
-## though the data may be wrong (for example, some compilers don't 
+## though the data may be wrong (for example, some compilers don't
 ## support denormalized floating values) to maximize speed.
-## 
+##
 AC_MSG_CHECKING([whether data accuracy is guaranteed during data conversions])
 AC_ARG_ENABLE([dconv-accuracy],
               [AS_HELP_STRING([--enable-dconv-accuracy],
-                              [if data accuracy is guaranteed during 
+                              [if data accuracy is guaranteed during
                               data conversions [default=yes]])],
               [DATA_ACCURACY=$enableval], [DATA_ACCURACY=yes])
 
@@ -2588,19 +2953,19 @@ else
             unsigned long long  ull;
             unsigned char       s[16];
             int                 ret = 0;
-            
+
             if(sizeof(long double) == 16) {
-                /*make sure the long double type is the same as the failing type 
+                /*make sure the long double type is the same as the failing type
                  *which has 16 bytes in size and 11 bits of exponent.  If it is,
-                 *the bit sequence should be like below.  It's not 
-                 *a decent way to check but this info isn't available. */   
+                 *the bit sequence should be like below.  It's not
+                 *a decent way to check but this info isn't available. */
                 memcpy(s, &ld, 16);
                 if(s[0]==0x43 && s[1]==0x51 && s[2]==0xcc && s[3]==0xf3 &&
                     s[4]==0x85 && s[5]==0xeb && s[6]==0xc8 && s[7]==0xa0 &&
                     s[8]==0xbf && s[9]==0xcc && s[10]==0x2a && s[11]==0x3c) {
 
                     /*slightly adjust the bit sequence (s[8]=0xdf).  The converted
-                     *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/ 
+                     *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/
                     s[0]=0x43; s[1]=0x51; s[2]=0xcc; s[3]=0xf3;
                     s[4]=0x85; s[5]=0xeb; s[6]=0xc8; s[7]=0xa0;
                     s[8]=0xdf; s[9]=0xcc; s[10]=0x2a; s[11]=0x3c;
@@ -2609,11 +2974,11 @@ else
                     memcpy(&ld, s, 16);
                     ll = (long long)ld;
                     ull = (unsigned long long)ld;
-                    
+
                     if(ll != 20041683600089728 || ull != 20041683600089728)
                         ret = 1;
-                }    
-            }    
+                }
+            }
     done:
             exit(ret);
         }
@@ -2651,17 +3016,17 @@ else
             unsigned long long  ull;
             unsigned char       s[16];
             int                 flag=0, ret=0;
-        
+
             /*Determine if long double has 16 byte in size, 11 bit exponent, and
-             *the bias is 0x3ff */ 
-            if(sizeof(long double) == 16) { 
+             *the bias is 0x3ff */
+            if(sizeof(long double) == 16) {
                 ld = 1.0L;
                 memcpy(s, &ld, 16);
                 if(s[0]==0x3f && s[1]==0xf0 && s[2]==0x00 && s[3]==0x00 &&
-                    s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00) 
-                    flag = 1; 
+                    s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00)
+                    flag = 1;
             }
-             
+
             if(flag==1 && sizeof(long long)==8) {
                 ll = 0x01ffffffffffffffLL;
                 ld = (long double)ll;
@@ -2671,7 +3036,7 @@ else
                     s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
                     s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
                     ret = 1;
-            }        
+            }
             if(flag==1 && sizeof(unsigned long long)==8) {
                 ull = 0x01ffffffffffffffULL;
                 ld = (long double)ull;
@@ -2680,11 +3045,11 @@ else
                     s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
                     s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
                     ret = 1;
-            }        
+            }
     done:
             exit(ret);
         }
-        ]])],[hdf5_cv_llong_to_ldouble_correct=yes], [hdf5_cv_llong_to_ldouble_correct=no],[])]) 
+        ]])],[hdf5_cv_llong_to_ldouble_correct=yes], [hdf5_cv_llong_to_ldouble_correct=no],[])])
 fi
 
 if test ${hdf5_cv_llong_to_ldouble_correct} = "yes"; then
@@ -2713,7 +3078,7 @@ if test -n "$ORGANIZATION"; then
   CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
 fi
 
-## Configuration mode (production, development, profile, etc) saved above.
+## Configuration mode (production, debug, etc.) saved above.
 AC_SUBST([CONFIG_MODE])
 
 ## Byte sex from the AC_C_BIGENDIAN macro.
@@ -2782,7 +3147,7 @@ CXX_NOFLAGS=`echo $CXX | sed 's/ -.*//'`
 if `echo $CXX_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
   CXX_VERSION="$CXX"
 else
-  CXX_VERSION="$FC";
+  CXX_VERSION="$CXX";
   for x in `echo $PATH | sed -e 's/:/ /g'`; do
     if test -x $x/$CXX_NOFLAGS; then
       CXX_VERSION="$x/$CXX"
@@ -2794,6 +3159,27 @@ if test -n "$cxx_version_info"; then
   CXX_VERSION="$CXX_VERSION ( $cxx_version_info)"
 fi
 
+AC_SUBST([JAVA_VERSION])
+## Strip anything that looks like a flag off of $JAVA
+JAVA_NOFLAGS=`echo $JAVA | sed 's/ -.*//'`
+
+if `echo $JAVA_NOFLAGS | grep ^/ >/dev/null 2>&1`; then
+  JAVA_VERSION="$JAVA"
+else
+  JAVA_VERSION="$JAVA";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$JAVA_NOFLAGS; then
+      JAVA_VERSION="$x/$JAVA"
+      break
+    fi
+  done
+fi
+java_version_info=`$JAVA -version 2>&1 |\
+  grep 'version' | sed -e 's/version "//' | sed -e 's/"//'`
+if test -n "$java_version_info"; then
+  JAVA_VERSION="$JAVA_VERSION ( $java_version_info)"
+fi
+
 ## ----------------------------------------------------------------------
 ## Where is the root of the source tree. Give an absolute address so
 ## we can find it no matter which directory of the distribution is our
@@ -2829,13 +3215,22 @@ AM_CONDITIONAL([BUILD_ALL_CONDITIONAL], [test "X$BUILD_ALL" = "Xyes"])
 ## ----------------------------------------------------------------------
 ## Enable deprecated public API symbols
 ##
+
+## Enabled unless the build mode is clean.
+if test "X-$BUILD_MODE" = "X-clean" ; then
+  DEPREC_SYMBOLS=no
+else
+  DEPREC_SYMBOLS=yes
+fi
+
 AC_SUBST([DEPRECATED_SYMBOLS])
 AC_MSG_CHECKING([if deprecated public symbols are available]);
 AC_ARG_ENABLE([deprecated-symbols],
               [AS_HELP_STRING([--enable-deprecated-symbols],
-                     [Enable deprecated public API symbols [default=yes]])],
-             [DEPREC_SYMBOLS=$enableval],
-             [DEPREC_SYMBOLS=yes])
+                     [Enable deprecated public API symbols.
+                     [default=yes (unless build mode = clean)]
+                     ])],
+              [DEPREC_SYMBOLS=$enableval])
 
 case "X-$DEPREC_SYMBOLS" in
   X-yes)
@@ -2870,6 +3265,8 @@ if test "X$withval" = "Xv16"; then
 elif test "X$withval" = "Xv18"; then
     AC_MSG_RESULT([v18])
     DEFAULT_API_VERSION=v18
+    AC_DEFINE([USE_18_API_DEFAULT], [1],
+              [Define using v1.8 public API symbols by default])
 elif test "X$withval" = "Xv110"; then
     AC_MSG_RESULT([v110])
     DEFAULT_API_VERSION=v110
@@ -2894,29 +3291,31 @@ AC_SUBST([STRICT_FORMAT_CHECKS])
 AC_MSG_CHECKING([whether to perform strict file format checks]);
 AC_ARG_ENABLE([strict-format-checks],
               [AS_HELP_STRING([--enable-strict-format-checks],
-                     [Enable strict file format checks, default=yes if
-                        debug flag is enabled, no otherwise])],
-             [STRICT_CHECKS=$enableval])
-
-## Default to yes if debug is enabled
-if test "X-$STRICT_CHECKS" = X- ; then
-  if test -z "$DEBUG_PKG" ; then
-    STRICT_CHECKS=no
+                     [Enable strict file format checks.
+                      [default=yes if debug build, otherwise no]
+                     ])],
+             [STRICT_FORMAT_CHECKS=$enableval])
+
+## Set the default level. This depends on the compiler mode.
+if test "X-$STRICT_FORMAT_CHECKS" = X- ; then
+  if test "X-$BUILD_MODE" = "X-debug" ; then
+    STRICT_FORMAT_CHECKS=yes
   else
-    STRICT_CHECKS=yes
+    STRICT_FORMAT_CHECKS=no
   fi
 fi
 
-case "X-$STRICT_CHECKS" in
+case "X-$STRICT_FORMAT_CHECKS" in
   X-yes)
     AC_MSG_RESULT([yes])
-    STRICT_FORMAT_CHECKS=yes
     AC_DEFINE([STRICT_FORMAT_CHECKS], [1],
               [Define if strict file format checks are enabled])
     ;;
-  X-no|*)
+  X-no)
     AC_MSG_RESULT([no])
-    STRICT_FORMAT_CHECKS=no
+    ;;
+  *)
+    AC_MSG_ERROR([Unrecognized value: $STRICT_FORMAT_CHECKS])
     ;;
 esac
 
@@ -2927,9 +3326,9 @@ esac
 AC_MSG_CHECKING([whether to have library information embedded in the executables])
 AC_ARG_ENABLE([embedded-libinfo],
     [AS_HELP_STRING([--enable-embedded-libinfo],
-	[Enable embedded library information [default=yes]])],
-	[enable_embedded_libinfo=$enableval],
-	[enable_embedded_libinfo=yes])
+    [Enable embedded library information [default=yes]])],
+    [enable_embedded_libinfo=$enableval],
+    [enable_embedded_libinfo=yes])
 
    if test "${enable_embedded_libinfo}" = "yes"; then
       AC_MSG_RESULT([yes])
@@ -2994,6 +3393,8 @@ CFLAGS="$saved_user_CFLAGS"
 FCFLAGS="$saved_user_FCFLAGS"
 CXXFLAGS="$saved_user_CXXFLAGS"
 CPPFLAGS="$saved_user_CPPFLAGS"
+JAVACFLAGS="$saved_user_JAVACFLAGS"
+JAVAFLAGS="$saved_user_JAVAFLAGS"
 LDFLAGS="$saved_user_LDFLAGS"
 
 
@@ -3004,6 +3405,7 @@ LDFLAGS="$saved_user_LDFLAGS"
 AM_CONDITIONAL([BUILD_CXX_CONDITIONAL], [test "X$HDF_CXX" = "Xyes"])
 AM_CONDITIONAL([BUILD_PARALLEL_CONDITIONAL], [test -n "$TESTPARALLEL"])
 AM_CONDITIONAL([BUILD_FORTRAN_CONDITIONAL], [test "X$HDF_FORTRAN" = "Xyes"])
+AM_CONDITIONAL([BUILD_JAVA_CONDITIONAL], [test "X$HDF_JAVA" = "Xyes"])
 AM_CONDITIONAL([BUILD_HDF5_HL_CONDITIONAL], [test "X$HDF5_HL" = "Xyes"])
 
 
@@ -3068,6 +3470,11 @@ else
   enable_static=no
 fi
 
+## Expose things for *.in markup
+AC_SUBST([STATIC_SHARED])
+AC_SUBST([enable_shared])
+AC_SUBST([enable_static])
+
 if test "X$enable_static" = "Xyes" && test "X$enable_shared" = "Xyes"; then
   STATIC_SHARED="static, shared"
 elif test "X$enable_static" = "Xyes"; then
@@ -3151,6 +3558,20 @@ AC_CONFIG_FILES([src/libhdf5.settings
                  fortran/examples/Makefile
                  fortran/examples/run-fortran-ex.sh
                  fortran/examples/testh5fc.sh
+                 java/Makefile
+                 java/src/Makefile
+                 java/src/jni/Makefile
+                 java/test/Makefile
+                 java/test/junit.sh
+                 java/examples/Makefile
+                 java/examples/intro/Makefile
+                 java/examples/intro/runExample.sh
+                 java/examples/datasets/Makefile
+                 java/examples/datasets/runExample.sh
+                 java/examples/datatypes/Makefile
+                 java/examples/datatypes/runExample.sh
+                 java/examples/groups/Makefile
+                 java/examples/groups/runExample.sh
                  hl/Makefile
                  hl/src/Makefile
                  hl/test/Makefile
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 1b3520b..965675a 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -112,10 +112,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -364,18 +377,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -388,7 +405,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -426,10 +442,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -440,6 +460,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -450,8 +471,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -466,6 +499,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -473,6 +508,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -496,6 +532,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -511,7 +548,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -520,8 +559,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -600,6 +641,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index 14d545f..d15a251 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -112,10 +112,23 @@ TESTS =
 subdir = fortran
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -420,18 +433,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -444,7 +461,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -482,10 +498,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -496,6 +516,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -506,8 +527,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -522,6 +555,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -529,6 +564,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -552,6 +588,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -567,7 +604,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -576,8 +615,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -656,6 +697,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index e38f89d..5ee3ad2 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -116,10 +116,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = fortran/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -369,18 +382,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -393,7 +410,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -431,10 +447,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -445,6 +465,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -455,8 +476,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -471,6 +504,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -478,6 +513,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -501,6 +537,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -516,7 +553,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -525,8 +564,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -605,6 +646,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/fortran/robodoc.rc b/fortran/robodoc.rc
index 07b8b35..b24e4f9 100644
--- a/fortran/robodoc.rc
+++ b/fortran/robodoc.rc
@@ -132,10 +132,7 @@ ignore files:
     *.o
     *e
     *.mod
-    *_F90.f90
     *.c
 accept files:
-    *_F03.f90
-    *_F90.f90
-    *.f90
+    *.F90
     *.h
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index dc884d5..8ebbbd0 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -139,7 +139,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
   TARGET_C_PROPERTIES (${HDF5_F90_C_LIBSH_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_F90_C_LIBSH_TARGET} ${HDF5_LIBSH_TARGET} ${LINK_SHARED_LIBS})
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_C_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_F90_C_LIBSH_TARGET} ${HDF5_F90_C_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_F90_C_LIBSH_TARGET} ${HDF5_F90_C_LIB_NAME} SHARED ${HDF5_F_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_F90_C_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/fortran
       LINKER_LANGUAGE C
@@ -161,6 +161,7 @@ set (f90_F_BASE_SRCS
 
     # normal distribution
     ${HDF5_F90_SRC_SOURCE_DIR}/H5f90global.F90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5fortkit.F90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff.F90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff.F90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff.F90
@@ -234,7 +235,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
     target_link_libraries (${HDF5_F90_LIBSH_TARGET} ${MPI_Fortran_LIBRARIES})
   endif (H5_HAVE_PARALLEL AND MPI_Fortran_FOUND)
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_F90_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_F90_LIBSH_TARGET} ${HDF5_F90_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_F90_LIBSH_TARGET} ${HDF5_F90_LIB_NAME} SHARED ${HDF5_F_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_F90_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/fortran
       LINKER_LANGUAGE Fortran
diff --git a/fortran/src/H5Dff.F90 b/fortran/src/H5Dff.F90
index e44d90e..cb0b292 100644
--- a/fortran/src/H5Dff.F90
+++ b/fortran/src/H5Dff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5D
 !
 ! FILE
-!  fortran/src/H5Dff.f90
+!  fortran/src/H5Dff.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5D functions.
@@ -172,7 +172,7 @@ MODULE H5D
      MODULE PROCEDURE h5dfill_integer
      MODULE PROCEDURE h5dfill_c_float
      MODULE PROCEDURE h5dfill_c_double
-#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
+#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
      MODULE PROCEDURE h5dfill_c_long_double
 #endif
      MODULE PROCEDURE h5dfill_char
@@ -1753,7 +1753,7 @@ CONTAINS
 
   END SUBROUTINE h5dfill_c_double
 
-#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
+#if H5_FORTRAN_C_LONG_DOUBLE_IS_UNIQUE!=0
   SUBROUTINE h5dfill_c_long_double(fill_value, space_id, buf,  hdferr)
     IMPLICIT NONE
     REAL(KIND=C_LONG_DOUBLE), INTENT(IN), TARGET :: fill_value  ! Fill value
diff --git a/fortran/src/H5Eff.F90 b/fortran/src/H5Eff.F90
index a2efe61..7a0b15b 100644
--- a/fortran/src/H5Eff.F90
+++ b/fortran/src/H5Eff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5E
 !
 ! FILE
-!  fortran/src/H5Eff.f90
+!  fortran/src/H5Eff.F90
 !
 ! PURPOSE
 !  This Module contains Fortran interfaces for H5E functions.
diff --git a/fortran/src/H5Fff.F90 b/fortran/src/H5Fff.F90
index c69ad82..165fba0 100644
--- a/fortran/src/H5Fff.F90
+++ b/fortran/src/H5Fff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5F
 !
 ! FILE
-!  H5Fff.f90
+!  H5Fff.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5F functions.
diff --git a/fortran/src/H5Gff.F90 b/fortran/src/H5Gff.F90
index 2e002b5..30076a4 100644
--- a/fortran/src/H5Gff.F90
+++ b/fortran/src/H5Gff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5G
 !
 ! FILE
-!  fortran/src/H5Gff.f90
+!  fortran/src/H5Gff.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5G functions.
diff --git a/fortran/src/H5Off.F90 b/fortran/src/H5Off.F90
index da940df..8d4fb16 100644
--- a/fortran/src/H5Off.F90
+++ b/fortran/src/H5Off.F90
@@ -4,7 +4,7 @@
 !  MODULE H5O
 !
 ! FILE
-!  fortran/src/H5Off.f90
+!  fortran/src/H5Off.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5O functions.
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 523ed0b..3989512 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -5273,7 +5273,7 @@ h5pget_file_image_c(hid_t_f *fapl_id, void **buf_ptr, size_t_f *buf_len_ptr)
   *buf_len_ptr=(size_t_f)c_buf_len_ptr;
 
   ret_value = 0;
-  if(c_buf_ptr) HDfree(c_buf_ptr);
+  if(c_buf_ptr) H5free_memory(c_buf_ptr);
 
   return ret_value;
 }
diff --git a/fortran/src/H5Pff.F90 b/fortran/src/H5Pff.F90
index 97f907b..e052ea0 100644
--- a/fortran/src/H5Pff.F90
+++ b/fortran/src/H5Pff.F90
@@ -42,7 +42,8 @@ MODULE H5P
 
   USE, INTRINSIC :: ISO_C_BINDING
   USE H5GLOBAL
-  
+  USE H5fortkit
+
   INTERFACE h5pset_fapl_multi_f
      MODULE PROCEDURE h5pset_fapl_multi_l
      MODULE PROCEDURE h5pset_fapl_multi_s
@@ -7319,8 +7320,704 @@ SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
     hdferr = h5pget_mpio_actual_io_mode_c(dxpl_id, actual_io_mode)
 
   END SUBROUTINE h5pget_mpio_actual_io_mode_f
+
+!****s* H5P/h5pset_all_coll_metadata_ops_f
+! NAME
+!  h5pset_all_coll_metadata_ops_f
+!
+! PURPOSE
+!  Sets requirement whether HDF5 metadata read operations using the access property 
+!  list are required to be collective or independent. If collective requirement is 
+!  selected, the HDF5 library will optimize the metadata reads improving performance. 
+!  The default setting is independent (false).
+!
+! INPUTS
+!  plist_id       - File access property list identifier.
+!  is_collective  - Indicates if metadata writes are collective or not.
+! OUTPUTS
+!  hdferr         - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Feb, 10 2016
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pset_all_coll_metadata_ops_f(plist_id, is_collective, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(IN)           :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+!*****
+    LOGICAL(C_BOOL) :: c_is_collective
+    
+    INTERFACE
+       INTEGER FUNCTION h5pset_all_coll_metadata_ops(plist_id, is_collective) BIND(C, NAME='H5Pset_all_coll_metadata_ops')
+         IMPORT :: HID_T, C_BOOL
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: plist_id
+         LOGICAL(C_BOOL), INTENT(IN), VALUE :: is_collective
+       END FUNCTION h5pset_all_coll_metadata_ops
+    END INTERFACE
+
+    ! Transfer value of Fortran LOGICAL to C c_bool type
+    c_is_collective = is_collective
+    
+    hdferr = INT(H5Pset_all_coll_metadata_ops(plist_id, c_is_collective))
+    
+  END SUBROUTINE h5pset_all_coll_metadata_ops_f
+
+!****s* H5P/h5pget_all_coll_metadata_ops_f 
+! NAME
+!  h5pget_all_coll_metadata_ops_f
+!
+! PURPOSE
+!  Retrieves metadata read mode from the access property list.
+!
+! INPUTS
+!  plist_id        - File access property list identifier.
+! OUTPUTS
+!  is_collective   - Collective access setting.
+!  hdferr          - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Feb, 10 2016
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pget_all_coll_metadata_ops_f(plist_id, is_collective, hdferr)
+    
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(OUT)          :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+!*****
+    LOGICAL(C_BOOL) :: c_is_collective
+    
+    INTERFACE
+       INTEGER FUNCTION h5pget_all_coll_metadata_ops(plist_id, is_collective) BIND(C, NAME='H5Pget_all_coll_metadata_ops')
+         IMPORT :: HID_T, C_BOOL
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: plist_id
+         LOGICAL(C_BOOL), INTENT(OUT) :: is_collective
+       END FUNCTION h5pget_all_coll_metadata_ops
+    END INTERFACE
+    
+    hdferr = INT(H5Pget_all_coll_metadata_ops(plist_id, c_is_collective))
+    
+    ! Transfer value of C c_bool type to Fortran LOGICAL 
+    is_collective = c_is_collective
+    
+  END SUBROUTINE h5pget_all_coll_metadata_ops_f
+
+!****s* H5P/h5pset_coll_metadata_write_f
+! NAME
+!  h5pset_coll_metadata_write_f
+!
+! PURPOSE
+!  Sets metadata writes to collective or independent. Default setting is independent (false).
+!
+! INPUTS
+!  fapl_id        - File access property list identifier.
+!  is_collective  - Indicates if metadata writes are collective or not.
+! OUTPUTS
+!  hdferr         - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Feb, 10 2016
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pset_coll_metadata_write_f(plist_id, is_collective, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(IN)           :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+!*****
+    LOGICAL(C_BOOL) :: c_is_collective
+    
+    INTERFACE
+       INTEGER FUNCTION h5pset_coll_metadata_write(plist_id, is_collective) BIND(C, NAME='H5Pset_coll_metadata_write')
+         IMPORT :: HID_T, C_BOOL
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: plist_id
+         LOGICAL(C_BOOL), INTENT(IN), VALUE :: is_collective
+       END FUNCTION h5pset_coll_metadata_write
+    END INTERFACE
+    
+    ! Transfer value of Fortran LOGICAL to C c_bool type
+    c_is_collective = is_collective
+    
+    hdferr = INT(H5Pset_coll_metadata_write(plist_id, c_is_collective))
+    
+  END SUBROUTINE h5pset_coll_metadata_write_f
+
+!****s* H5P/h5pget_coll_metadata_write_f
+! NAME
+!  h5pget_coll_metadata_write_f
+!
+! PURPOSE
+!  Retrieves metadata write mode from the file access property list.
+!
+! INPUTS
+!  plist_id        - File access property list identifier.
+! OUTPUTS
+!  is_collective   - Collective access setting.
+!  hdferr          - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Feb, 10 2016
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pget_coll_metadata_write_f(plist_id, is_collective, hdferr)
+    
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(OUT)          :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+!*****
+    LOGICAL(C_BOOL) :: c_is_collective
+    
+    INTERFACE
+       INTEGER FUNCTION h5pget_coll_metadata_write(plist_id, is_collective) BIND(C, NAME='H5Pget_coll_metadata_write')
+         IMPORT :: HID_T, C_BOOL
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: plist_id
+         LOGICAL(C_BOOL), INTENT(OUT) :: is_collective
+       END FUNCTION h5pget_coll_metadata_write
+    END INTERFACE
+    
+    hdferr = INT(H5Pget_coll_metadata_write(plist_id, c_is_collective))
+    
+    ! Transfer value of C c_bool type to Fortran LOGICAL 
+    is_collective = c_is_collective
+    
+  END SUBROUTINE h5pget_coll_metadata_write_f
+  
 #endif
 
+!
+! V I R T U A L  D A T S E T S
+!
+
+!****s* H5P/h5pset_virtual_view_f
+! NAME
+!  h5pset_virtual_view_f
+!
+! PURPOSE
+!  Sets the view of the virtual dataset (VDS) to include or exclude missing mapped elements.
+!
+! INPUTS
+!   dapl_id - Identifier of the virtual dataset access property list.
+!   view    - Flag specifying the extent of the data to be included in the view.
+!             Valid values are:
+!                H5D_VDS_FIRST_MISSING_F
+!                H5D_VDS_LAST_AVAILABLE_F
+! 
+! OUTPUTS
+!  
+!  hdferr   - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+!
+! SOURCE
+  SUBROUTINE h5pset_virtual_view_f(dapl_id, view, hdferr)
+    IMPLICIT NONE
+
+    INTEGER(HID_T), INTENT(IN)  :: dapl_id
+    INTEGER       , INTENT(IN)  :: view
+    INTEGER       , INTENT(OUT) :: hdferr
+    
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pset_virtual_view(dapl_id, view) BIND(C,NAME='H5Pset_virtual_view')
+         IMPORT :: HID_T, ENUM_T
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: dapl_id
+         INTEGER(ENUM_T), INTENT(IN), VALUE :: view
+       END FUNCTION h5pset_virtual_view
+    END INTERFACE
+
+    hdferr = INT( h5pset_virtual_view(dapl_id, INT(view,ENUM_T)) )
+    
+  END SUBROUTINE h5pset_virtual_view_f
+
+!****s* H5P/h5pget_virtual_view_f
+! NAME
+!  h5pget_virtual_view_f
+!
+! PURPOSE
+!  Retrieves the view of a virtual dataset accessed with dapl_id. 
+!
+! INPUTS
+!  dapl_id - Dataset access property list identifier for the virtual dataset
+!
+! OUTPUTS
+!  view - The flag specifying the view of the virtual dataset.
+!         Valid values are:
+!             H5D_VDS_FIRST_MISSING_F
+!             H5D_VDS_LAST_AVAILABLE_F
+!  hdferr - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! SOURCE
+  SUBROUTINE h5pget_virtual_view_f(dapl_id, view, hdferr)
+    IMPLICIT NONE
+
+    INTEGER(HID_T), INTENT(IN)  :: dapl_id
+    INTEGER       , INTENT(INOUT) :: view
+    INTEGER       , INTENT(OUT) :: hdferr
+!*****
+    INTEGER(ENUM_T) :: view_enum
+    INTERFACE
+       INTEGER FUNCTION h5pget_virtual_view(dapl_id, view) BIND(C,NAME='H5Pget_virtual_view')
+         IMPORT :: HID_T, ENUM_T
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: dapl_id
+         INTEGER(ENUM_T), INTENT(OUT) :: view
+       END FUNCTION h5pget_virtual_view
+    END INTERFACE
+
+    hdferr = INT( h5pget_virtual_view(dapl_id, view_enum) )
+    view = INT(view_enum)
+    
+  END SUBROUTINE h5pget_virtual_view_f
+
+!****s* H5P/h5pset_virtual_printf_gap_f
+! NAME
+!  h5pset_virtual_printf_gap_f
+!
+! PURPOSE
+!  Sets the maximum number of missing source files and/or datasets with the printf-style names 
+!  when getting the extent of an unlimited virtual dataset.  
+!
+! INPUTS
+!  dapl_id  - Dataset access property list identifier for the virtual dataset.
+!  gap_size - Maximum number of files and/or datasets allowed to be missing for determining 
+!             the extent of an unlimited virtual dataset with printf-style mappings.
+!
+! OUTPUTS       
+!  hdferr   - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE 
+  SUBROUTINE h5pset_virtual_printf_gap_f(dapl_id, gap_size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: dapl_id
+    INTEGER(HSIZE_T), INTENT(IN)  :: gap_size
+    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pset_virtual_printf_gap(dapl_id, gap_size) BIND(C,NAME='H5Pset_virtual_printf_gap')
+         IMPORT :: HID_T, HSIZE_T
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: dapl_id
+         INTEGER(HSIZE_T), INTENT(IN), VALUE :: gap_size
+       END FUNCTION h5pset_virtual_printf_gap
+    END INTERFACE
+
+    hdferr = INT( h5pset_virtual_printf_gap(dapl_id, gap_size) )
+    
+  END SUBROUTINE h5pset_virtual_printf_gap_f
+
+!****s* H5P/h5pget_virtual_printf_gap_f
+! NAME
+!  h5pget_virtual_printf_gap_f
+!
+! PURPOSE
+!  Returns the maximum number of missing source files and/or datasets with the 
+!  printf-style names when getting the extent for an unlimited virtual dataset.
+!
+! INPUTS
+!  dapl_id    - Dataset access property list identifier for the virtual dataset
+!
+! OUTPUTS
+!    gap_size - Maximum number of the files and/or datasets allowed to be missing for 
+!               determining the extent of an unlimited virtual dataset with printf-style mappings. 
+!    hdferr   - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pget_virtual_printf_gap_f(dapl_id, gap_size, hdferr)
+    IMPLICIT NONE
+    
+    INTEGER(HID_T)  , INTENT(IN)  :: dapl_id
+    INTEGER(HSIZE_T), INTENT(OUT) :: gap_size
+    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pget_virtual_printf_gap(dapl_id, gap_size) BIND(C,NAME='H5Pget_virtual_printf_gap')
+         IMPORT :: HID_T, HSIZE_T
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: dapl_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: gap_size
+       END FUNCTION h5pget_virtual_printf_gap
+    END INTERFACE
+
+    hdferr = INT( h5pget_virtual_printf_gap(dapl_id, gap_size) )
+    
+  END SUBROUTINE h5pget_virtual_printf_gap_f
+
+!****s* H5P/h5pset_virtual_f
+! NAME
+!  h5pset_virtual_f
+!
+! PURPOSE
+!  Sets the mapping between virtual and source datasets.
+!
+! INPUTS
+!  dcpl_id      - The identifier of the dataset creation property list that will be 
+!                 used when creating the virtual dataset.
+!  vspace_id    - The dataspace identifier with the selection within the virtual 
+!                 dataset applied, possibly an unlimited selection.
+! src_file_name - The name of the HDF5 file where the source dataset is located.
+! src_dset_name - The path to the HDF5 dataset in the file specified by src_file_name.
+! src_space_id 	- The source dataset’s dataspace identifier with a selection applied, possibly an unlimited selection
+!
+! OUTPUTS
+!  hdferr  - Returns 0 if successful and -1 if fails
+
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pset_virtual_f(dcpl_id, vspace_id, src_file_name, src_dset_name, src_space_id, hdferr)
+    IMPLICIT NONE
+    
+    INTEGER(HID_T), INTENT(IN)   :: dcpl_id
+    INTEGER(HID_T), INTENT(IN)   :: vspace_id
+    CHARACTER(LEN=*), INTENT(IN) :: src_file_name
+    CHARACTER(LEN=*), INTENT(IN) :: src_dset_name
+    INTEGER(HID_T), INTENT(IN)   :: src_space_id
+    INTEGER, INTENT(OUT)         :: hdferr
+!*****
+    CHARACTER(LEN=LEN_TRIM(src_file_name)+1,KIND=C_CHAR) :: c_src_file_name
+    CHARACTER(LEN=LEN_TRIM(src_dset_name)+1,KIND=C_CHAR) :: c_src_dset_name
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_virtual(dcpl_id, vspace_id, c_src_file_name, c_src_dset_name, src_space_id) &
+            BIND(C,NAME='H5Pset_virtual')
+         IMPORT :: C_CHAR
+         IMPORT :: HID_T
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: dcpl_id
+         INTEGER(HID_T), INTENT(IN), VALUE :: vspace_id
+         CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: c_src_file_name
+         CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: c_src_dset_name
+         INTEGER(HID_T), INTENT(IN), VALUE :: src_space_id
+       END FUNCTION h5pset_virtual
+    END INTERFACE
+
+    c_src_file_name = TRIM(src_file_name)//C_NULL_CHAR
+    c_src_dset_name = TRIM(src_dset_name)//C_NULL_CHAR
+
+    hdferr = h5pset_virtual(dcpl_id, vspace_id, c_src_file_name, c_src_dset_name, src_space_id)
+
+  END SUBROUTINE h5pset_virtual_f
+
+!****s* H5P/h5pget_virtual_count_f
+! NAME
+!  h5pget_virtual_count_f
+!
+! PURPOSE
+!  Gets the number of mappings for the virtual dataset.
+!
+! INPUTS
+!  dcpl_id - The identifier of the virtual dataset creation property list. 
+!
+! OUTPUTS
+!   count   - The number of mappings.
+!   hdferr  - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pget_virtual_count_f(dcpl_id, count, hdferr)
+
+    IMPLICIT NONE
+    
+    INTEGER(HID_T), INTENT(IN)   :: dcpl_id
+    INTEGER(SIZE_T), INTENT(OUT) :: count
+    INTEGER, INTENT(OUT)         :: hdferr
+!*****
+    INTERFACE
+       INTEGER(HID_T) FUNCTION h5pget_virtual_count(dcpl_id, count) BIND(C,NAME='H5Pget_virtual_count')
+         IMPORT :: HID_T, SIZE_T
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
+         INTEGER(SIZE_T), INTENT(OUT) :: count
+       END FUNCTION h5pget_virtual_count
+    END INTERFACE
+    
+    hdferr = INT( h5pget_virtual_count(dcpl_id, count))
+
+  END SUBROUTINE h5pget_virtual_count_f
+
+!****s* H5P/h5pget_virtual_vspace_f
+! NAME
+!  h5pget_virtual_vspace_f
+!
+! PURPOSE
+!  Gets a dataspace identifier for the selection within the virtual dataset used in the mapping.
+!
+! INPUTS
+!  dcpl_id - The identifier of the virtual dataset creation property list.
+!    index - Mapping index.
+!            The value of index is 0 (zero) or greater and less than count (0 ≤ index < count), 
+!            where count is the number of mappings returned by h5pget_virtual_count.
+!
+! OUTPUTS 
+!   hdferr - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+  SUBROUTINE h5pget_virtual_vspace_f(dcpl_id, index, ds_id, hdferr)
+    IMPLICIT NONE
+
+    INTEGER(HID_T) , INTENT(IN)  :: dcpl_id
+    INTEGER(SIZE_T), INTENT(IN)  :: index
+    INTEGER(HID_T) , INTENT(OUT) :: ds_id
+    INTEGER, INTENT(OUT)         :: hdferr
+
+!*****
+    INTERFACE
+       INTEGER(HID_T) FUNCTION h5pget_virtual_vspace(dcpl_id, index) BIND(C,NAME='H5Pget_virtual_vspace')
+         IMPORT :: HID_T, SIZE_T
+         IMPLICIT NONE
+         INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
+         INTEGER(SIZE_T), INTENT(IN), VALUE :: index
+       END FUNCTION h5pget_virtual_vspace
+    END INTERFACE
+    
+    ds_id = h5pget_virtual_vspace(dcpl_id, index)
+    
+    hdferr = 0
+    IF(ds_id.LT.0) hdferr = -1
+
+END SUBROUTINE h5pget_virtual_vspace_f
+
+!****s* H5P/h5pget_virtual_srcspace_f
+! NAME
+!  h5pget_virtual_srcspace_f
+!
+! PURPOSE
+!  Gets a dataspace identifier for the selection within the source dataset used in the mapping.
+!
+! INPUTS
+!   dcpl_id - The identifier of the virtual dataset creation property list.
+!   index   - Mapping index.
+!             The value of index is 0 (zero) or greater and less than count (0 ≤ index < count), 
+!             where count is the number of mappings returned by h5pget_virtual_count.
+!
+!
+! OUTPUTS
+!   ds_id  - dataspace identifier
+!   hdferr - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+SUBROUTINE h5pget_virtual_srcspace_f(dcpl_id, index, ds_id, hdferr)
+  IMPLICIT NONE
+
+  INTEGER(HID_T) , INTENT(IN)  :: dcpl_id
+  INTEGER(SIZE_T), INTENT(IN)  :: index
+  INTEGER(HID_T) , INTENT(OUT) :: ds_id
+  INTEGER, INTENT(OUT)         :: hdferr
+
+!*****
+  INTERFACE
+     INTEGER(HID_T) FUNCTION h5pget_virtual_srcspace(dcpl_id, index) BIND(C,NAME='H5Pget_virtual_srcspace')
+       IMPORT :: HID_T, SIZE_T
+         IMPLICIT NONE
+       INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
+       INTEGER(SIZE_T), INTENT(IN), VALUE :: index
+     END FUNCTION h5pget_virtual_srcspace
+  END INTERFACE
+  
+  ds_id = h5pget_virtual_srcspace(dcpl_id, index)
+
+  hdferr = 0
+  IF(ds_id.LT.0) hdferr = -1
+
+END SUBROUTINE h5pget_virtual_srcspace_f
+
+!****s* H5P/h5pget_virtual_filename_f
+! NAME
+!  h5pget_virtual_filename_f
+!
+! PURPOSE
+!  Gets the filename of a source dataset used in the mapping.
+!
+! INPUTS
+!  dcpl_id - The identifier of the virtual dataset creation property list.
+!  index   - Mapping index.
+!            The value of index is 0 (zero) or greater and less than count (0 ≤ index < count), 
+!            where count is the number of mappings returned by h5pget_virtual_count.
+!  
+! OUTPUTS
+!   name   - A buffer containing the name of the file containing the source dataset.
+!   hdferr - Returns 0 if successful and -1 if fails.
+!
+! Optional parameters:
+!  name_len - The size of name needed to hold the filename. (OUT)
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Nov 2, 2015
+!
+! HISTORY
+!
+! SOURCE
+SUBROUTINE h5pget_virtual_filename_f(dcpl_id, index, name, hdferr, name_len)
+
+  IMPLICIT NONE
+  INTEGER(HID_T)  , INTENT(IN)  :: dcpl_id
+  INTEGER(SIZE_T) , INTENT(IN)  :: index
+  CHARACTER(LEN=*), INTENT(OUT) :: name
+  INTEGER, INTENT(OUT)          :: hdferr
+  INTEGER(SIZE_T), OPTIONAL     :: name_len
+!*****
+
+  CHARACTER(LEN=1,KIND=C_CHAR), DIMENSION(1:LEN(name)+1), TARGET :: c_name
+  TYPE(C_PTR) :: f_ptr
+  
+  INTERFACE
+     INTEGER(SIZE_T) FUNCTION h5pget_virtual_filename(dcpl_id, index, name, size) BIND(C, NAME='H5Pget_virtual_filename')
+       IMPORT :: HID_T, SIZE_T, C_PTR, C_CHAR
+         IMPLICIT NONE
+       INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
+       INTEGER(SIZE_T), INTENT(IN), VALUE :: index
+       TYPE(C_PTR), VALUE :: name
+       INTEGER(SIZE_T), INTENT(IN), VALUE :: size
+     END FUNCTION h5pget_virtual_filename
+  END INTERFACE
+
+  hdferr = 0
+  IF(PRESENT(name_len))THEN
+     name_len = INT(h5pget_virtual_filename(dcpl_id, index, C_NULL_PTR, 0_SIZE_T), SIZE_T)
+     IF(name_len.LT.0) hdferr = -1
+  ELSE
+     f_ptr = C_LOC(c_name(1)(1:1))
+
+     IF(INT(h5pget_virtual_filename(dcpl_id, index, f_ptr, INT(LEN(name)+1,SIZE_T)), SIZE_T).LT.0)THEN
+        hdferr = -1
+     ELSE
+        CALL HD5c2fstring(name,c_name,LEN(name))
+     ENDIF
+
+  ENDIF
+
+END SUBROUTINE h5pget_virtual_filename_f
+
+!****s* H5P/h5pget_virtual_dsetname_f
+! NAME
+!  h5pget_virtual_dsetname_f
+!
+! PURPOSE
+!  Gets the name of a source dataset used in the mapping.
+!
+! INPUTS
+!  dcpl_id - The identifier of the virtual dataset creation property list.
+!  index   - Mapping index.
+!            The value of index is 0 (zero) or greater and less than count (0 ≤ index < count), 
+!            where count is the number of mappings returned by h5pget_virtual_count.
+!  
+! OUTPUTS
+!   name   - A buffer containing the name of the source dataset.
+!   hdferr - Returns 0 if successful and -1 if fails.
+!
+! Optional parameters:
+!  name_len - The size of name needed to hold the source dataset name. (OUT)
+!
+! AUTHOR
+!   M. Scot Breitenfeld
+!   January 28, 2016
+!
+! HISTORY
+!
+! SOURCE
+SUBROUTINE h5pget_virtual_dsetname_f(dcpl_id, index, name, hdferr, name_len)
+
+  IMPLICIT NONE
+  INTEGER(HID_T)  , INTENT(IN)  :: dcpl_id
+  INTEGER(SIZE_T) , INTENT(IN)  :: index
+  CHARACTER(LEN=*), INTENT(OUT) :: name
+  INTEGER, INTENT(OUT)          :: hdferr
+  INTEGER(SIZE_T), OPTIONAL     :: name_len
+!*****
+
+  CHARACTER(LEN=1,KIND=C_CHAR), DIMENSION(1:LEN(name)+1), TARGET :: c_name
+  TYPE(C_PTR) :: f_ptr
+  
+  INTERFACE
+     INTEGER(SIZE_T) FUNCTION h5pget_virtual_dsetname(dcpl_id, index, name, size) BIND(C, NAME='H5Pget_virtual_dsetname')
+       IMPORT :: HID_T, SIZE_T, C_PTR, C_CHAR
+         IMPLICIT NONE
+       INTEGER(HID_T) , INTENT(IN), VALUE :: dcpl_id
+       INTEGER(SIZE_T), INTENT(IN), VALUE :: index
+       TYPE(C_PTR), VALUE :: name
+       INTEGER(SIZE_T), INTENT(IN), VALUE :: size
+     END FUNCTION h5pget_virtual_dsetname
+  END INTERFACE
+
+  hdferr = 0
+  IF(PRESENT(name_len))THEN
+     name_len = INT(h5pget_virtual_dsetname(dcpl_id, index, C_NULL_PTR, 0_SIZE_T), SIZE_T)
+     IF(name_len.LT.0) hdferr = -1
+  ELSE
+     f_ptr = C_LOC(c_name(1)(1:1))
+
+     IF(INT(h5pget_virtual_dsetname(dcpl_id, index, f_ptr, INT(LEN(name)+1,SIZE_T)), SIZE_T).LT.0)THEN
+        hdferr = -1
+     ELSE
+        CALL HD5c2fstring(name,c_name,LEN(name))
+     ENDIF
+
+  ENDIF
+
+END SUBROUTINE h5pget_virtual_dsetname_f
+
+
 END MODULE H5P
 
 
diff --git a/fortran/src/H5Rff.F90 b/fortran/src/H5Rff.F90
index a90bd9a..7ba91c4 100644
--- a/fortran/src/H5Rff.F90
+++ b/fortran/src/H5Rff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5R
 !
 ! FILE
-!  fortran/src/H5Rff.f90
+!  fortran/src/H5Rff.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5R functions.
diff --git a/fortran/src/H5Sff.F90 b/fortran/src/H5Sff.F90
index aeb3314..cb1388e 100644
--- a/fortran/src/H5Sff.F90
+++ b/fortran/src/H5Sff.F90
@@ -4,7 +4,7 @@
 !  MODULE H5S
 !
 ! FILE
-!  fortran/src/H5Sff.f90
+!  fortran/src/H5Sff.F90
 !
 ! PURPOSE
 !  This file contains Fortran interfaces for H5S functions.
@@ -41,7 +41,7 @@
 !*****
 
 MODULE H5S
-  USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_CHAR
+  USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_CHAR, C_INT
   USE H5GLOBAL
 
 CONTAINS
@@ -1232,7 +1232,7 @@ CONTAINS
     ENDIF
     ! Case of optional parameters.
     !
-    ! Find the rank of the dataspace to allocate memery for
+    ! Find the rank of the dataspace to allocate memory for
     ! default stride and block arrays.
     !
     CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
@@ -1378,7 +1378,7 @@ CONTAINS
 !  endif
             ! Case of optional parameters.
             !
-            ! Find the rank of the dataspace to allocate memery for
+            ! Find the rank of the dataspace to allocate memory for
             ! default stride and block arrays.
             !
 !  CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
@@ -1751,4 +1751,118 @@ CONTAINS
 
   END SUBROUTINE h5sextent_equal_f
 
+!
+!****s* H5S/h5sget_regular_hyperslab_f
+!
+! NAME
+!  h5sget_regular_hyperslab_f
+!
+! PURPOSE
+!  Retrieves a regular hyperslab selection.
+!
+! INPUTS
+!  space_id - The identifier of the dataspace.
+! OUTPUTS
+!  start    - Offset of the start of the regular hyperslab.
+!  stride   - Stride of the regular hyperslab.
+!  count    - Number of blocks in the regular hyperslab.
+!  block    - Size of a block in the regular hyperslab.
+!  hdferr   - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 28 2016
+! SOURCE
+  SUBROUTINE h5sget_regular_hyperslab_f(space_id, start, stride, count, block, hdferr)
+    
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) ::  space_id
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  start
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  stride
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  count
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  block
+    INTEGER, INTENT(OUT) :: hdferr
+!*****
+    TYPE(C_PTR) :: start_c, stride_c, count_c, block_c
+    INTEGER :: n
+    
+    INTERFACE
+       INTEGER FUNCTION h5sget_regular_hyperslab(space_id, start, stride, count, block) BIND(C,NAME='H5Sget_regular_hyperslab')
+         IMPORT :: HID_T, C_PTR
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: space_id
+         TYPE(C_PTR), VALUE :: start, stride, count, block
+       END FUNCTION h5sget_regular_hyperslab
+    END INTERFACE
+
+    hdferr = 0
+
+    start_c = C_LOC(start(1))
+    stride_c = C_LOC(stride(1))
+    count_c = C_LOC(count(1))
+    block_c = C_LOC(block(1))
+
+    IF(INT(h5sget_regular_hyperslab(space_id, start_c, stride_c, count_c, block_c)).LT.0) hdferr = -1
+
+    ! Reverse the C arrays description values of the hyperslab because 
+    ! the hyperslab was for a C stored hyperslab
+
+    CALL H5Sget_simple_extent_ndims_f(space_id,n,hdferr)
+    IF(hdferr.LT.0.OR.n.EQ.0)THEN
+       hdferr=-1
+    ELSE
+       start(1:n)  = start(n:1:-1)
+       stride(1:n) = stride(n:1:-1)
+       count(1:n)  = count(n:1:-1)
+       block(1:n)  = block(n:1:-1)
+    ENDIF
+
+  END SUBROUTINE h5sget_regular_hyperslab_f
+
+!****s* H5S/h5sis_regular_hyperslab_f
+!
+! NAME
+!  h5sis_regular_hyperslab_f
+!
+! PURPOSE
+!  Retrieves a regular hyperslab selection.
+!
+! INPUTS
+!  space_id  - The identifier of the dataspace.
+! OUTPUTS
+!  IsRegular - TRUE or FALSE for hyperslab selection if successful.
+!  hdferr    - Returns 0 if successful and -1 if fails.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 28 2016
+! SOURCE
+  SUBROUTINE h5sis_regular_hyperslab_f(space_id, IsRegular, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) ::  space_id
+    LOGICAL :: IsRegular
+    INTEGER, INTENT(OUT) :: hdferr
+!*****
+    INTEGER(C_INT) :: status 
+    
+    INTERFACE
+       INTEGER(C_INT) FUNCTION H5Sis_regular_hyperslab(space_id) BIND(C,NAME='H5Sis_regular_hyperslab')
+         IMPORT :: HID_T, C_INT
+         IMPLICIT NONE
+         INTEGER(HID_T), INTENT(IN), VALUE :: space_id
+       END FUNCTION H5Sis_regular_hyperslab
+    END INTERFACE
+
+    status = H5Sis_regular_hyperslab(space_id)
+
+    hdferr = 0
+    IsRegular = .FALSE.
+    IF(status.GT.0)THEN
+       IsRegular = .TRUE.
+    ELSE IF(status.LT.0)THEN
+       hdferr = -1
+    ENDIF
+
+  END SUBROUTINE H5Sis_regular_hyperslab_f
+
 END MODULE H5S
diff --git a/fortran/src/H5_buildiface.F90 b/fortran/src/H5_buildiface.F90
index 9a42cbf..bd6ecc3 100644
--- a/fortran/src/H5_buildiface.F90
+++ b/fortran/src/H5_buildiface.F90
@@ -4,7 +4,7 @@
 !  Executable: H5_buildiface
 !
 ! FILE
-!  fortran/src/H5_buildiface.f90
+!  fortran/src/H5_buildiface.F90
 !
 ! PURPOSE
 !  This stand alone program is used at build time to generate the module
@@ -60,13 +60,6 @@ PROGRAM H5_buildiface
   H5_H5CONFIG_F_IKIND
 
   INTEGER :: i, j, k
-  INTEGER :: ji, jr, jd
-#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
-  REAL(KIND=C_LONG_DOUBLE) :: c_longdble
-#endif
-  REAL(KIND=C_DOUBLE) :: c_dble
-  REAL(KIND=C_FLOAT) :: c_flt
-  INTEGER :: sizeof_var
   CHARACTER(LEN=2) :: chr2
 ! subroutine rank of array being passed in
   CHARACTER(LEN=2), DIMENSION(1:8), PARAMETER :: chr_rank=(/"_0","_1","_2","_3","_4","_5","_6","_7"/)
@@ -717,45 +710,9 @@ PROGRAM H5_buildiface
      WRITE(11,'(A)') '         file_space_id_default, xfer_prp_default, f_ptr)'
      WRITE(11,'(A)') '  END SUBROUTINE h5dread_ckind_rank'//chr_rank(j)
   ENDDO
-!
+!**********************
 ! h5dwrite_f
-
-!****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
-!*****
+!**********************
   DO i = 1, num_rkinds
      k = rkind(i)
      WRITE(chr2,'(I2)') k
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index f3bc42f..d7b952d 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -476,6 +476,10 @@ h5init_flags_c( int_f *h5d_flags, size_t_f *h5d_size_flags,
     h5d_flags[22] = (int_f)H5D_MPIO_CHUNK_COLLECTIVE;
     h5d_flags[23] = (int_f)H5D_MPIO_CHUNK_MIXED;
     h5d_flags[24] = (int_f)H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+    h5d_flags[25] = (int_f)H5D_VDS_ERROR;
+    h5d_flags[26] = (int_f)H5D_VDS_FIRST_MISSING;
+    h5d_flags[27] = (int_f)H5D_VDS_LAST_AVAILABLE;
+    h5d_flags[28] = (int_f)H5D_VIRTUAL;
 
 /*
  *  H5E flags
diff --git a/fortran/src/H5f90.h b/fortran/src/H5f90.h
index c45cfcb..7082d1d 100644
--- a/fortran/src/H5f90.h
+++ b/fortran/src/H5f90.h
@@ -22,7 +22,7 @@
 #include "H5f90i.h"
 #include "H5f90proto.h"
 
-/* Constants used in H5Rff.f90 and H5Rf.c files */
+/* Constants used in H5Rff.F90 and H5Rf.c files */
 #define REF_REG_BUF_LEN_F    3
 
 /* Constants used in H5Gf.c files */
diff --git a/fortran/src/H5f90global.F90 b/fortran/src/H5f90global.F90
index 947eff4..eb7f99f 100644
--- a/fortran/src/H5f90global.F90
+++ b/fortran/src/H5f90global.F90
@@ -4,7 +4,7 @@
 !  MODULE H5GLOBAL
 !
 ! FILE
-!  src/fortran/H5f90global.f90
+!  src/fortran/H5f90global.F90
 !
 ! PURPOSE
 !  This module is used to pass C stubs for H5 Fortran APIs. The C stubs are
@@ -46,12 +46,19 @@ MODULE H5GLOBAL
 
   IMPLICIT NONE
 
+  ! Enumerate data type that is interoperable with C.
+  ENUM, BIND(C)
+    ENUMERATOR :: enum_dtype
+  END ENUM
+  INTEGER, PARAMETER :: ENUM_T = KIND(enum_dtype)
+  
+
   ! Definitions for reference datatypes.
   ! If you change the value of these parameters, do not forget to change corresponding
   ! values in the H5f90.h file.
   INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
 
-  ! Parameters used in the function 'h5kind_to_type' located in H5_ff.f90.
+  ! Parameters used in the function 'h5kind_to_type' located in H5_ff.F90.
   ! The flag is used to tell the function whether the kind input variable
   ! is for a REAL or INTEGER data type.
 
@@ -366,11 +373,11 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5G_flags(10), H5G_STORAGE_TYPE_SYMBOL_TABLE_F)
   EQUIVALENCE(H5G_flags(11), H5G_STORAGE_TYPE_COMPACT_F)
   EQUIVALENCE(H5G_flags(12), H5G_STORAGE_TYPE_DENSE_F)
+
   !
   ! H5D flags declaration
   !
-
-  INTEGER, PARAMETER :: H5D_FLAGS_LEN = 25
+  INTEGER, PARAMETER :: H5D_FLAGS_LEN = 29
   INTEGER :: H5D_flags(H5D_FLAGS_LEN)
   INTEGER, PARAMETER :: H5D_SIZE_FLAGS_LEN = 2
   INTEGER(SIZE_T) :: H5D_size_flags(H5D_SIZE_FLAGS_LEN)
@@ -418,6 +425,10 @@ MODULE H5GLOBAL
   INTEGER :: H5D_MPIO_CHUNK_COLLECTIVE_F
   INTEGER :: H5D_MPIO_CHUNK_MIXED_F
   INTEGER :: H5D_MPIO_CONTIG_COLLECTIVE_F
+  INTEGER :: H5D_VDS_ERROR_F
+  INTEGER :: H5D_VDS_FIRST_MISSING_F
+  INTEGER :: H5D_VDS_LAST_AVAILABLE_F
+  INTEGER :: H5D_VIRTUAL_F
 
   EQUIVALENCE(H5D_flags(1), H5D_COMPACT_F)
   EQUIVALENCE(H5D_flags(2), H5D_CONTIGUOUS_F)
@@ -449,6 +460,10 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5D_flags(23), H5D_MPIO_CHUNK_COLLECTIVE_F)
   EQUIVALENCE(H5D_flags(24), H5D_MPIO_CHUNK_MIXED_F)
   EQUIVALENCE(H5D_flags(25), H5D_MPIO_CONTIG_COLLECTIVE_F)
+  EQUIVALENCE(H5D_flags(26), H5D_VDS_ERROR_F)
+  EQUIVALENCE(H5D_flags(27), H5D_VDS_FIRST_MISSING_F)
+  EQUIVALENCE(H5D_flags(28), H5D_VDS_LAST_AVAILABLE_F)
+  EQUIVALENCE(H5D_flags(29), H5D_VIRTUAL_F)
 
   EQUIVALENCE(H5D_size_flags(1), H5D_CHUNK_CACHE_NSLOTS_DFLT_F)
   EQUIVALENCE(H5D_size_flags(2), H5D_CHUNK_CACHE_NBYTES_DFLT_F)
@@ -993,7 +1008,6 @@ CONTAINS
     IMPLICIT NONE
     CHARACTER(LEN=*), INTENT(IN) :: f_string
     CHARACTER(KIND=C_CHAR, LEN=*), INTENT(OUT) :: c_string
-    INTEGER(SIZE_T) :: c_len, f_len
 
     c_string = TRIM(f_string)//C_NULL_CHAR
 
diff --git a/fortran/src/H5fortkit.F90 b/fortran/src/H5fortkit.F90
new file mode 100644
index 0000000..3062c28
--- /dev/null
+++ b/fortran/src/H5fortkit.F90
@@ -0,0 +1,66 @@
+!****h* ROBODoc/H5fortkit
+!
+! NAME
+!  MODULE H5fortkit
+!
+! FILE
+!  fortran/src/H5fortkit.F90
+!
+! PURPOSE
+!  Routines to deal with C-FORTRAN issues.
+!
+! 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 H5fortkit
+
+CONTAINS
+
+!****if* H5fortkit/HD5c2fstring
+! NAME
+!  HD5c2fstring
+! INPUTS
+!  cstring  -  C string stored as a string array of size 'len' of string size LEN=1
+!  len      -  length of Fortran string
+! OUTPUT
+!   fstring -  Fortran string array of LEN=1
+! PURPOSE
+!   Copies a Fortran array of strings having a length of one to a fortran string and removes the C Null
+!   terminator. The Null terminator is returned from C when calling the C APIs directly.
+!
+!   The fortran standard does not allow C_LOC to be used on a character string of
+!   length greater than one, which is why we use the array of characters instead.
+!
+! SOURCE
+  SUBROUTINE HD5c2fstring(fstring,cstring,len)
+!*****
+    IMPLICIT NONE
+
+    INTEGER :: i
+    INTEGER :: len
+    CHARACTER(LEN=len) :: fstring
+    CHARACTER(LEN=1), DIMENSION(1:len) :: cstring 
+    
+    fstring = ''
+    DO i = 1, len
+       IF (cstring(i)(1:1)==CHAR(0)) EXIT
+       fstring(i:i) = cstring(i)(1:1)
+    END DO
+
+  END SUBROUTINE HD5c2fstring
+
+END MODULE H5fortkit
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index f995e83..98128db 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -52,7 +52,7 @@ FILE * fort_header;
 void writeTypedef(const char* c_typedef, const char* c_type, int size);
 void writeTypedefDefault(const char* c_typedef, int size);
 void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c_type, int size, int kind);
-void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, char* kind);
+void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, const char* kind);
 
 static void
 initCfile(void)
@@ -140,7 +140,7 @@ void writeToFiles(const char* c_typedef, const char* fortran_type, const char* c
   fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %u\n", fortran_type, kind);
   fprintf(c_header, "typedef c_%s_%d %s;\n", c_typedef, size, c_type);
 }
-void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, char* kind)
+void writeToFilesChr(const char* c_typedef, const char* fortran_type, const char* c_type, int size, const char* kind)
 {
   fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %s\n", fortran_type, kind);
   fprintf(c_header, "typedef c_%s_%d %s;\n", c_typedef, size, c_type);
diff --git a/fortran/src/HDF5.F90 b/fortran/src/HDF5.F90
index 64f5be6..cbe4c83 100644
--- a/fortran/src/HDF5.F90
+++ b/fortran/src/HDF5.F90
@@ -4,7 +4,7 @@
 !  MODULE HDF5
 !
 ! FILE
-!  src/fortran/src/HDF5.f90
+!  src/fortran/src/HDF5.F90
 !
 ! PURPOSE
 !  This is the main module used for linking to the Fortran HDF library.
diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am
index eb45f60..f4d192b 100644
--- a/fortran/src/Makefile.am
+++ b/fortran/src/Makefile.am
@@ -46,9 +46,9 @@ endif
 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_gen.f90 \
+          H5Tff.F90 H5Zff.F90 H5_gen.F90 H5fortkit.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
+          H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c HDF5.F90
 
 # HDF5 Fortran library depends on HDF5 Library. 
 libhdf5_fortran_la_LIBADD=$(LIBHDF5)
@@ -153,7 +153,7 @@ H5Gff.lo:            $(srcdir)/H5Gff.F90 H5f90global.lo
 H5Iff.lo:            $(srcdir)/H5Iff.F90 H5f90global.lo
 H5Lff.lo:            $(srcdir)/H5Lff.F90 H5f90global.lo
 H5Off.lo:            $(srcdir)/H5Off.F90 H5f90global.lo
-H5Pff.lo:            $(srcdir)/H5Pff.F90 H5f90global.lo
+H5Pff.lo:            $(srcdir)/H5Pff.F90 H5f90global.lo H5fortkit.lo
 H5Rff.lo:            $(srcdir)/H5Rff.F90 H5f90global.lo
 H5Sff.lo:            $(srcdir)/H5Sff.F90 H5f90global.lo
 H5Tff.lo:            $(srcdir)/H5Tff.F90 H5f90global.lo
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index 8f1f95c..6d973d0 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -120,10 +120,23 @@ TESTS =
 subdir = fortran/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -164,9 +177,9 @@ libhdf5_fortran_la_DEPENDENCIES = $(LIBHDF5)
 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_gen.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 HDF5.lo
+	H5_gen.lo H5fortkit.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 HDF5.lo
 libhdf5_fortran_la_OBJECTS = $(am_libhdf5_fortran_la_OBJECTS)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -229,13 +242,6 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
-LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
-AM_V_FC = $(am__v_FC_ at AM_V@)
-am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
-am__v_FC_0 = @echo "  FC      " $@;
-am__v_FC_1 = 
 SOURCES = $(libhdf5_fortran_la_SOURCES) $(H5_buildiface_SOURCES) \
 	H5match_types.c
 DIST_SOURCES = $(libhdf5_fortran_la_SOURCES) $(H5_buildiface_SOURCES) \
@@ -464,18 +470,22 @@ AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ -I$(top_srcdir)/src \
 	-I$(top_srcdir)/fortran/src
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ $(am__append_1)
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -488,7 +498,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -526,10 +535,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -540,6 +553,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -550,8 +564,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -566,6 +592,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -573,6 +601,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -596,6 +625,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -611,7 +641,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -620,8 +652,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -700,6 +734,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
@@ -753,9 +788,9 @@ libhdf5_fortran_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISI
 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_gen.f90 \
+          H5Tff.F90 H5Zff.F90 H5_gen.F90 H5fortkit.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
+          H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c HDF5.F90
 
 
 # HDF5 Fortran library depends on HDF5 Library. 
@@ -963,12 +998,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-.f90.obj:
-	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
-
-.f90.lo:
-	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -1425,7 +1454,7 @@ H5Gff.lo:            $(srcdir)/H5Gff.F90 H5f90global.lo
 H5Iff.lo:            $(srcdir)/H5Iff.F90 H5f90global.lo
 H5Lff.lo:            $(srcdir)/H5Lff.F90 H5f90global.lo
 H5Off.lo:            $(srcdir)/H5Off.F90 H5f90global.lo
-H5Pff.lo:            $(srcdir)/H5Pff.F90 H5f90global.lo
+H5Pff.lo:            $(srcdir)/H5Pff.F90 H5f90global.lo H5fortkit.lo
 H5Rff.lo:            $(srcdir)/H5Rff.F90 H5f90global.lo
 H5Sff.lo:            $(srcdir)/H5Sff.F90 H5f90global.lo
 H5Tff.lo:            $(srcdir)/H5Tff.F90 H5f90global.lo
diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in
index 1333262..3a5a91f 100644
--- a/fortran/src/hdf5_fortrandll.def.in
+++ b/fortran/src/hdf5_fortrandll.def.in
@@ -318,12 +318,26 @@ H5P_mp_H5PREGISTER_PTR
 H5P_mp_H5PINSERT_PTR
 H5P_mp_H5PGET_FILE_IMAGE_F
 H5P_mp_H5PSET_FILE_IMAGE_F
+H5P_mp_H5PSET_VIRTUAL_VIEW_F
+H5P_mp_H5PGET_VIRTUAL_VIEW_F
+H5P_mp_H5PSET_VIRTUAL_PRINTF_GAP_F
+H5P_mp_H5PGET_VIRTUAL_PRINTF_GAP_F
+H5P_mp_H5PSET_VIRTUAL_F
+H5P_mp_H5PGET_VIRTUAL_COUNT_F
+H5P_mp_H5PGET_VIRTUAL_VSPACE_F
+H5P_mp_H5PGET_VIRTUAL_SRCSPACE_F
+H5P_mp_H5PGET_VIRTUAL_FILENAME_F
+H5P_mp_H5PGET_VIRTUAL_DSETNAME_F
 ; Parallel
 @H5_NOPAREXP at H5P_mp_H5PSET_FAPL_MPIO_F
 @H5_NOPAREXP at H5P_mp_H5PGET_FAPL_MPIO_F
 @H5_NOPAREXP at H5P_mp_H5PSET_DXPL_MPIO_F
 @H5_NOPAREXP at H5P_mp_H5PGET_DXPL_MPIO_F
 @H5_NOPAREXP at H5P_mp_H5PGET_MPIO_ACTUAL_IO_MODE_F
+ at H5_NOPAREXP@H5P_mp_H5PSET_ALL_COLL_METADATA_OPS_F
+ at H5_NOPAREXP@H5P_mp_H5PGET_ALL_COLL_METADATA_OPS_F
+ at H5_NOPAREXP@H5P_mp_H5PSET_COLL_METADATA_WRITE_F
+ at H5_NOPAREXP@H5P_mp_H5PGET_COLL_METADATA_WRITE_F
 ; H5R
 H5R_mp_H5RCREATE_OBJECT_F
 H5R_mp_H5RCREATE_REGION_F
@@ -367,6 +381,8 @@ H5S_mp_H5SGET_SELECT_TYPE_F
 H5S_mp_H5SDECODE_F
 H5S_mp_H5SENCODE_F
 H5S_mp_H5SEXTENT_EQUAL_F
+H5S_mp_H5SGET_REGULAR_HYPERSLAB_F
+H5S_mp_H5SIS_REGULAR_HYPERSLAB_F
 ; H5T
 H5T_mp_H5TOPEN_F
 H5T_mp_H5TCOMMIT_F
diff --git a/fortran/test/CMakeLists.txt b/fortran/test/CMakeLists.txt
index 0cbd17f..005a5c8 100644
--- a/fortran/test/CMakeLists.txt
+++ b/fortran/test/CMakeLists.txt
@@ -65,7 +65,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
       ${HDF5_F90_C_LIBSH_TARGET}
       ${HDF5_TEST_LIBSH_TARGET}
   )
-  H5_SET_LIB_OPTIONS (${HDF5_F90_C_TEST_LIBSH_TARGET} ${HDF5_F90_C_TEST_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_F90_C_TEST_LIBSH_TARGET} ${HDF5_F90_C_TEST_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_F90_C_TEST_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/test/fortran
       LINKER_LANGUAGE C
@@ -128,7 +128,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
       ${HDF5_F90_LIBSH_TARGET}
       ${HDF5_LIBSH_TARGET}
   )
-  H5_SET_LIB_OPTIONS (${HDF5_F90_TEST_LIBSH_TARGET} ${HDF5_F90_TEST_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_F90_TEST_LIBSH_TARGET} ${HDF5_F90_TEST_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
   target_include_directories (${HDF5_F90_TEST_LIBSH_TARGET} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY}/shared)
   set_target_properties (${HDF5_F90_TEST_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/test/fortran
diff --git a/fortran/test/H5_test_buildiface.F90 b/fortran/test/H5_test_buildiface.F90
index 30687df..8b27a96 100644
--- a/fortran/test/H5_test_buildiface.F90
+++ b/fortran/test/H5_test_buildiface.F90
@@ -1,10 +1,10 @@
-!****p* Program/H5_buildiface
+!****p* Program/H5_test_buildiface
 !
 ! NAME
-!  Executable: H5_buildiface
+!  Executable: H5_test_buildiface
 !
 ! FILE
-!  fortran/src/H5_buildiface.f90
+!  fortran/src/H5_test_buildiface.F90
 !
 ! PURPOSE
 !  This stand alone program is used at build time to generate the program
@@ -60,38 +60,7 @@ PROGRAM H5_test_buildiface
   H5_H5CONFIG_F_IKIND
 
   INTEGER :: i, j, k
-  INTEGER :: ji, jr, jd
-#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
-  REAL(KIND=C_LONG_DOUBLE) :: c_longdble
-#endif
-  REAL(KIND=C_DOUBLE) :: c_dble
-  REAL(KIND=C_FLOAT) :: c_flt
-  INTEGER :: sizeof_var
   CHARACTER(LEN=2) :: chr2
-! subroutine rank of array being passed in
-  CHARACTER(LEN=2), DIMENSION(1:8), PARAMETER :: chr_rank=(/"_0","_1","_2","_3","_4","_5","_6","_7"/)
-! rank definitions
-  CHARACTER(LEN=70), DIMENSION(1:8), PARAMETER :: rank_dim_line=(/ &
-       '                                                                    ', &
-       ', DIMENSION(dims(1))                                                ', &
-       ', DIMENSION(dims(1),dims(2))                                        ', &
-       ', DIMENSION(dims(1),dims(2),dims(3))                                ', &
-       ', DIMENSION(dims(1),dims(2),dims(3),dims(4))                        ', &
-       ', DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5))                ', &
-       ', DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6))        ', &
-       ', DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7))' &
-            /)
-! pointer to the buffer
-  CHARACTER(LEN=37), DIMENSION(1:8), PARAMETER :: f_ptr_line=(/ &
-       '    f_ptr = C_LOC(buf)               ', &
-       '    f_ptr = C_LOC(buf(1))            ', &
-       '    f_ptr = C_LOC(buf(1,1))          ', &
-       '    f_ptr = C_LOC(buf(1,1,1))        ', &
-       '    f_ptr = C_LOC(buf(1,1,1,1))      ', &
-       '    f_ptr = C_LOC(buf(1,1,1,1,1))    ', &
-       '    f_ptr = C_LOC(buf(1,1,1,1,1,1))  ', &
-       '    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))' &
-            /)
 
 ! Generate Fortran Check routines for the tests KIND interfaces.
 
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in
index 65b6a43..d30051c 100644
--- a/fortran/test/Makefile.in
+++ b/fortran/test/Makefile.in
@@ -104,10 +104,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = fortran/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -468,18 +481,22 @@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 # Include files
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ -I$(top_builddir)/fortran/src \
 	$(F9XMODFLAG)$(top_builddir)/fortran/src
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ $(am__append_1)
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -492,7 +509,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -530,10 +546,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -544,6 +564,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -554,8 +575,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -570,6 +603,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -577,6 +612,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -600,6 +636,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -615,7 +652,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -624,8 +663,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -704,6 +745,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/fortran/test/fortranlib_test_F03.F90 b/fortran/test/fortranlib_test_F03.F90
index 5b386b9..070cd73 100644
--- a/fortran/test/fortranlib_test_F03.F90
+++ b/fortran/test/fortranlib_test_F03.F90
@@ -174,6 +174,14 @@ PROGRAM fortranlibtest_F03
   CALL test_get_file_image(ret_total_error)
   CALL write_test_status(ret_total_error, ' Testing get file image ', total_error)
 
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing VDS                              '
+!     write(*,*) '========================================='
+
+  ret_total_error = 0
+  CALL test_vds(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing vds ', total_error)
 
   WRITE(*,*)
 
diff --git a/fortran/test/tH5D.F90 b/fortran/test/tH5D.F90
index c9ba952..849f5eb 100644
--- a/fortran/test/tH5D.F90
+++ b/fortran/test/tH5D.F90
@@ -530,7 +530,6 @@ CONTAINS
     INTEGER(hid_t) :: file, fcpl, dataset, space
     INTEGER :: i, j, n, ios
     INTEGER(hsize_t), DIMENSION(1:2) ::	dims
-    INTEGER :: f
     INTEGER(haddr_t) :: offset
     INTEGER, DIMENSION(1:dset_dim1,1:dset_dim2), TARGET :: rdata, data_in
     INTEGER :: error
diff --git a/fortran/test/tH5F.F90 b/fortran/test/tH5F.F90
index 0b3c275..020d2c8 100644
--- a/fortran/test/tH5F.F90
+++ b/fortran/test/tH5F.F90
@@ -357,13 +357,6 @@ CONTAINS
           end do
 
           !
-          !Initialize FORTRAN predifined datatypes
-          !
-!          CALL h5init_types_f(error)
-!               CALL check("h5init_types_f",error,total_error)
-
-
-          !
           !Create file "reopen.h5" using default properties.
           !
           CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
diff --git a/fortran/test/tH5F_F03.F90 b/fortran/test/tH5F_F03.F90
index 9e23d19..e70c1aa 100644
--- a/fortran/test/tH5F_F03.F90
+++ b/fortran/test/tH5F_F03.F90
@@ -1,7 +1,7 @@
-!****h* root/fortran/test/tH5F_F03.f90
+!****h* root/fortran/test/tH5F_F03
 !
 ! NAME
-!  tH5F_F03.f90
+!  tH5F_F03.F90
 !
 ! FUNCTION
 !  Test FORTRAN HDF5 H5F APIs which are dependent on FORTRAN 2003
@@ -62,7 +62,7 @@ SUBROUTINE test_get_file_image(total_error)
   INTEGER(hid_t) :: dset_id = -1  ! Dataset identifier
   INTEGER(hid_t) :: space_id = -1 ! Dataspace identifier
   INTEGER(hsize_t), DIMENSION(1:2) :: dims  ! Dataset dimensions
-  INTEGER(size_t) :: itmp_a, itmp_b ! General purpose integers
+  INTEGER(size_t) :: itmp_a ! General purpose integer
   INTEGER(size_t) :: image_size     ! Size of image
   TYPE(C_PTR) :: f_ptr            ! Pointer
   INTEGER(hid_t) :: fapl          ! File access property
diff --git a/fortran/test/tH5P_F03.F90 b/fortran/test/tH5P_F03.F90
index 8982fc2..18af36b 100644
--- a/fortran/test/tH5P_F03.F90
+++ b/fortran/test/tH5P_F03.F90
@@ -1,7 +1,7 @@
-!****h* root/fortran/test/tH5P_F03.f90
+!****h* root/fortran/test/TH5P_F03
 !
 ! NAME
-!  tH5P_F03.f90
+!  tH5P_F03.F90
 !
 ! FUNCTION
 !  Test FORTRAN HDF5 H5P APIs which are dependent on FORTRAN 2003
@@ -110,7 +110,6 @@ SUBROUTINE test_create(total_error)
   INTEGER :: error
   INTEGER(SIZE_T) :: h5off
   TYPE(C_PTR) :: f_ptr
-  LOGICAL :: differ1, differ2
   CHARACTER(LEN=1) :: cfill
   INTEGER :: ifill
   REAL :: rfill
@@ -617,4 +616,473 @@ SUBROUTINE external_test_offset(cleanup,total_error)
   CALL check("h5_cleanup_f", error, total_error)
 
 END SUBROUTINE external_test_offset
+
+!-------------------------------------------------------------------------
+! NAME
+!  test_vds
+!
+! FUNCTION
+!  Tests VDS API wrappers
+!
+! RETURNS:
+!   Success:	0
+!   Failure:	number of errors
+!
+! FORTRAN Programmer:  M. Scot Breitenfeld
+!                      February 1, 2016
+!
+!-------------------------------------------------------------------------
+!
+SUBROUTINE test_vds(total_error)
+
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(9)   !should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(18) !should map to INTEGER*8 on most modern processors
+
+  CHARACTER(LEN=6), PARAMETER ::  VFILENAME="vds.h5"
+  CHARACTER(LEN=3), PARAMETER :: DATASET="VDS"
+  INTEGER :: VDSDIM0
+  INTEGER, PARAMETER :: VDSDIM1 = 10
+  INTEGER, PARAMETER :: VDSDIM2 = 15 
+
+  INTEGER :: DIM0
+  INTEGER, PARAMETER :: DIM0_1= 4  ! Initial size of the source datasets
+  INTEGER, PARAMETER :: DIM1 = 10 
+  INTEGER, PARAMETER :: DIM2 = 15 
+  INTEGER, PARAMETER :: RANK =  3
+  INTEGER(hsize_t), PARAMETER :: PLANE_STRIDE = 4
+
+  CHARACTER(LEN=4), DIMENSION(1:PLANE_STRIDE) :: SRC_FILE = (/"a.h5","b.h5","c.h5","d.h5"/)
+  CHARACTER(LEN=3), DIMENSION(1:PLANE_STRIDE) :: SRC_DATASET = (/"AAA","BBB","CCC","DDD"/)
+
+
+  INTEGER(hid_t) :: vfile, file, src_space, mem_space, vspace, vdset, dset !Handles
+  INTEGER(hid_t) :: dcpl, dapl
+  INTEGER :: error
+  INTEGER(hsize_t), DIMENSION(1:3) :: vdsdims = (/4*DIM0_1, VDSDIM1, VDSDIM2/), &
+                 vdsdims_max, &
+                 dims = (/DIM0_1, DIM1, DIM2/), &
+                 memdims = (/DIM0_1, DIM1, DIM2/), &
+                 extdims = (/0, DIM1, DIM2/), & ! Dimensions of the extended source datasets
+                 chunk_dims = (/DIM0_1, DIM1, DIM2/), &
+                 dims_max, &
+                 vdsdims_out, vdsdims_max_out, &
+                 start, &                   ! Hyperslab parameters
+                 stride, &
+                 count, &
+                 src_count, block
+  INTEGER(hsize_t), DIMENSION(1:2,1:3) :: vdsdims_out_correct
+
+  INTEGER(hsize_t), DIMENSION(1:3) :: start_out, &  !Hyperslab PARAMETER out 
+                 stride_out, count_out, block_out
+  INTEGER(hsize_t), DIMENSION(1:3,1:PLANE_STRIDE) :: start_correct
+
+  INTEGER :: i, j
+  INTEGER :: layout                     ! Storage layout
+  INTEGER(size_t) :: num_map            ! Number of mappings 
+  INTEGER(size_t) :: len                ! Length of the string also a RETURN value 
+  ! Different sized character buffers
+  CHARACTER(len=LEN(SRC_FILE(1))-3)  :: SRC_FILE_LEN_TINY
+  CHARACTER(len=LEN(SRC_FILE(1))-1)  :: SRC_FILE_LEN_SMALL
+  CHARACTER(len=LEN(SRC_FILE(1)))    :: SRC_FILE_LEN_EXACT
+  CHARACTER(len=LEN(SRC_FILE(1))+1)  :: SRC_FILE_LEN_LARGE
+  CHARACTER(len=LEN(SRC_FILE(1))+10) :: SRC_FILE_LEN_HUGE
+  CHARACTER(len=LEN(SRC_DATASET(1))) :: SRC_DATASET_LEN_EXACT
+
+  INTEGER(HID_T) :: space_out 
+
+  INTEGER :: s_type, virtual_view
+  INTEGER :: type1, type2
+
+  INTEGER, DIMENSION(DIM0_1*DIM1*DIM2), TARGET :: wdata
+  TYPE(C_PTR) :: f_ptr
+  INTEGER(SIZE_T) :: nsize
+  LOGICAL :: IsRegular
+  INTEGER(HSIZE_T) :: gap_size 
+
+  ! For testing against
+  vdsdims_out_correct(1,1) = DIM0_1*5
+  vdsdims_out_correct(2,1) = DIM0_1*8
+  vdsdims_out_correct(1:2,2) = VDSDIM1 
+  vdsdims_out_correct(1:2,3) = VDSDIM2 
+
+  VDSDIM0 = H5S_UNLIMITED_F
+  DIM0 = H5S_UNLIMITED_F
+  vdsdims_max = (/VDSDIM0, VDSDIM1, VDSDIM2/)
+  dims_max = (/DIM0, DIM1, DIM2/)
+
+  !
+  ! Create source files and datasets. 
+  !
+  DO i = 1, PLANE_STRIDE
+     !
+     ! Initialize data for i-th source dataset.
+     DO j = 1, DIM0_1*DIM1*DIM2
+        wdata(j) = i
+     ENDDO
+     !
+     ! Create the source files and  datasets. Write data to each dataset and 
+     ! close all resources.
+     CALL h5fcreate_f(SRC_FILE(i), H5F_ACC_TRUNC_F, file, error)
+     CALL check("h5fcreate_f", error, total_error)
+
+     CALL h5screate_simple_f(RANK, dims,  src_space, error, dims_max)
+     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, RANK, chunk_dims, error)
+     CALL check("h5pset_chunk_f",error, total_error)
+     
+     CALL h5dcreate_f(file, SRC_DATASET(i), H5T_NATIVE_INTEGER, src_space, dset, error, dcpl, H5P_DEFAULT_F, H5P_DEFAULT_F)
+     CALL check("h5dcreate_f",error, total_error)
+     f_ptr = C_LOC(wdata(1))
+     CALL H5Dwrite_f(dset, H5T_NATIVE_INTEGER, f_ptr, error)
+     CALL check("H5Dwrite_f",error, total_error)
+     CALL H5Sclose_f(src_space, error)
+     CALL check("H5Sclose_f",error, total_error)
+     CALL H5Pclose_f(dcpl, error)
+     CALL check("H5Pclose_f",error, total_error)
+     CALL H5Dclose_f(dset, error)
+     CALL check("H5Dclose_f",error, total_error)
+     CALL H5Fclose_f(file, error)
+     CALL check("H5Fclose_f",error, total_error)
+  ENDDO
+
+  CALL h5fcreate_f(VFILENAME, H5F_ACC_TRUNC_F, vfile, error)
+  CALL check("h5fcreate_f", error, total_error)
+
+  ! Create VDS dataspace.
+  CALL H5Screate_simple_f(RANK, vdsdims, vspace, error, vdsdims_max)
+  CALL check("H5Screate_simple_f", error, total_error)
+
+  ! Create dataspaces for the source dataset.
+  CALL H5Screate_simple_f(RANK, dims, src_space, error, dims_max)
+  CALL check("H5Screate_simple_f", error, total_error)
+  
+  ! Create VDS creation property
+  CALL H5Pcreate_f (H5P_DATASET_CREATE_F, dcpl, error)
+  CALL check("H5Pcreate_f", error, total_error)
+     
+  ! Initialize hyperslab values 
+  start(1:3) = 0
+  stride(1:3) = (/PLANE_STRIDE,1_hsize_t,1_hsize_t/) ! we will select every fifth plane in VDS 
+  count(1:3) = (/H5S_UNLIMITED_F,1_hsize_t,1_hsize_t/)
+  src_count(1:3) = (/H5S_UNLIMITED_F,1_hsize_t,1_hsize_t/)
+  block(1:3) = (/1, DIM1, DIM2/)
+  
+  ! 
+  ! Build the mappings 
+  !
+  start_correct = 0
+  CALL H5Sselect_hyperslab_f(src_space, H5S_SELECT_SET_F, start, src_count, error, block=block)
+  CALL check("H5Sselect_hyperslab_f", error, total_error)
+  DO i = 1, PLANE_STRIDE
+     start_correct(1,i) = start(1)
+     CALL H5Sselect_hyperslab_f(vspace, H5S_SELECT_SET_F, start, count, error, stride=stride, block=block)
+     CALL check("H5Sselect_hyperslab_f", error, total_error)
+
+     IF(i.eq.1)THEN ! check src_file and src_dataset with trailing blanks
+        CALL H5Pset_virtual_f (dcpl, vspace, SRC_FILE(i)//"   ", SRC_DATASET(i)//"   ", src_space, error)
+     ELSE
+        CALL H5Pset_virtual_f (dcpl, vspace, SRC_FILE(i), SRC_DATASET(i), src_space, error)
+     ENDIF
+     CALL check("H5Pset_virtual_f", error, total_error)
+     start(1) = start(1) + 1
+  ENDDO
+
+  CALL H5Sselect_none_f(vspace, error) 
+  CALL check("H5Sselect_none_f", error, total_error)
+
+  ! Create a virtual dataset 
+  CALL H5Dcreate_f(vfile, DATASET, H5T_NATIVE_INTEGER, vspace, vdset, error, dcpl, H5P_DEFAULT_F, H5P_DEFAULT_F)
+  CALL check("H5Dcreate_f", error, total_error)
+  CALL H5Sclose_f(vspace, error)
+  CALL check("H5Sclose_f", error, total_error)
+  CALL H5Sclose_f(src_space, error)
+  CALL check("H5Sclose_f", error, total_error)
+  CALL H5Pclose_f(dcpl, error)
+  CALL check("H5Pclose_f", error, total_error)
+
+  ! Let's add data to the source datasets and check new dimensions for VDS 
+  ! We will add only one plane to the first source dataset, two planes to the
+  ! second one, three to the third, and four to the forth.                 
+
+  DO i = 1, PLANE_STRIDE
+     !
+     ! Initialize data for i-th source dataset.
+     DO j = 1, i*DIM1*DIM2
+        wdata(j) = 10*i
+     ENDDO
+
+     !
+     ! Open the source files and datasets. Append data to each dataset and 
+     ! close all resources.
+     CALL H5Fopen_f (SRC_FILE(i), H5F_ACC_RDWR_F, file, error)
+     CALL check("H5Fopen_f", error, total_error)
+     CALL H5Dopen_f (file, SRC_DATASET(i), dset, error)
+     CALL check("H5Dopen_f", error, total_error)
+     extdims(1) = DIM0_1+i
+     CALL H5Dset_extent_f(dset, extdims, error)  
+     CALL check("H5Dset_extent_f", error, total_error)     
+     CALL H5Dget_space_f(dset, src_space, error)
+     CALL check("H5Dget_space_f", error, total_error)
+
+     start(1:3) = (/DIM0_1,0,0/)
+     count(1:3) = 1
+     block(1:3) = (/i, DIM1, DIM2/)
+
+     memdims(1) = i
+
+     CALL H5Screate_simple_f(RANK, memdims, mem_space, error) 
+     CALL check("H5Screate_simple_f", error, total_error)
+
+     CALL H5Sselect_hyperslab_f(src_space, H5S_SELECT_SET_F, start,count, error,block=block) 
+     CALL check("H5Sselect_hyperslab_f", error, total_error)
+     f_ptr = C_LOC(wdata(1))
+     CALL H5Dwrite_f(dset, H5T_NATIVE_INTEGER, f_ptr, error, mem_space, src_space, H5P_DEFAULT_F) 
+     CALL check("H5Dwrite_f", error, total_error)
+     CALL H5Sclose_f(src_space, error)
+     CALL check("H5Sclose_f", error, total_error)
+     call H5Dclose_f(dset, error)
+     CALL check("H5Dclose_f", error, total_error)
+     call H5Fclose_f(file, error)
+     CALL check("H5Fclose_f", error, total_error)
+  ENDDO
+
+  call H5Dclose_f(vdset, error)
+  CALL check("H5Dclose_f", error, total_error)
+  call H5Fclose_f(vfile, error) 
+  CALL check("H5Fclose_f", error, total_error)
+   
+  !
+  ! begin the read section
+  !
+  ! Open file and dataset using the default properties.
+  CALL H5Fopen_f(VFILENAME, H5F_ACC_RDONLY_F, vfile, error)
+  CALL check("H5Fopen_f", error, total_error) 
+    
+  ! 
+  ! Open VDS using different access properties to use max or
+  ! min extents depending on the sizes of the underlying datasets
+  CALL H5Pcreate_f(H5P_DATASET_ACCESS_F, dapl, error)
+  CALL check("H5Pcreate_f", error, total_error) 
+
+  DO i = 1, 2
+
+     IF(i.NE.1)THEN
+        CALL H5Pset_virtual_view_f(dapl, H5D_VDS_LAST_AVAILABLE_F, error)
+        CALL check("H5Pset_virtual_view_f", error, total_error) 
+     ELSE
+        CALL H5Pset_virtual_view_f(dapl, H5D_VDS_FIRST_MISSING_F, error)
+        CALL check("H5Pset_virtual_view_f", error, total_error) 
+     ENDIF
+     
+     CALL H5Dopen_f(vfile, DATASET, vdset, error, dapl)
+     CALL check("H5Dopen_f", error, total_error) 
+
+     ! Let's get space of the VDS and its dimension we should get 32(or 20)x10x10
+     CALL H5Dget_space_f(vdset, vspace, error)
+     CALL check("H5Dget_space_f", error, total_error) 
+     CALL H5Sget_simple_extent_dims_f(vspace, vdsdims_out, vdsdims_max_out, error)
+     CALL check("H5Sget_simple_extent_dims_f", error, total_error)
+
+     ! check VDS dimensions
+     DO j = 1, RANK
+        IF(vdsdims_out(j).NE.vdsdims_out_correct(i,j))THEN
+           total_error = total_error + 1
+           EXIT 
+        ENDIF
+     ENDDO
+
+     CALL H5Pget_virtual_view_f(dapl, virtual_view, error)
+     CALL check("h5pget_virtual_view_f", error, total_error) 
+
+     IF(i.EQ.1)THEN
+        IF(virtual_view .NE. H5D_VDS_FIRST_MISSING_F)THEN
+           total_error = total_error + 1
+        ENDIF
+     ELSE
+        IF(virtual_view .NE. H5D_VDS_LAST_AVAILABLE_F)THEN
+           total_error = total_error + 1
+        ENDIF
+        
+     ENDIF
+
+     ! Close 
+     CALL H5Dclose_f(vdset, error)
+     CALL check("H5Dclose_f", error, total_error)
+     CALL H5Sclose_f(vspace, error)
+     CALL check("H5Sclose_f", error, total_error)
+  ENDDO
+
+  CALL H5Dopen_f(vfile, DATASET, vdset, error)
+  CALL check("H5Dopen_f", error, total_error)
+
+  !
+  ! Get creation property list and mapping properties.
+  !   
+  CALL H5Dget_create_plist_f (vdset, dcpl, error)
+  CALL check("H5Dget_create_plist_f", error, total_error)
+
+  !
+  ! Get storage layout.
+  CALL H5Pget_layout_f(dcpl, layout, error)
+  CALL check("H5Pget_layout_f", error, total_error)
+
+  IF (H5D_VIRTUAL_F .NE. layout) THEN
+     PRINT*,"Wrong layout found"
+     total_error = total_error + 1
+  ENDIF
+
+  !
+  ! Find number of mappings.
+      
+  CALL H5Pget_virtual_count_f(dcpl, num_map, error)
+  CALL check("H5Pget_virtual_count_f", error, total_error)
+
+  IF(num_map.NE.4_size_t)THEN
+     PRINT*,"Number of mappings is incorrect"
+     total_error = total_error + 1
+  ENDIF
+  ! 
+  ! Get mapping parameters for each mapping.
+  !
+  DO i = 1, num_map
+     CALL H5Pget_virtual_vspace_f(dcpl, INT(i-1,size_t), vspace, error)
+     CALL check("H5Pget_virtual_vspace_f", error, total_error)
+
+     CALL h5sget_select_type_f(vspace, s_type, error)
+     CALL check("h5sget_select_type_f", error, total_error)
+     IF(s_type.EQ.H5S_SEL_HYPERSLABS_F)THEN
+        CALL H5Sis_regular_hyperslab_f(vspace, IsRegular, error)
+        CALL check("H5Sis_regular_hyperslab_f", error, total_error)
+
+        IF(IsRegular)THEN
+           CALL H5Sget_regular_hyperslab_f(vspace, start_out, stride_out, count_out, block_out, error)
+           CALL check("H5Sget_regular_hyperslab_f", error, total_error)
+           DO j = 1, 3
+              IF(start_out(j).NE.start_correct(j,i) .OR. &
+                   stride_out(j).NE.stride(j).OR. &
+                   count_out(j).NE.src_count(j))THEN
+                 total_error = total_error + 1
+                 EXIT
+              ENDIF
+           ENDDO
+        ENDIF
+     END IF
+
+     ! Get source file name
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_EXACT, error, nsize)
+     CALL check("H5Pget_virtual_count_f", error, total_error)
+
+     IF(nsize.NE.LEN(SRC_FILE_LEN_EXACT))THEN
+        PRINT*,"virtual filenname size is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! check passing a buffer that is very small
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_TINY, error)
+     CALL check("H5Pget_virtual_filename_f", error, total_error)
+     IF(SRC_FILE_LEN_TINY.NE.SRC_FILE(i)(1:LEN(SRC_FILE_LEN_TINY)))THEN
+        PRINT*,"virtual filenname returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! check passing a buffer that small by one
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_SMALL, error)
+     CALL check("H5Pget_virtual_filename_f", error, total_error)
+     IF(SRC_FILE_LEN_SMALL.NE.SRC_FILE(i)(1:LEN(SRC_FILE_LEN_SMALL)))THEN
+        PRINT*,"virtual filenname returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! check passing a buffer that is exact
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_EXACT, error)
+     CALL check("H5Pget_virtual_filename_f", error, total_error)
+     IF(SRC_FILE_LEN_EXACT.NE.SRC_FILE(i)(1:LEN(SRC_FILE_LEN_EXACT)))THEN
+        PRINT*,"virtual filenname returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! check passing a buffer that bigger by one
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_LARGE, error)
+     CALL check("H5Pget_virtual_filename_f", error, total_error)
+     IF(SRC_FILE_LEN_LARGE(1:LEN(SRC_FILE_LEN_EXACT)).NE.SRC_FILE(i)(1:LEN(SRC_FILE_LEN_EXACT)).AND. &
+         SRC_FILE_LEN_LARGE(LEN(SRC_FILE_LEN_EXACT):).NE.'')THEN
+        PRINT*,"virtual filenname returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! check passing a buffer that is very big
+     CALL H5Pget_virtual_filename_f(dcpl, INT(i-1, size_t), SRC_FILE_LEN_HUGE, error)
+     CALL check("H5Pget_virtual_filename_f", error, total_error)
+     IF(SRC_FILE_LEN_HUGE(1:LEN(SRC_FILE_LEN_EXACT)).NE.SRC_FILE(i)(1:LEN(SRC_FILE_LEN_EXACT)).AND. &
+         SRC_FILE_LEN_HUGE(LEN(SRC_FILE_LEN_EXACT):).NE.'')THEN
+        PRINT*,"virtual filenname returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+     ! Get source dataset name
+     CALL H5Pget_virtual_dsetname_f(dcpl, INT(i-1, size_t), SRC_DATASET_LEN_EXACT, error, nsize)
+     CALL check("H5Pget_virtual_dsetname_f", error, total_error)
+
+     CALL H5Pget_virtual_dsetname_f(dcpl, INT(i-1, size_t), SRC_DATASET_LEN_EXACT, error)
+     CALL check("H5Pget_virtual_dsetname_f", error, total_error)
+     IF(SRC_DATASET_LEN_EXACT(1:LEN(SRC_DATASET_LEN_EXACT)).NE.SRC_DATASET(i)(1:LEN(SRC_DATASET_LEN_EXACT)).AND. &
+         SRC_DATASET_LEN_EXACT(LEN(SRC_DATASET_LEN_EXACT):).NE.'')THEN
+        PRINT*,"virtual dataset returned is incorrect"
+        total_error = total_error + 1
+     ENDIF
+
+     CALL h5pget_virtual_srcspace_f(dcpl, INT(i-1,size_t), space_out, error)
+     CALL check("H5Pget_virtual_srcspace_f", error, total_error)
+
+     CALL h5sget_select_type_f(space_out, type1, error)
+     CALL check("H5Sget_select_type_f", error, total_error)
+     CALL h5sget_select_type_f(vspace, type2, error)
+     CALL check("H5Sget_select_type_f", error, total_error)
+
+     IF(type1.NE.type2)THEN
+        total_error = total_error + 1
+     ENDIF
+
+  ENDDO
+  !
+  ! Close and release resources.
+
+  ! Clear virtual layout in DCPL
+  CALL h5pset_layout_f(dcpl, H5D_VIRTUAL_F,error)
+  CALL check("H5Pset_layout_f", error, total_error)
+
+  CALL H5Pclose_f(dcpl, error)
+  CALL check("H5Pclose_f", error, total_error)
+  CALL H5Dclose_f(vdset, error)
+  CALL check("H5Dclose_f", error, total_error)
+
+  ! Reopen VDS with printf gap set to 1
+
+  CALL H5Pset_virtual_printf_gap_f(dapl, 1_hsize_t, error)
+  CALL check("H5Pset_virtual_printf_gap_f", error, total_error)
+
+  CALL H5Dopen_f(vfile, DATASET, vdset, error, dapl)
+  CALL check("H5Dopen_f", error, total_error)
+
+  CALL H5Pget_virtual_printf_gap_f(dapl, gap_size, error)
+  CALL check("H5Pget_virtual_printf_gap_f", error, total_error)
+
+  IF(gap_size.NE.1_hsize_t)THEN
+     PRINT*,"gapsize is incorrect"
+     total_error = total_error + 1
+  ENDIF
+     
+  CALL H5Dclose_f(vdset, error)
+  CALL check("H5Dclose_f", error, total_error)
+  CALL H5Sclose_f(vspace, error)
+  CALL check("H5Sclose_f", error, total_error)
+  CALL H5Pclose_f(dapl, error)
+  CALL check("H5Pclose_f", error, total_error)
+  CALL H5Fclose_f(vfile, error)
+  CALL check("H5Fclose_f", error, total_error)
+ 
+END SUBROUTINE test_vds
+
+
 END MODULE TH5P_F03
diff --git a/fortran/test/tHDF5.F90 b/fortran/test/tHDF5.F90
index d12bb25..e9e0892 100644
--- a/fortran/test/tHDF5.F90
+++ b/fortran/test/tHDF5.F90
@@ -1,4 +1,4 @@
-!****h* ROBODoc/HDF5
+!****h* ROBODoc/THDF5
 !
 ! NAME
 !  MODULE THDF5
diff --git a/fortran/test/tHDF5_1_8.F90 b/fortran/test/tHDF5_1_8.F90
index 9d1c3ec..6a3f74b 100644
--- a/fortran/test/tHDF5_1_8.F90
+++ b/fortran/test/tHDF5_1_8.F90
@@ -1,4 +1,4 @@
-!****h* ROBODoc/HDF5
+!****h* ROBODoc/THDF5_1_8
 !
 ! NAME
 !  MODULE THDF5_1_8
diff --git a/fortran/test/tHDF5_F03.F90 b/fortran/test/tHDF5_F03.F90
index 3dbec11..b3b1885 100644
--- a/fortran/test/tHDF5_F03.F90
+++ b/fortran/test/tHDF5_F03.F90
@@ -1,4 +1,4 @@
-!****h* ROBODoc/HDF5
+!****h* ROBODoc/THDF5_F03
 !
 ! NAME
 !  MODULE THDF5_F03
diff --git a/fortran/test/tf.F90 b/fortran/test/tf.F90
index 7d67f30..e9baf43 100644
--- a/fortran/test/tf.F90
+++ b/fortran/test/tf.F90
@@ -89,7 +89,7 @@ CONTAINS
        error_string = skip
     ENDIF
 
-    WRITE(*, fmt = '(A, T72, A)') test_title, error_string
+    WRITE(*, fmt = '(A, T80, A)') test_title, error_string
 
     IF(test_result.GT.0) total_error = total_error + test_result
 
@@ -336,7 +336,7 @@ CONTAINS
     IMPLICIT NONE
     TYPE(comp_datatype), INTENT(in) :: a
 
-#ifdef H5_FORTRAN_FORTRAN_HAVE_C_SIZEOF
+#ifdef H5_FORTRAN_HAVE_C_SIZEOF
     H5_SIZEOF_CMPD = C_SIZEOF(a)
 #else
     H5_SIZEOF_CMPD = SIZEOF(a)
diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in
index 6b68fa3..9a8f26d 100644
--- a/fortran/testpar/Makefile.in
+++ b/fortran/testpar/Makefile.in
@@ -120,10 +120,23 @@ TESTS =
 subdir = fortran/testpar
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -421,18 +434,22 @@ AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ -I$(top_srcdir)/fortran/src \
 	-I$(top_srcdir)/fortran/test \
 	$(F9XMODFLAG)$(top_builddir)/fortran/src \
 	$(F9XMODFLAG)$(top_builddir)/fortran/test
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ $(am__append_1)
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -445,7 +462,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -483,10 +499,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -497,6 +517,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -507,8 +528,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -523,6 +556,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -530,6 +565,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -553,6 +589,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -568,7 +605,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -577,8 +616,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -657,6 +698,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/fortran/testpar/hyper.f90 b/fortran/testpar/hyper.f90
index a2e2e07..28c0b53 100644
--- a/fortran/testpar/hyper.f90
+++ b/fortran/testpar/hyper.f90
@@ -14,9 +14,9 @@
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
 
-!//////////////////////////////////////////////////////////
+!
 ! writes/reads dataset by hyperslabs
-!//////////////////////////////////////////////////////////
+!
 
 SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   USE HDF5
@@ -52,14 +52,15 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   CHARACTER(len=80) :: filename                     ! filename
   INTEGER        :: i
   INTEGER        :: actual_io_mode                  ! The type of I/O performed by this process
-
-  !//////////////////////////////////////////////////////////
+  LOGICAL        :: is_coll
+  LOGICAL        :: is_coll_true = .TRUE.
+  !
   ! initialize the array data between the processes (3)
   ! for the 12 size array we get
   ! p0 = 1,2,3,4
   ! p1 = 5,6,7,8
   ! p2 = 9,10,11,12
-  !//////////////////////////////////////////////////////////
+  !
 
   ALLOCATE(wbuf(0:length-1),stat=hdferror)
   IF (hdferror /= 0) THEN
@@ -81,17 +82,16 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      wbuf(i) = i
   ENDDO
 
-  !//////////////////////////////////////////////////////////
+  !
   ! HDF5 I/O
-  !//////////////////////////////////////////////////////////
+  !
 
   dims(1)  = length
   cdims(1) = length/mpi_size     ! define chunks as the number of processes
 
-  !//////////////////////////////////////////////////////////
+  !
   ! setup file access property list with parallel I/O access
-  !//////////////////////////////////////////////////////////
-
+  !
   CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
@@ -106,14 +106,67 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      nerrors = nerrors + 1
   ENDIF
 
-  !//////////////////////////////////////////////////////////
+  !
   ! create the file collectively
-  !//////////////////////////////////////////////////////////
-
+  !
   CALL h5_fixname_f("parf1", filename, fapl_id, hdferror)
 
-  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, hdferror, access_prp = fapl_id)
-  CALL check("h5fcreate_f", hdferror, nerrors)
+  IF(do_collective)THEN
+     ! verify settings for file access properties
+
+     ! Collective metadata writes
+     CALL h5pget_coll_metadata_write_f(fapl_id, is_coll, hdferror)
+     CALL check("h5pget_coll_metadata_write_f", hdferror, nerrors)
+     IF(is_coll .NEQV. .FALSE.)THEN
+        PRINT*, "Incorrect property setting for coll metadata writes"
+        nerrors = nerrors + 1
+     ENDIF
+
+     ! Collective metadata read API calling requirement
+     CALL h5pget_all_coll_metadata_ops_f(fapl_id, is_coll, hdferror)
+     CALL check("h5pget_all_coll_metadata_ops_f", hdferror, nerrors)
+     IF(is_coll .NEQV. .FALSE.)THEN
+        PRINT*, "Incorrect property setting for coll metadata API calls requirement"
+        nerrors = nerrors + 1
+     ENDIF
+
+     ! Collective metadata writes
+     CALL h5pset_coll_metadata_write_f(fapl_id, .TRUE., hdferror)
+     CALL check("h5pset_coll_metadata_write_f", hdferror, nerrors)
+     ! Collective metadata READ API calling requirement
+     CALL h5pset_all_coll_metadata_ops_f(fapl_id, is_coll_true, hdferror)
+     CALL check("h5pset_all_coll_metadata_ops_f", hdferror, nerrors)
+   
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, hdferror, access_prp = fapl_id)
+     CALL check("h5fcreate_f", hdferror, nerrors)
+
+     ! close fapl and retrieve it from file
+     CALL h5pclose_f(fapl_id, hdferror)
+     CALL check("h5pclose_f", hdferror, nerrors)
+     CALL h5fget_access_plist_f(file_id, fapl_id, hdferror)
+     CALL check("h5fget_access_plist_f", hdferror, nerrors)
+    
+     ! verify settings for file access properties
+
+     ! Collective metadata writes
+     CALL h5pget_coll_metadata_write_f(fapl_id, is_coll, hdferror)
+     CALL check("h5pget_coll_metadata_write_f", hdferror, nerrors)
+     IF(is_coll .NEQV. .TRUE.)THEN
+        PRINT*, "Incorrect property setting for coll metadata writes"
+        nerrors = nerrors + 1
+     ENDIF
+
+     ! Collective metadata read API calling requirement
+     CALL h5pget_all_coll_metadata_ops_f(fapl_id, is_coll, hdferror)
+     CALL check("h5pget_all_coll_metadata_ops_f", hdferror, nerrors)
+     IF(is_coll .NEQV. .TRUE.)THEN
+        PRINT*, "Incorrect property setting for coll metadata API calls requirement"
+        nerrors = nerrors + 1
+     ENDIF
+  ELSE
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, hdferror, access_prp = fapl_id)
+     CALL check("h5fcreate_f", hdferror, nerrors)
+  ENDIF
 
   CALL h5screate_simple_f(1, dims, fspace_id, hdferror)
   CALL check("h5screate_simple_f", hdferror, nerrors)
@@ -121,9 +174,9 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   CALL h5screate_simple_f(1, dims, mspace_id, hdferror)
   CALL check("h5screate_simple_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! modify dataset creation properties to enable chunking
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pcreate_f(H5P_DATASET_CREATE_F, dcpl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
@@ -133,38 +186,38 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      CALL check("h5pset_chunk_f", hdferror, nerrors)
   ENDIF
 
-  !//////////////////////////////////////////////////////////
+  !
   ! create the dataset
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5dcreate_f(file_id, "dset", H5T_NATIVE_INTEGER, fspace_id, dset_id, hdferror, dcpl_id)
   CALL check("h5dcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! define hyperslab
-  !//////////////////////////////////////////////////////////
+  !
 
   counti(1) = icount
   start(1)  = istart
 
-  !//////////////////////////////////////////////////////////
+  !
   ! select hyperslab in memory
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5sselect_hyperslab_f(mspace_id, H5S_SELECT_SET_F, start, counti, hdferror)
   CALL check("h5sselect_hyperslab_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! select hyperslab in the file
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5sselect_hyperslab_f(fspace_id, H5S_SELECT_SET_F, start, counti, hdferror)
   CALL check("h5sselect_hyperslab_f", hdferror, nerrors)
 
 
-  !//////////////////////////////////////////////////////////
+  !
   ! create a property list for collective dataset write
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pcreate_f(H5P_DATASET_XFER_F, dxpl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
@@ -174,9 +227,9 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      CALL check("h5pset_dxpl_mpio_f", hdferror, nerrors)
   ENDIF
 
-  !//////////////////////////////////////////////////////////
+  !
   ! write dataset
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5dwrite_f(dset_id,H5T_NATIVE_INTEGER,wbuf,dims,hdferror,file_space_id=fspace_id,mem_space_id=mspace_id,xfer_prp=dxpl_id)
   CALL check("h5dwrite_f", hdferror, nerrors)
@@ -200,9 +253,9 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      ENDIF
   ENDIF
 
-  !//////////////////////////////////////////////////////////
+  !
   ! close HDF5 I/O
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pclose_f(fapl_id, hdferror)
   CALL check("h5pclose_f", hdferror, nerrors)
@@ -225,9 +278,9 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   CALL h5fclose_f(file_id, hdferror)
   CALL check("h5fclose_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! reopen file with read access
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
@@ -247,23 +300,23 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   CALL h5dopen_f(file_id, "dset", dset_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! select hyperslab in memory
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5sselect_hyperslab_f(mspace_id, H5S_SELECT_SET_F, start, counti, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! select hyperslab in the file
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5sselect_hyperslab_f(fspace_id, H5S_SELECT_SET_F, start, counti, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! create a property list for collective dataset read
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pcreate_f(H5P_DATASET_XFER_F, dxpl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
@@ -273,16 +326,16 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
      CALL check("h5pcreate_f", hdferror, nerrors)
   ENDIF
 
-  !//////////////////////////////////////////////////////////
+  !
   ! read dataset
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5dread_f(dset_id,H5T_NATIVE_INTEGER,rbuf,dims,hdferror,file_space_id=fspace_id,mem_space_id=mspace_id,xfer_prp=dxpl_id)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! close HDF5 I/O
-  !//////////////////////////////////////////////////////////
+  !
 
   CALL h5pclose_f(fapl_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
@@ -302,9 +355,9 @@ SUBROUTINE hyper(length,do_collective,do_chunk, mpi_size, mpi_rank, nerrors)
   CALL h5fclose_f(file_id, hdferror)
   CALL check("h5pcreate_f", hdferror, nerrors)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! compare read and write data. each process compares a subset of the array
-  !//////////////////////////////////////////////////////////
+  !
 
   DO i = istart, iend-1
      IF( wbuf(i) /= rbuf(i)) THEN
diff --git a/fortran/testpar/ptest.f90 b/fortran/testpar/ptest.f90
index 69594b0..82dcc09 100644
--- a/fortran/testpar/ptest.f90
+++ b/fortran/testpar/ptest.f90
@@ -13,29 +13,35 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
-!//////////////////////////////////////////////////////////
+!
 ! main program for parallel HDF5 Fortran tests
-!//////////////////////////////////////////////////////////
+!
 
 PROGRAM parallel_test
   USE hdf5
+  USE MPI
+  USE TH5_MISC 
   
   IMPLICIT NONE
-  INCLUDE 'mpif.h'
 
   INTEGER :: mpierror                             ! MPI hdferror flag
   INTEGER :: hdferror                             ! HDF hdferror flag
-  LOGICAL :: do_collective                        ! use collective MPI I/O
-  LOGICAL :: do_chunk                             ! use chunking
-  INTEGER :: nerrors = 0                          ! number of errors
+  INTEGER :: ret_total_error = 0                  ! number of errors in subroutine
+  INTEGER :: total_error = 0                      ! sum of the number of errors
   INTEGER :: mpi_size                             ! number of processes in the group of communicator
   INTEGER :: mpi_rank                             ! rank of the calling process in the communicator
   INTEGER :: length = 12000                       ! length of array
-
-  !//////////////////////////////////////////////////////////
+  INTEGER :: i,j
+  ! use collective MPI I/O
+  LOGICAL, DIMENSION(1:2) :: do_collective = (/.FALSE.,.TRUE./)
+  CHARACTER(LEN=11), DIMENSION(1:2) :: chr_collective =(/"independent", "collective "/)
+  ! use chunking
+  LOGICAL, DIMENSION(1:2) :: do_chunk = (/.FALSE.,.TRUE./)
+  CHARACTER(LEN=10), DIMENSION(1:2) :: chr_chunk =(/"contiguous", "chunk     "/)
+
+  !
   ! initialize MPI
-  !//////////////////////////////////////////////////////////
-
+  !
   CALL mpi_init(mpierror)
   IF (mpierror .NE. MPI_SUCCESS) THEN
      WRITE(*,*) "MPI_INIT  *FAILED*"
@@ -48,74 +54,40 @@ PROGRAM parallel_test
   IF (mpierror .NE. MPI_SUCCESS) THEN
      WRITE(*,*) "MPI_COMM_SIZE  *FAILED* Process = ", mpi_rank
   ENDIF
-  !//////////////////////////////////////////////////////////
+  !
   ! initialize the HDF5 fortran interface
-  !//////////////////////////////////////////////////////////
-
+  !
   CALL h5open_f(hdferror)
-
-  !//////////////////////////////////////////////////////////
-  ! test write/read dataset by hyperslabs with independent MPI I/O
-  !//////////////////////////////////////////////////////////
-
-  IF (mpi_rank == 0) WRITE(*,*) 'Writing/reading dataset by hyperslabs (contiguous layout, independent MPI I/O)'
-
-  do_collective = .FALSE.
-  do_chunk      = .FALSE.
-  CALL hyper(length, do_collective, do_chunk, mpi_size, mpi_rank, nerrors)
-
-  !//////////////////////////////////////////////////////////
-  ! test write/read dataset by hyperslabs with collective MPI I/O
-  !//////////////////////////////////////////////////////////
-
-  IF (mpi_rank == 0) WRITE(*,*) 'Writing/reading dataset by hyperslabs (contiguous layout, collective MPI I/O)'
-
-  do_collective = .TRUE.
-  do_chunk      = .FALSE.
-  CALL hyper(length, do_collective, do_chunk, mpi_size, mpi_rank, nerrors)
-
-  !//////////////////////////////////////////////////////////
-  ! test write/read dataset by hyperslabs with independent MPI I/O
-  !//////////////////////////////////////////////////////////
-
-  IF (mpi_rank == 0) WRITE(*,*) 'Writing/reading dataset by hyperslabs (chunk layout, independent MPI I/O)'
-
-  do_collective = .FALSE.
-  do_chunk      = .TRUE.
-  CALL hyper(length, do_collective, do_chunk, mpi_size, mpi_rank, nerrors)
-
-  !//////////////////////////////////////////////////////////
-  ! test write/read dataset by hyperslabs with collective MPI I/O
-  !//////////////////////////////////////////////////////////
-
-  IF (mpi_rank == 0) WRITE(*,*) 'Writing/reading dataset by hyperslabs (chunk layout, collective MPI I/O)'
-
-  do_collective = .TRUE.
-  do_chunk      = .TRUE.
-  CALL hyper(length, do_collective, do_chunk, mpi_size, mpi_rank, nerrors)
-
-  !//////////////////////////////////////////////////////////
+  !
+  ! test write/read dataset by hyperslabs (contiguous/chunk) with independent/collective MPI I/O
+  !
+  DO i = 1, 2
+     DO j = 1, 2
+        ret_total_error = 0
+        CALL hyper(length, do_collective(j), do_chunk(i), mpi_size, mpi_rank, ret_total_error)
+        IF(mpi_rank==0) CALL write_test_status(ret_total_error, &
+             "Writing/reading dataset by hyperslabs ("//TRIM(chr_chunk(i))//" layout, "//TRIM(chr_collective(j))//" MPI I/O)", &
+             total_error)
+     ENDDO
+  ENDDO
+
+  !
   ! test write/read several datasets (independent MPI I/O)
-  !//////////////////////////////////////////////////////////
-
-  IF (mpi_rank == 0) WRITE(*,*) 'Writing/reading several datasets (contiguous layout, independent MPI I/O)'
-
-  do_collective = .FALSE.
-  do_chunk      = .FALSE.
-  CALL multiple_dset_write(length, do_collective, do_chunk, mpi_size, mpi_rank, nerrors)
+  !
+  ret_total_error = 0
+  CALL multiple_dset_write(length, do_collective(1), do_chunk(1), mpi_size, mpi_rank, ret_total_error)
+  IF(mpi_rank==0) CALL write_test_status(ret_total_error, &
+       'Writing/reading several datasets (contiguous layout, independent MPI I/O)', total_error)
 
-
-  !//////////////////////////////////////////////////////////
+  !
   ! close HDF5 interface
-  !//////////////////////////////////////////////////////////
-
+  !
   CALL h5close_f(hdferror)
 
-  !//////////////////////////////////////////////////////////
+  !
   ! close MPI
-  !//////////////////////////////////////////////////////////
-
-  IF (nerrors == 0) THEN
+  !
+  IF (total_error == 0) THEN
      CALL mpi_finalize(mpierror)
      IF (mpierror .NE. MPI_SUCCESS) THEN
         WRITE(*,*) "MPI_FINALIZE  *FAILED* Process = ", mpi_rank
@@ -127,10 +99,7 @@ PROGRAM parallel_test
         WRITE(*,*) "MPI_ABORT  *FAILED* Process = ", mpi_rank
      ENDIF
   ENDIF
-
-  !//////////////////////////////////////////////////////////
+  !
   ! end main program
-  !//////////////////////////////////////////////////////////
-
+  !
 END PROGRAM parallel_test
-
diff --git a/hl/Makefile.in b/hl/Makefile.in
index d692a19..36dde48 100644
--- a/hl/Makefile.in
+++ b/hl/Makefile.in
@@ -112,10 +112,23 @@ TESTS =
 subdir = hl
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -420,18 +433,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -444,7 +461,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -482,10 +498,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -496,6 +516,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -506,8 +527,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -522,6 +555,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -529,6 +564,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -552,6 +588,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -567,7 +604,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -576,8 +615,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -656,6 +697,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in
index ae32b20..299ac9a 100644
--- a/hl/c++/Makefile.in
+++ b/hl/c++/Makefile.in
@@ -108,10 +108,23 @@ TESTS =
 subdir = hl/c++
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -416,18 +429,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -440,7 +457,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -478,10 +494,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -492,6 +512,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -502,8 +523,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -518,6 +551,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -525,6 +560,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -548,6 +584,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -563,7 +600,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -572,8 +611,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -652,6 +693,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in
index f27a953..0946c0f 100644
--- a/hl/c++/examples/Makefile.in
+++ b/hl/c++/examples/Makefile.in
@@ -112,10 +112,23 @@ TESTS =
 subdir = hl/c++/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -363,18 +376,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -387,7 +404,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -425,10 +441,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -439,6 +459,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -449,8 +470,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -465,6 +498,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -472,6 +507,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -495,6 +531,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -510,7 +547,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -519,8 +558,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -599,6 +640,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/c++/src/CMakeLists.txt b/hl/c++/src/CMakeLists.txt
index e37c5ba..425a2fe 100644
--- a/hl/c++/src/CMakeLists.txt
+++ b/hl/c++/src/CMakeLists.txt
@@ -34,7 +34,7 @@ if (BUILD_SHARED_LIBS)
       ${HDF5_LIBSH_TARGET}
   )
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_CPP_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_HL_CPP_LIBSH_TARGET} ${HDF5_HL_CPP_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_HL_CPP_LIBSH_TARGET} ${HDF5_HL_CPP_LIB_NAME} SHARED ${HDF5_HL_CXX_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_HL_CPP_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/hl
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
diff --git a/hl/c++/src/H5PacketTable.cpp b/hl/c++/src/H5PacketTable.cpp
index 74b8029..50e11f6 100644
--- a/hl/c++/src/H5PacketTable.cpp
+++ b/hl/c++/src/H5PacketTable.cpp
@@ -34,6 +34,12 @@
      * Opens an existing packet table, which can contain either fixed-length or
      * variable-length packets.
      */
+    PacketTable::PacketTable(hid_t fileID, const char* name)
+    {
+        table_id = H5PTopen( fileID, name);
+    }
+
+    /* "Open" Constructor - will be deprecated because of char* name */
     PacketTable::PacketTable(hid_t fileID, char* name)
     {
         table_id = H5PTopen( fileID, name);
@@ -60,17 +66,14 @@
             return false;
     }
 
-#ifdef VLPT_REMOVED
     /* IsVariableLength
-     * Return 1 if this packet table is a Variable Length packet table,
-     * return 0 if it is Fixed Length.  Returns -1 if the table is
-     * invalid (not open).
+     * Return 1 if this packet table uses variable-length datatype,
+     * and 0, otherwise.  Returns -1 if the table is invalid (not open).
      */
     int PacketTable::IsVariableLength()
     {
         return H5PTis_varlen(table_id);
     }
-#endif /* VLPT_REMOVED */
 
     /* ResetIndex
      * Sets the index to point to the first packet in the packet table
@@ -113,39 +116,87 @@
     {
         hsize_t npackets;
 
-        error = H5PTget_num_packets( table_id, (hsize_t *)&npackets);
+        error = H5PTget_num_packets(table_id, &npackets);
         return npackets;
     }
 
+    /* GetTableId
+     * Returns the identifier of the packet table
+     */
+    hid_t PacketTable::GetTableId()
+    {
+        return table_id;
+    }
+
+    /* GetDatatype
+     * Returns the datatype identifier used by the packet table, on success,
+     * or FAIL, on failure.
+     * Note: it is best to avoid using this identifier in applications, unless
+     * the desired functionality cannot be performed via the packet table ID.
+     */
+    hid_t PacketTable::GetDatatype()
+    {
+        return H5PTget_type(table_id);
+    }
+
+    /* GetDataset
+     * Returns the dataset identifier associated with the packet table, on
+     * success, or FAIL, on failure.
+     * Note: it is best to avoid using this identifier in applications, unless
+     * the desired functionality cannot be performed via the packet table ID.
+     */
+    hid_t PacketTable::GetDataset()
+    {
+        return H5PTget_dataset(table_id);
+    }
+
+    /* FreeBuff
+     * Frees the buffers created when variable-length packets are read.
+     * Takes the number of hvl_t structs to be freed and a pointer to their
+     * location in memory.
+     * Returns 0 on success, negative on error.
+     */
+    int PacketTable::FreeBuff(size_t numStructs, hvl_t * buffer)
+    {
+        return H5PTfree_vlen_buff( table_id, numStructs, buffer);
+    }
+
+
     /********************************/
     /* Fixed-Length Packet Table    */
     /********************************/
 
     /* Constructor
-     * Creates a packet table in which to store fixed length packets.
+     * Creates a packet table to store either fixed- or variable-length packets.
+     * Takes the ID of the file the packet table will be created in, the ID of
+     * the property list to specify compression, the name of the packet table,
+     * the ID of the datatype, and the size of a memory chunk used in chunking.
+     */
+    FL_PacketTable::FL_PacketTable(hid_t fileID, hid_t plist_id, const char* name, hid_t dtypeID, hsize_t chunkSize)
+    {
+        table_id = H5PTcreate(fileID, name, dtypeID, chunkSize, plist_id);
+    }
+
+    /* Constructor
+     * Creates a packet table to store either fixed- or variable-length packets.
      * Takes the ID of the file the packet table will be created in, the name of
      * the packet table, the ID of the datatype of the set, and the size
      * of a memory chunk used in chunking.
+     * Note: this overload will be deprecated in favor of the constructor above.
      */
     FL_PacketTable::FL_PacketTable(hid_t fileID, char* name, hid_t dtypeID, hsize_t chunkSize, int compression)
     {
-        table_id = H5PTcreate_fl ( fileID, name, dtypeID, chunkSize, compression);
+        table_id = H5PTcreate_fl(fileID, name, dtypeID, chunkSize, compression);
     }
 
     /* "Open" Constructor
      * Opens an existing fixed-length packet table.
      * Fails if the packet table specified is variable-length.
      */
-    FL_PacketTable::FL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name)
-    {
-#ifdef VLPT_REMOVED
-        if( H5PTis_varlen(table_id) != 0 )    // If this is not a fixed-length table
-        {
-            H5PTclose(table_id);
-            table_id = -1;
-        }
-#endif /* VLPT_REMOVED */
-    }
+    FL_PacketTable::FL_PacketTable(hid_t fileID, const char* name) : PacketTable(fileID, name) {}
+
+    /* "Open" Constructor - will be deprecated because of char* name */
+    FL_PacketTable::FL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name) {}
 
     /* AppendPacket
      * Adds a single packet to the packet table.  Takes a pointer
@@ -215,119 +266,4 @@
         return H5PTget_next(table_id, numPackets, data);
     }
 
-
-#ifdef VLPT_REMOVED
-    /********************************/
-    /* Variable-Length Packet Table */
-    /********************************/
-
-    /* Constructor
-     * Creates a packet table in which to store variable length packets.
-     * Takes the ID of the file the packet table will be created in, the name of
-     * the packet table, and the size of a memory chunk used in chunking.
-     */
-    VL_PacketTable::VL_PacketTable(hid_t fileID, char* name, hsize_t chunkSize)
-    {
-        table_id = H5PTcreate_vl ( fileID, name, chunkSize);
-    }
-
-    /* "Open" Constructor
-     * Opens an existing variable-length packet table.
-     * Fails if the packet table specified is fixed-length.
-     */
-    VL_PacketTable::VL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name)
-    {
-        if( H5PTis_varlen(table_id) != 1 )    // If this is not a variable-length table
-        {
-            H5PTclose(table_id);
-            table_id = -1;
-        }
-    }
-
-    /* AppendPacket (variable-length)
-     * Adds a single variable-length packet to the packet table.
-     * Takes a pointer to the location of the data in memory and the length of the data
-     * in bytes.
-     * Returns 0 on success, negative on failure.
-     */
-       int VL_PacketTable::AppendPacket(void * data, size_t length)
-    {
-        hvl_t packet;
-
-        packet.len = length;
-        packet.p = data;
-
-        return H5PTappend(table_id, 1, &packet);
-    }
-
-    /* AppendPackets (multiple packets)
-     * Adds multiple variable-length packets to the packet table.  Takes the
-     * number of
-     * packets to be added and a pointer to an array of hvl_t structs in memory.
-     * Returns 0 on success, negative on failure.
-     */
-    int VL_PacketTable::AppendPackets(size_t numPackets, hvl_t * data)
-    {
-        return H5PTappend(table_id, numPackets, data);
-    }
-
-    /* GetPacket (indexed)
-     * Gets a single variable-length packet from the packet table.  Takes the
-     * index of the packet (with 0 being the first packet) and a pointer
-     * to a hvl_t struct in which to store the packet's size and location.
-     * Returns 0 on success, negative on failure.
-     */
-    int VL_PacketTable::GetPacket(hsize_t index, hvl_t * data)
-    {
-        return H5PTread_packets(table_id, index, 1, data);
-    }
-
-    /* GetPackets (multiple packets)
-     * Gets multiple variable-length packets at once, all packets between
-     * startIndex and endIndex inclusive.  Takes a pointer to an array
-     * of hvl_t structs in memory in which to store pointers to the packets.
-     * Returns 0 on success, negative on failure.
-     */
-    int VL_PacketTable::GetPackets(hsize_t startIndex, hsize_t endIndex, hvl_t * data)
-    {
-        // Make sure the range of indexes is valid
-        if (startIndex > endIndex)
-            return -1;
-
-        return  H5PTread_packets(table_id, startIndex, endIndex-startIndex+1, data);
-    }
-
-    /* GetNextPacket (single packet)
-     * Gets the next packet in the packet table.  Takes a pointer to
-     * an hvl_t struct where the packet should be stored.
-     * Returns 0 on success, negative on failure.  Index
-     * is not advanced to the next packet on failure.
-     */
-    int VL_PacketTable::GetNextPacket(hvl_t * data)
-    {
-        return H5PTget_next(table_id, 1, data);
-    }
-
-    /* GetNextPackets (multiple packets)
-     * Gets the next numPackets packets in the packet table.  Takes a
-     * pointer to an array of hvl_t structs where pointers to the packets
-     * should be stored.
-     * Returns 0 on success, negative on failure.  Index
-     * is not advanced on failure.
-     */
-    int VL_PacketTable::GetNextPackets(size_t numPackets, hvl_t * data)
-    {
-        return H5PTget_next(table_id, numPackets, data);
-    }
-
-    /* FreeReadbuff
-     * Frees the buffers created when variable-length packets are read.
-     * Takes the number of hvl_t structs to be freed and a pointer to their
-     * location in memory.
-     * Returns 0 on success, negative on error.
-     */
-    int VL_PacketTable::FreeReadbuff(size_t numStructs, hvl_t * buffer)
-    {
-        return H5PTfree_vlen_readbuff( table_id, numStructs, buffer);
-    }
-#endif /* VLPT_REMOVED */
+/* Removed "ifdef VLPT_REMOVED" block. 03/08/2016, -BMR */
diff --git a/hl/c++/src/H5PacketTable.h b/hl/c++/src/H5PacketTable.h
index 5f9a213..bdd669d 100644
--- a/hl/c++/src/H5PacketTable.h
+++ b/hl/c++/src/H5PacketTable.h
@@ -42,12 +42,15 @@ public:
      * Opens an existing packet table, which can contain either fixed-length or
      * variable-length packets.
      */
+    PacketTable(hid_t fileID, const char* name);
+
+    /* "Open" Constructor - will be deprecated because of char* name */
     PacketTable(hid_t fileID, char* name);
 
     /* Destructor
      * Cleans up the packet table
      */
-    ~PacketTable();
+    virtual ~PacketTable();
 
     /* IsValid
      * Returns true if this packet table is valid, false otherwise.
@@ -56,14 +59,12 @@ public:
      */
     bool IsValid();
 
-#ifdef VLPT_REMOVED
     /* IsVariableLength
-     * Return 1 if this packet table is a Variable Length packet table,
+     * Return 1 if this packet table uses variable-length datatype,
      * return 0 if it is Fixed Length.  Returns -1 if the table is
      * invalid (not open).
      */
     int IsVariableLength();
-#endif /* VLPT_REMOVED */
 
     /* ResetIndex
      * Sets the "current packet" index to point to the first packet in the
@@ -96,6 +97,35 @@ public:
         return GetPacketCount(ignoreError);
     }
 
+    /* GetTableId
+     * Returns the identifier of the packet table.
+     */
+    hid_t GetTableId();
+
+    /* GetDatatype
+     * Returns the datatype identifier used by the packet table, on success,
+     * or FAIL, on failure.
+     * Note: it is best to avoid using this identifier in applications, unless
+     * the desired functionality cannot be performed via the packet table ID.
+     */
+    hid_t GetDatatype();
+
+    /* GetDataset
+     * Returns the dataset identifier associated with the packet table, on
+     * success, or FAIL, on failure.
+     * Note: it is best to avoid using this identifier in applications, unless
+     * the desired functionality cannot be performed via the packet table ID.
+     */
+    hid_t GetDataset();
+
+    /* FreeBuff
+     * Frees the buffers created when variable-length packets are read.
+     * Takes the number of hvl_t structs to be freed and a pointer to their
+     * location in memory.
+     * Returns 0 on success, negative on error.
+     */
+    int FreeBuff(size_t numStructs, hvl_t * buffer);
+
 protected:
     hid_t table_id;
 };
@@ -104,11 +134,20 @@ class H5_HLCPPDLL FL_PacketTable : virtual public PacketTable
 {
 public:
     /* Constructor
+     * Creates a packet table to store either fixed- or variable-length packets.
+     * Takes the ID of the file the packet table will be created in, the ID of
+     * the property list to specify compression, the name of the packet table,
+     * the ID of the datatype, and the size of a memory chunk used in chunking.
+     */
+    FL_PacketTable(hid_t fileID, hid_t plist_id, const char* name, hid_t dtypeID, hsize_t chunkSize);
+
+    /* Constructor
      * Creates a packet table in which to store fixed length packets.
      * Takes the ID of the file the packet table will be created in, the name of
      * the packet table, the ID of the datatype of the set, the size
      * of a memory chunk used in chunking, and the desired compression level
      * (0-9, or -1 for no compression).
+     * Note: this overload will be deprecated in favor of the constructor above.
      */
     FL_PacketTable(hid_t fileID, char* name, hid_t dtypeID, hsize_t chunkSize, int compression = -1);
 
@@ -116,8 +155,16 @@ public:
      * Opens an existing fixed-length packet table.
      * Fails if the packet table specified is variable-length.
      */
+    FL_PacketTable(hid_t fileID, const char* name);
+
+    /* "Open" Constructor - will be deprecated because of char* name */
     FL_PacketTable(hid_t fileID, char* name);
 
+    /* Destructor
+     * Cleans up the packet table
+     */
+    virtual ~FL_PacketTable() {};
+
     /* AppendPacket
      * Adds a single packet to the packet table.  Takes a pointer
      * to the location of the data in memory.
@@ -165,80 +212,6 @@ public:
     int GetNextPackets(size_t numPackets, void * data);
 };
 
-#ifdef VLPT_REMOVED
-class H5_HLCPPDLL  VL_PacketTable : virtual public PacketTable
-{
-public:
-    /* Constructor
-     * Creates a packet table in which to store variable length packets.
-     * Takes the ID of the file the packet table will be created in, the name of
-     * the packet table, and the size of a memory chunk used in chunking.
-     */
-    VL_PacketTable(hid_t fileID, char* name, hsize_t chunkSize);
-
-    /* "Open" Constructor
-     * Opens an existing variable-length packet table.
-     * Fails if the packet table specified is fixed-length.
-     */
-    VL_PacketTable(hid_t fileID, char* name);
-
-    /* AppendPacket
-     * Adds a single packet of any length to the packet table.
-     * Takes a pointer to the location of the data in memory and the length of the data
-     * in bytes.
-     * Returns 0 on success, negative on failure.
-     */
-    int AppendPacket(void * data, size_t length);
-
-    /* AppendPackets (multiple packets)
-     * Adds multiple variable-length packets to the packet table.  Takes the
-     * number of packets to be added and a pointer to an array of
-     * hvl_t structs in memory.
-     * Returns 0 on success, negative on failure.
-     */
-    int AppendPackets(size_t numPackets, hvl_t * data);
-
-    /* GetPacket (indexed)
-     * Gets a single variable-length packet from the packet table.  Takes
-     * the index of the packet (with 0 being the first packet) and a pointer
-     * to a hvl_t struct in which to store the packet's size and location.
-     * Returns 0 on success, negative on failure.
-     */
-    int GetPacket(hsize_t index, hvl_t * data);
-
-    /* GetPackets (multiple packets)
-     * Gets multiple variable-length packets at once, all packets between
-     * startIndex and endIndex inclusive.  Takes a pointer to an array
-     * of hvl_t structs in memory in which to store pointers to the packets.
-     * Returns 0 on success, negative on failure.
-     */
-    int GetPackets(hsize_t startIndex, hsize_t endIndex, hvl_t * data);
-
-    /* GetNextPacket (single packet)
-     * Gets the next packet in the packet table.  Takes a pointer to
-     * an hvl_t struct where the packet should be stored.
-     * Returns 0 on success, negative on failure.  Index
-     * is not advanced to the next packet on failure.
-     */
-    int GetNextPacket(hvl_t * data);
-
-    /* GetNextPackets (multiple packets)
-     * Gets the next numPackets packets in the packet table.  Takes a
-     * pointer to an array of hvl_t structs where pointers to the packets
-     * should be stored.
-     * Returns 0 on success, negative on failure.  Index
-     * is not advanced on failure.
-     */
-    int GetNextPackets(size_t numPackets, hvl_t * data);
-
-    /* FreeReadbuff
-     * Frees the buffers created when variable-length packets are read.
-     * Takes the number of hvl_t structs to be freed and a pointer to their
-     * location in memory.
-     * Returns 0 on success, negative on error.
-     */
-    int FreeReadbuff(size_t numStructs, hvl_t * buffer);
-};
-#endif /* VLPT_REMOVED */
+/* Removed "#ifdef VLPT_REMOVED" block.  03/08/2016, -BMR */
 
 #endif /* H5PTWRAP_H */
diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in
index dc3435d..b37a8cf 100644
--- a/hl/c++/src/Makefile.in
+++ b/hl/c++/src/Makefile.in
@@ -110,10 +110,23 @@ TESTS =
 subdir = hl/c++/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
@@ -419,18 +432,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -443,7 +460,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -481,10 +497,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -495,6 +515,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -505,8 +526,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -521,6 +554,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -528,6 +563,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -551,6 +587,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -566,7 +603,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -575,8 +614,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -655,6 +696,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in
index c2a1cf1..84f76ee 100644
--- a/hl/c++/test/Makefile.in
+++ b/hl/c++/test/Makefile.in
@@ -109,10 +109,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = hl/c++/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -416,18 +429,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -440,7 +457,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -478,10 +494,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -492,6 +512,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -502,8 +523,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -518,6 +551,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -525,6 +560,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -548,6 +584,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -563,7 +600,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -572,8 +611,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -652,6 +693,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/c++/test/ptableTest.cpp b/hl/c++/test/ptableTest.cpp
index 929058d..ff99285 100644
--- a/hl/c++/test/ptableTest.cpp
+++ b/hl/c++/test/ptableTest.cpp
@@ -15,9 +15,11 @@
 
 /* ptableTest.cpp */
 
+#include <iostream>
 #include "ptableTest.h"
 
 using namespace H5;
+using namespace std;
 
 #define TEST_FILE "packettest.h5"
 
@@ -74,7 +76,7 @@ int main(void)
       return -1;
 }
 
-
+const char* BASICTEST_PT("/basicTest");
 int BasicTest()
 {
     herr_t err;
@@ -82,9 +84,9 @@ int BasicTest()
     hsize_t count;
     int error;
 
-    TESTING("basic funtionality")
+    TESTING("basic functionality")
 
-    FL_PacketTable wrapper(fileID, "/basicTest", H5T_NATIVE_INT, 1);
+    FL_PacketTable wrapper(fileID, H5P_DEFAULT, BASICTEST_PT, H5T_NATIVE_INT, 1);
     if(! wrapper.IsValid())
       goto out;
 
@@ -131,6 +133,7 @@ out:
     return 1;
 }
 
+const char* CMPDTEST_PT("/compoundTest");
 int TestCompoundDatatype()
 {
     hid_t dtypeID;
@@ -153,8 +156,8 @@ int TestCompoundDatatype()
     H5Tinsert(dtypeID, "charlie", HOFFSET( compoundType, c ), H5T_NATIVE_SHORT);
     H5Tinsert(dtypeID, "ebert", HOFFSET( compoundType, e ), H5T_NATIVE_INT);
 
-    /* Create packet table.  Explicitly specify no compression */
-    FL_PacketTable wrapper(fileID, "/compoundTest", dtypeID, 1, -1);
+    /* Create packet table using default property list. */
+    FL_PacketTable wrapper(fileID, H5P_DEFAULT, CMPDTEST_PT, dtypeID, 1);
 
     if(! wrapper.IsValid())
       goto out;
@@ -198,6 +201,7 @@ out:
     return 1;
 }
 
+const char* GETNEXT_PT("/TestGetNext");
 int TestGetNext()
 {
     int error;
@@ -208,7 +212,7 @@ int TestGetNext()
     TESTING("GetNextPacket")
 
     /* Create a dataset */
-    FL_PacketTable wrapper(fileID, "/TestGetNext", H5T_NATIVE_INT, 500);
+    FL_PacketTable wrapper(fileID, H5P_DEFAULT, GETNEXT_PT, H5T_NATIVE_INT, 500);
 
     if(! wrapper.IsValid())
       goto out;
@@ -260,18 +264,27 @@ out:
     return 1;
 }
 
+const char* COMPRESS_PT("/compressTest");
 int TestCompress()
 {
-
-	unsigned int flags = 0;
+    unsigned int flags = 0;
     unsigned int config = 0;
     size_t cd_nelemts = 0;
 
     TESTING("compression")
 #ifdef H5_HAVE_FILTER_DEFLATE
     try {
+	/* Prepare property list to set compression, randomly use deflate */
+	DSetCreatPropList dscreatplist;
+	dscreatplist.setDeflate(6);
+
         /* Create packet table with compression. */
-        FL_PacketTable wrapper(fileID, "/compressTest", H5T_NATIVE_CHAR, 100, 8);
+        FL_PacketTable wrapper(fileID, dscreatplist.getId(), COMPRESS_PT, H5T_NATIVE_CHAR, 100);
+
+	/* Close the property list */
+	dscreatplist.close();
+
+	/* Verify that the deflate filter is set */
 
         /* Create an HDF5 C++ file object */
         H5File file;
@@ -279,11 +292,14 @@ int TestCompress()
 
         /* Make sure that the deflate filter is set by opening the packet table
          * as a dataset and getting its creation property list */
-        DataSet dsetID = file.openDataSet("/compressTest");
+        DataSet dset = file.openDataSet(COMPRESS_PT);
 
-        DSetCreatPropList dcplID = dsetID.getCreatePlist();
+        DSetCreatPropList dcpl = dset.getCreatePlist();
 
-        dcplID.getFilterById(H5Z_FILTER_DEFLATE, flags, cd_nelemts, NULL, 0, NULL, config);
+	char filter_name[8];
+        dcpl.getFilterById(H5Z_FILTER_DEFLATE, flags, cd_nelemts, NULL, 8, filter_name, config);
+	if (HDstrncmp(filter_name, "deflate", 7) != 0)
+	    H5_FAILED()
     } catch (Exception e) {
       H5_FAILED();
       return 1;
@@ -296,6 +312,7 @@ int TestCompress()
     return 0;
 }
 
+const char* PT_TESTGETPT = "/TestGetPacket";
 int TestGetPacket()
 {
     int record;
@@ -304,7 +321,7 @@ int TestGetPacket()
     TESTING("GetPacket")
 
     /* Create a dataset.  Explicitly specify no compression */
-    FL_PacketTable wrapper(fileID, "/TestGetPacket", H5T_NATIVE_INT, 1, -1);
+    FL_PacketTable wrapper(fileID, H5P_DEFAULT, PT_TESTGETPT, H5T_NATIVE_INT, 1);
 
     if(! wrapper.IsValid())
       goto out;
@@ -334,12 +351,14 @@ out:
     return 1;
 }
 
+const char* PT_TESTERROR = "/TestErrors";
+
 int TestErrors()
 {
     TESTING("error conditions")
 
     /* Create a dataset */
-    FL_PacketTable wrapper(fileID, "/TestErrors", H5T_NATIVE_INT, 1);
+    FL_PacketTable wrapper(fileID, H5P_DEFAULT, PT_TESTERROR, H5T_NATIVE_INT, 1);
 
     if(! wrapper.IsValid())
       goto out;
@@ -443,6 +462,8 @@ out:
     return 1;
 }
 
+const char* PT_SYSTEMTST1 = "/SystemTest1";
+const char* PT_SYSTEMTST2 = "/SystemTest2";
 int SystemTest()
 {
     TESTING("multiple datatypes")
@@ -485,8 +506,8 @@ int SystemTest()
     ct2[0].g.e = 3000;
 
     /* Create the packet table datasets.  Make one of them compressed. */
-    FL_PacketTable wrapper1(fileID, "/SystemTest1", dtypeID1, 1);
-    FL_PacketTable wrapper2(fileID, "/SystemTest2", dtypeID2, 1, 5);
+    FL_PacketTable wrapper1(fileID, H5P_DEFAULT, PT_SYSTEMTST1, dtypeID1, 1);
+    FL_PacketTable wrapper2(fileID, H5P_DEFAULT, PT_SYSTEMTST2, dtypeID2, 1);
 
     if(! wrapper1.IsValid())
       goto out;
diff --git a/hl/examples/Makefile.in b/hl/examples/Makefile.in
index e19a551..ad4dcd9 100644
--- a/hl/examples/Makefile.in
+++ b/hl/examples/Makefile.in
@@ -112,10 +112,23 @@ TESTS =
 subdir = hl/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -363,18 +376,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -387,7 +404,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -425,10 +441,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -439,6 +459,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -449,8 +470,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -465,6 +498,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -472,6 +507,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -495,6 +531,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -510,7 +547,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -519,8 +558,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -599,6 +640,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in
index fcb2250..f5f09da 100644
--- a/hl/fortran/Makefile.in
+++ b/hl/fortran/Makefile.in
@@ -112,10 +112,23 @@ TESTS =
 subdir = hl/fortran
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -420,18 +433,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -444,7 +461,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -482,10 +498,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -496,6 +516,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -506,8 +527,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -522,6 +555,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -529,6 +564,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -552,6 +588,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -567,7 +604,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -576,8 +615,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -656,6 +697,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in
index 6d41c52..39f140c 100644
--- a/hl/fortran/examples/Makefile.in
+++ b/hl/fortran/examples/Makefile.in
@@ -116,10 +116,23 @@ TESTS =
 subdir = hl/fortran/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -369,18 +382,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -393,7 +410,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -431,10 +447,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -445,6 +465,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -455,8 +476,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -471,6 +504,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -478,6 +513,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -501,6 +537,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -516,7 +553,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -525,8 +564,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -605,6 +646,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt
index ead21be..a566314 100644
--- a/hl/fortran/src/CMakeLists.txt
+++ b/hl/fortran/src/CMakeLists.txt
@@ -91,7 +91,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
   TARGET_C_PROPERTIES (${HDF5_HL_F90_C_LIBSH_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_F90_C_LIBSH_TARGET} ${HDF5_HL_LIBSH_TARGET})
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_C_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_HL_F90_C_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_HL_F90_C_LIB_NAME} SHARED ${HDF5_HL_F_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_HL_F90_C_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/hl/fortran
       LINKER_LANGUAGE C
@@ -163,7 +163,7 @@ if (BUILD_SHARED_LIBS AND NOT SKIP_HDF5_FORTRAN_SHARED)
   TARGET_FORTRAN_PROPERTIES (${HDF5_HL_F90_LIBSH_TARGET} SHARED " " ${SHARED_LINK_FLAGS})
   target_link_libraries (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_HL_F90_C_LIBSH_TARGET} ${HDF5_F90_LIBSH_TARGET})
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_F90_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_HL_F90_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_HL_F90_LIBSH_TARGET} ${HDF5_HL_F90_LIB_NAME} SHARED ${HDF5_HL_F_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_HL_F90_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/hl/fortran
       LINKER_LANGUAGE Fortran
diff --git a/hl/fortran/src/H5HL_buildiface.F90 b/hl/fortran/src/H5HL_buildiface.F90
index 9dd879c..15897c3 100644
--- a/hl/fortran/src/H5HL_buildiface.F90
+++ b/hl/fortran/src/H5HL_buildiface.F90
@@ -60,13 +60,6 @@ PROGRAM H5HL_buildiface
   H5_H5CONFIG_F_IKIND
 
   INTEGER :: i, j, k
-  INTEGER :: ji, jr, jd
-#ifdef H5_FORTRAN_HAVE_C_LONG_DOUBLE
-  REAL(KIND=C_LONG_DOUBLE) :: c_longdble
-#endif
-  REAL(KIND=C_DOUBLE) :: c_dble
-  REAL(KIND=C_FLOAT) :: c_flt
-  INTEGER :: sizeof_var
   CHARACTER(LEN=2) :: chr2
 ! subroutine rank of array being passed in
   CHARACTER(LEN=2), DIMENSION(1:8), PARAMETER :: chr_rank=(/"_0","_1","_2","_3","_4","_5","_6","_7"/)
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index 0fcf8fa..90c8c17 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -120,10 +120,23 @@ TESTS =
 subdir = hl/fortran/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -447,18 +460,22 @@ AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ -I$(top_builddir)/fortran/src \
 	$(F9XMODFLAG)$(top_builddir)/fortran/src
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ $(am__append_1)
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -471,7 +488,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -509,10 +525,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -523,6 +543,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -533,8 +554,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -549,6 +582,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -556,6 +591,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -579,6 +615,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -594,7 +631,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -603,8 +642,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -683,6 +724,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in
index b27472c..e30836c 100644
--- a/hl/fortran/test/Makefile.in
+++ b/hl/fortran/test/Makefile.in
@@ -118,10 +118,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = hl/fortran/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -430,18 +443,22 @@ AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ -I$(top_builddir)/fortran/src \
 	-I$(top_builddir)/hl/fortran/src \
 	$(F9XMODFLAG)$(top_builddir)/fortran/src \
 	$(F9XMODFLAG)$(top_builddir)/hl/fortran/src
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ $(am__append_1)
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -454,7 +471,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -492,10 +508,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -506,6 +526,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -516,8 +537,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -532,6 +565,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -539,6 +574,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -562,6 +598,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -577,7 +614,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -586,8 +625,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -666,6 +707,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/fortran/test/tstlite.F90 b/hl/fortran/test/tstlite.F90
index 0ba7815..081e61e 100644
--- a/hl/fortran/test/tstlite.F90
+++ b/hl/fortran/test/tstlite.F90
@@ -418,7 +418,6 @@ SUBROUTINE test_dataset3D()
 #if H5_HAVE_Fortran_INTEGER_SIZEOF_16!=0
   INTEGER, PARAMETER :: int_kind_32 = SELECTED_INT_KIND(36) !should map to INTEGER*16 on most modern processors
   INTEGER(int_kind_32), DIMENSION(DIM1,DIM2,DIM3), TARGET :: dset_data_i32, data_out_i32
-  INTEGER(HID_T) :: dset_id32     ! Dataset identifier
   CHARACTER(LEN=7), PARAMETER :: dsetname16a = "dset16a"     ! Dataset name
   CHARACTER(LEN=7), PARAMETER :: dsetname16b = "dset16b"     ! Dataset name
   CHARACTER(LEN=7), PARAMETER :: dsetname16c = "dset16c"     ! Dataset name
@@ -760,7 +759,6 @@ SUBROUTINE test_datasetND(rank)
   INTEGER          :: type_class
   INTEGER(SIZE_T)  :: type_size
   CHARACTER(LEN=1) :: ichr1
-  CHARACTER(LEN=3) :: ichr3
   TYPE(C_PTR) :: f_ptr
   INTEGER(HID_T) :: type_id
 
diff --git a/hl/src/CMakeLists.txt b/hl/src/CMakeLists.txt
index 472f1ee..a86bf4f 100644
--- a/hl/src/CMakeLists.txt
+++ b/hl/src/CMakeLists.txt
@@ -42,7 +42,7 @@ if (BUILD_SHARED_LIBS)
   add_library (${HDF5_HL_LIBSH_TARGET} SHARED ${HL_SRCS} ${HL_HEADERS})
   TARGET_C_PROPERTIES (${HDF5_HL_LIBSH_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_HL_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
-  H5_SET_LIB_OPTIONS (${HDF5_HL_LIBSH_TARGET} ${HDF5_HL_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_HL_LIBSH_TARGET} ${HDF5_HL_LIB_NAME} SHARED ${HDF5_HL_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_HL_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/hl
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
diff --git a/hl/src/H5DO.c b/hl/src/H5DO.c
index 3b80eba..bfadfaa 100644
--- a/hl/src/H5DO.c
+++ b/hl/src/H5DO.c
@@ -129,7 +129,7 @@ herr_t
 H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension, 
            hid_t memtype, const void *buf)
 {
-
+    hbool_t created_dxpl = FALSE;       /* Whether we created a DXPL */
     hsize_t size[H5S_MAX_RANK];		/* The new size (after extension */
     hsize_t old_size = 0; 		/* The size of the dimension to be extended */
     int sndims; 			/* Number of dimensions in dataspace (signed) */
@@ -158,11 +158,13 @@ H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension,
     if(H5I_DATASET != H5Iget_type(dset_id))
 	goto done;
 
-    /* Get the default dataset transfer property list if the user didn't provide one */
-    if(H5P_DEFAULT == dxpl_id)
-        dxpl_id = H5P_DATASET_XFER_DEFAULT;
-    else
-	if(TRUE != H5Pisa_class(dxpl_id, H5P_DATASET_XFER))
+    /* If the user passed in a default DXPL, create one to pass to H5Dwrite() */
+    if(H5P_DEFAULT == dxpl_id) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0)
+            goto done;
+        created_dxpl = TRUE;
+    } /* end if */
+    else if(TRUE != H5Pisa_class(dxpl_id, H5P_DATASET_XFER))
 	    goto done;
 
     /* Get the dataspace of the dataset */
@@ -259,6 +261,12 @@ H5DOappend(hid_t dset_id, hid_t dxpl_id, unsigned axis, size_t extension,
     ret_value = SUCCEED;
 
 done:
+    /* Close dxpl if we created it vs. one was passed in */
+    if(created_dxpl) {
+        if(H5Pclose(dxpl_id) < 0)
+            ret_value = FAIL;
+    } /* end if */
+
     /* Close old dataspace */
     if(space_id != FAIL && H5Sclose(space_id) < 0)
 	ret_value = FAIL;
diff --git a/hl/src/H5PT.c b/hl/src/H5PT.c
index 6ed1ac0..e2d6a3d 100644
--- a/hl/src/H5PT.c
+++ b/hl/src/H5PT.c
@@ -48,15 +48,15 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
  */
 
 /*-------------------------------------------------------------------------
- * Function: H5PTcreate_fl
+ * Function: H5PTcreate
  *
  * Purpose: Creates a dataset containing a table and returns the Identifier
- *          of the table.
+ *          of the table. (Copied mostly from H5PTcreate_fl)
  *
- * Return: Success: table ID, Failure: Negative
+ * Return: Success: table ID, Failure: FAIL
  *
- * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
- *             James Laird, jlaird at ncsa.uiuc.edu
+ * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu (Author of H5PTcreate_fl)
+ *             James Laird, jlaird at ncsa.uiuc.edu (Author of H5PTcreate_fl)
  *
  * Date: March 12, 2004
  *
@@ -65,80 +65,93 @@ static herr_t H5PT_get_index(htbl_t *table_id, hsize_t *pt_index);
  *           table is initially of size 0.
  *
  * Modifications:
+ *	Mar 1, 2016
+ *		This function is added to replace H5PTcreate_fl and it differs
+ *		from H5PTcreate_fl only because its last argument is plist_id
+ *		instead of compression; this is to allow flexible compression.
+ *		-BMR
  *
  *-------------------------------------------------------------------------
  */
-
-hid_t H5PTcreate_fl ( hid_t loc_id,
-                              const char *dset_name,
-                              hid_t dtype_id,
-                              hsize_t chunk_size,
-                              int compression )
+hid_t H5PTcreate(hid_t loc_id,
+                 const char *dset_name,
+                 hid_t dtype_id,
+                 hsize_t chunk_size,
+                 hid_t plist_id)
 {
   htbl_t * table = NULL;
-  hid_t dset_id = H5I_BADID;
-  hid_t space_id = H5I_BADID;
-  hid_t plist_id = H5I_BADID;
+  hid_t dset_id = H5I_INVALID_HID;
+  hid_t space_id = H5I_INVALID_HID;
+  hid_t plistcopy_id = H5I_INVALID_HID;
   hsize_t dims[1];
   hsize_t dims_chunk[1];
   hsize_t maxdims[1];
-  hid_t ret_value;
+  hid_t ret_value = H5I_INVALID_HID;
 
   /* check the arguments */
   if (dset_name == NULL) {
-    goto out;
+    goto error;
   }
 
   /* Register the packet table ID type if this is the first table created */
   if(H5PT_ptable_id_type < 0)
     if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
-      goto out;
+      goto error;
 
   /* Get memory for the table identifier */
   table = (htbl_t *)HDmalloc(sizeof(htbl_t));
+  if ( table == NULL ) {
+    goto error;
+  }
+  table->dset_id = H5I_INVALID_HID;
+  table->type_id = H5I_INVALID_HID;
 
   /* Create a simple data space with unlimited size */
   dims[0] = 0;
   dims_chunk[0] = chunk_size;
   maxdims[0] = H5S_UNLIMITED;
   if((space_id = H5Screate_simple(1, dims, maxdims)) < 0)
-    goto out;
+    goto error;
 
   /* Modify dataset creation properties to enable chunking  */
-  plist_id = H5Pcreate(H5P_DATASET_CREATE);
-  if(H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
-    goto out;
-  if(compression >= 0 && compression <= 9)
-    if(H5Pset_deflate(plist_id, (unsigned)compression) < 0)
-        goto out;
+  if (plist_id == H5P_DEFAULT) {
+	plistcopy_id = H5Pcreate(H5P_DATASET_CREATE);
+  }
+  else {
+	plistcopy_id = H5Pcopy(plist_id);
+  }
+  if (chunk_size > 0)
+  {
+    if(H5Pset_chunk(plistcopy_id, 1, dims_chunk) < 0)
+      goto error;
+  }
 
   /* Create the dataset. */
-  if((dset_id = H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
-    goto out;
+  if((dset_id = H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plistcopy_id, H5P_DEFAULT)) < 0)
+    goto error;
+
+  /* Create the table identifier */
+  table->dset_id = dset_id;
 
   /* Terminate access to the data space. */
   if(H5Sclose(space_id) < 0)
-    goto out;
+    goto error;
 
   /* End access to the property list */
-  if(H5Pclose(plist_id) < 0)
-    goto out;
-
-  /* Create the table identifier */
-  table->dset_id = dset_id;
+  if(H5Pclose(plistcopy_id) < 0)
+    goto error;
 
   if((table->type_id = H5Tcopy(dtype_id)) < 0)
-    goto out;
+    goto error;
 
   if((table->type_id = H5Tget_native_type(table->type_id, H5T_DIR_DEFAULT)) < 0)
-    goto out;
+    goto error;
 
   H5PT_create_index(table);
   table->size = 0;
 
   /* Get an ID for this table */
   ret_value = H5Iregister(H5PT_ptable_id_type, table);
-
   if(ret_value != H5I_INVALID_HID)
     H5PT_ptable_count++;
   else
@@ -146,32 +159,38 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
 
   return ret_value;
 
-  out:
-    H5E_BEGIN_TRY
-    H5Sclose(space_id);
-    H5Pclose(plist_id);
-    H5Dclose(dset_id);
-    if(table)
-      HDfree(table);
-    H5E_END_TRY
-    return H5I_INVALID_HID;
-}
+error:
+    if (space_id != H5I_INVALID_HID)
+	H5Sclose(space_id);
+    if (plistcopy_id != H5I_INVALID_HID)
+	H5Pclose(plistcopy_id);
+    if (dset_id != H5I_INVALID_HID)
+	H5Dclose(dset_id);
+    if (table)
+    {
+        if (table->type_id != H5I_INVALID_HID)
+	    H5Tclose(table->type_id);
+	HDfree(table);
+    }
+
+    return ret_value;
+} /* H5PTcreate */
+
 
-#ifdef H5_VLPT_ENABLED
 /*-------------------------------------------------------------------------
- * Function: H5PTcreate_vl
+ * Function: H5PTcreate_fl
  *
- * Purpose: Creates a dataset containing a table of variable length records
- *          and returns the Identifier of the table.
+ * Purpose: Creates a dataset containing a table and returns the Identifier
+ *          of the table.
  *
  * Return: Success: table ID, Failure: Negative
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
  *
- * Date: April 12, 2004
+ * Date: March 12, 2004
  *
- * Comments: This function does not handle compression or fill data
+ * Comments: This function does not handle fill data
  *           currently.  Fill data is not necessary because the
  *           table is initially of size 0.
  *
@@ -179,38 +198,104 @@ hid_t H5PTcreate_fl ( hid_t loc_id,
  *
  *-------------------------------------------------------------------------
  */
-hid_t H5PTcreate_vl ( hid_t loc_id,
-                                 const char*dset_name,
-                                 hsize_t chunk_size)
+
+hid_t H5PTcreate_fl ( hid_t loc_id,
+                              const char *dset_name,
+                              hid_t dtype_id,
+                              hsize_t chunk_size,
+                              int compression )
 {
-  hid_t ret_value=H5I_BADID;
-  hid_t vltype;
+  htbl_t * table = NULL;
+  hid_t dset_id = H5I_INVALID_HID;
+  hid_t space_id = H5I_INVALID_HID;
+  hid_t plist_id = H5I_INVALID_HID;
+  hsize_t dims[1];
+  hsize_t dims_chunk[1];
+  hsize_t maxdims[1];
+  hid_t ret_value = H5I_INVALID_HID;
 
   /* check the arguments */
   if (dset_name == NULL) {
-    goto out;
+    goto error;
+  }
+
+  /* Register the packet table ID type if this is the first table created */
+  if(H5PT_ptable_id_type < 0)
+    if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
+      goto error;
+
+  /* Get memory for the table identifier */
+  table = (htbl_t *)HDmalloc(sizeof(htbl_t));
+  if ( table == NULL ) {
+    goto error;
   }
+  table->dset_id = H5I_INVALID_HID;
+  table->type_id = H5I_INVALID_HID;
+
+  /* Create a simple data space with unlimited size */
+  dims[0] = 0;
+  dims_chunk[0] = chunk_size;
+  maxdims[0] = H5S_UNLIMITED;
+  if((space_id = H5Screate_simple(1, dims, maxdims)) < 0)
+    goto error;
+
+  /* Modify dataset creation properties to enable chunking  */
+  plist_id = H5Pcreate(H5P_DATASET_CREATE);
+  if(H5Pset_chunk(plist_id, 1, dims_chunk) < 0)
+    goto error;
+  if(compression >= 0 && compression <= 9)
+    if(H5Pset_deflate(plist_id, (unsigned)compression) < 0)
+        goto error;
+
+  /* Create the dataset. */
+  if((dset_id = H5Dcreate2(loc_id, dset_name, dtype_id, space_id, H5P_DEFAULT, plist_id, H5P_DEFAULT)) < 0)
+    goto error;
 
-  /* Create a variable length type that uses single bytes as its base type */
-  vltype = H5Tvlen_create(H5T_NATIVE_UCHAR);
-  if(vltype < 0)
-    goto out;
+  /* Create the table identifier */
+  table->dset_id = dset_id;
 
-  if((ret_value=H5PTcreate_fl(loc_id, dset_name, vltype, chunk_size, 0)) < 0)
-    goto out;
+  /* Terminate access to the data space. */
+  if(H5Sclose(space_id) < 0)
+    goto error;
 
-  /* close the vltype */
-  if(H5Tclose(vltype) < 0)
-    goto out;
+  /* End access to the property list */
+  if(H5Pclose(plist_id) < 0)
+    goto error;
+
+  if((table->type_id = H5Tcopy(dtype_id)) < 0)
+    goto error;
+
+  if((table->type_id = H5Tget_native_type(table->type_id, H5T_DIR_DEFAULT)) < 0)
+    goto error;
+
+  H5PT_create_index(table);
+  table->size = 0;
+
+  /* Get an ID for this table */
+  ret_value = H5Iregister(H5PT_ptable_id_type, table);
+  if(ret_value != H5I_INVALID_HID)
+    H5PT_ptable_count++;
+  else
+    H5PT_close(table);
 
   return ret_value;
 
-out:
-  if(ret_value != H5I_BADID)
-    H5PTclose(ret_value);
-  return H5I_BADID;
-}
-#endif /* H%_VLPT_ENABLED */
+error:
+    if (space_id != H5I_INVALID_HID)
+	H5Sclose(space_id);
+    if (plist_id != H5I_INVALID_HID)
+	H5Pclose(plist_id);
+    if (dset_id != H5I_INVALID_HID)
+	H5Dclose(dset_id);
+    if (table)
+    {
+        if (table->type_id != H5I_INVALID_HID)
+	    H5Tclose(table->type_id);
+	HDfree(table);
+    }
+
+    return ret_value;
+} /* H5PTcreate_fl */
 
 /*-------------------------------------------------------------------------
  * Function: H5PTopen
@@ -239,58 +324,59 @@ out:
 hid_t H5PTopen( hid_t loc_id,
                              const char *dset_name )
 {
-  hid_t type_id=H5I_BADID;
-  hid_t space_id=H5I_BADID;
+  hid_t type_id=H5I_INVALID_HID;
+  hid_t space_id=H5I_INVALID_HID;
   htbl_t * table = NULL;
-  hid_t ret_value;
   hsize_t dims[1];
+  hid_t ret_value = H5I_INVALID_HID;
 
   /* check the arguments */
   if (dset_name == NULL) {
-    goto out;
+    goto error;
   }
 
   /* Register the packet table ID type if this is the first table created */
   if( H5PT_ptable_id_type < 0)
     if((H5PT_ptable_id_type = H5Iregister_type((size_t)H5PT_HASH_TABLE_SIZE, 0, (H5I_free_t)H5PT_free_id)) < 0)
-      goto out;
+      goto error;
 
   table = (htbl_t *)HDmalloc(sizeof(htbl_t));
-
   if ( table == NULL ) {
-    goto out;
+    goto error;
   }
-  table->dset_id = H5I_BADID;
-  table->type_id = H5I_BADID;
+  table->dset_id = H5I_INVALID_HID;
+  table->type_id = H5I_INVALID_HID;
 
   /* Open the dataset */
   if((table->dset_id = H5Dopen2(loc_id, dset_name, H5P_DEFAULT)) < 0)
-      goto out;
-  if(table->dset_id < 0)
-    goto out;
+    goto error;
 
   /* Get the dataset's disk datatype */
   if((type_id = H5Dget_type(table->dset_id)) < 0)
-    goto out;
+    goto error;
 
   /* Get the table's native datatype */
   if((table->type_id = H5Tget_native_type(type_id, H5T_DIR_ASCEND)) < 0)
-    goto out;
+    goto error;
 
+  /* Close the disk datatype */
   if(H5Tclose(type_id) < 0)
-    goto out;
+    goto error;
+  type_id = H5I_INVALID_HID;
 
   /* Initialize the current record pointer */
   if((H5PT_create_index(table)) < 0)
-    goto out;
+    goto error;
 
   /* Get number of records in table */
   if((space_id=H5Dget_space(table->dset_id)) < 0)
-    goto out;
-  if( H5Sget_simple_extent_dims( space_id, dims, NULL) < 0)
-    goto out;
+    goto error;
+  if(H5Sget_simple_extent_dims(space_id, dims, NULL) < 0)
+    goto error;
   if(H5Sclose(space_id) < 0)
-    goto out;
+    goto error;
+  space_id = H5I_INVALID_HID;
+
   table->size = dims[0];
 
   /* Get an ID for this table */
@@ -303,33 +389,36 @@ hid_t H5PTopen( hid_t loc_id,
 
   return ret_value;
 
-out:
-  H5E_BEGIN_TRY
-  H5Tclose(type_id);
-  H5Sclose(space_id);
-  if(table)
-  {
-    H5Dclose(table->dset_id);
-    H5Tclose(table->type_id);
-    HDfree(table);
-  }
-  H5E_END_TRY
-  return H5I_INVALID_HID;
-}
+error:
+    if (type_id != H5I_INVALID_HID)
+	H5Dclose(type_id);
+    if (space_id != H5I_INVALID_HID)
+	H5Sclose(space_id);
+    if(table)
+    {
+        if (table->type_id != H5I_INVALID_HID)
+	    H5Tclose(table->type_id);
+	if (table->dset_id != H5I_INVALID_HID)
+	    H5Dclose(table->dset_id);
+	HDfree(table);
+    }
+
+    return ret_value;
+} /* H5PTopen */
 
 /*-------------------------------------------------------------------------
  * Function: H5PT_free_id
  *
  * Purpose: Free an id.  Callback for H5Iregister_type.
  *
- * Return: Success: 0, Failure: N/A
+ * Return: Success: SUCCEED, Failure: N/A
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5PT_free_id(void *id)
 {
     HDfree(id);
-    return 0;
+    return SUCCEED;
 }
 
 /*-------------------------------------------------------------------------
@@ -338,7 +427,7 @@ H5PT_free_id(void *id)
  * Purpose: Closes a table (i.e. cleans up all open resources used by a
  *          table).
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -355,21 +444,21 @@ static herr_t
 H5PT_close( htbl_t* table)
 {
   if(table == NULL)
-    goto out;
+    goto error;
 
   /* Close the dataset */
   if(H5Dclose(table->dset_id) < 0)
-    goto out;
+    goto error;
 
   /* Close the memory datatype */
   if(H5Tclose(table->type_id) < 0)
-    goto out;
+    goto error;
 
   HDfree(table);
 
-  return 0;
+  return SUCCEED;
 
-out:
+error:
   if(table)
   {
     H5E_BEGIN_TRY
@@ -378,7 +467,7 @@ out:
     H5E_END_TRY
     HDfree(table);
   }
-  return -1;
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -387,7 +476,7 @@ out:
  * Purpose: Closes a table (i.e. cleans up all open resources used by a
  *          table).
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -406,11 +495,11 @@ herr_t H5PTclose( hid_t table_id )
 
   /* Remove the ID from the library */
   if((table = (htbl_t *)H5Iremove_verify(table_id, H5PT_ptable_id_type)) ==NULL)
-    goto out;
+    goto error;
 
   /* If the library found the table, remove it */
   if( H5PT_close(table) < 0)
-    goto out;
+    goto error;
 
   /* One less packet table open */
   H5PT_ptable_count--;
@@ -423,10 +512,10 @@ herr_t H5PTclose( hid_t table_id )
     H5PT_ptable_id_type = H5I_UNINIT;
   }
 
-  return 0;
+  return SUCCEED;
 
-out:
-  return -1;
+error:
+  return FAIL;
 }
 
 
@@ -442,7 +531,7 @@ out:
  *
  * Purpose: Appends packets to the end of a packet table
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -463,22 +552,22 @@ herr_t H5PTappend( hid_t table_id,
 
   /* Find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    goto out;
+    goto error;
 
   /* If we are asked to write 0 records, just do nothing */
   if(nrecords == 0)
-    return 0;
+    return SUCCEED;
 
   if((H5TB_common_append_records(table->dset_id, table->type_id,
   			nrecords, table->size, data)) < 0)
-    goto out;
+    goto error;
 
   /* Update table size */
   table->size += nrecords;
-  return 0;
+  return SUCCEED;
 
-out:
-  return -1;
+error:
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -495,7 +584,7 @@ out:
  * Purpose: Reads packets starting at the current index and updates
  *          that index
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -517,22 +606,22 @@ herr_t H5PTget_next( hid_t table_id,
 
   /* Find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    goto out;
+    goto error;
 
   /* If nrecords == 0, do nothing */
   if(nrecords == 0)
-    return 0;
+    return SUCCEED;
 
   if((H5TB_common_read_records(table->dset_id, table->type_id,
                               table->current_index, nrecords, table->size, data)) < 0)
-    goto out;
+    goto error;
 
   /* Update the current index */
   table->current_index += nrecords;
-  return 0;
+  return SUCCEED;
 
-out:
-  return -1;
+error:
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -540,7 +629,7 @@ out:
  *
  * Purpose: Reads packets from anywhere in a packet table
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -564,20 +653,20 @@ herr_t H5PTread_packets( hid_t table_id,
   /* find the table struct from its ID */
   table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type);
   if(table == NULL)
-    goto out;
+    goto error;
 
   /* If nrecords == 0, do nothing */
   if(nrecords == 0)
-    return 0;
+    return SUCCEED;
 
   if( H5TB_common_read_records(table->dset_id, table->type_id,
                               start, nrecords, table->size, data) < 0)
-    goto out;
+    goto error;
 
-  return 0;
+  return SUCCEED;
 
-out:
-  return -1;
+error:
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -592,7 +681,7 @@ out:
  *
  * Purpose: Resets, sets, and gets the current record index for a packet table
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *  		   James Laird, jlaird at ncsa.uiuc.edu
@@ -611,37 +700,37 @@ H5PT_create_index(htbl_t *table)
   if( table != NULL)
   {
     table->current_index = 0;
-    return 0;
+    return SUCCEED;
   }
-  return -1;
+  return FAIL;
 }
 
 static herr_t
-H5PT_set_index(htbl_t *table, hsize_t index)
+H5PT_set_index(htbl_t *table, hsize_t pt_index)
 {
   /* Ensure index is valid */
   if( table != NULL )
   {
-    if( index < table->size )
+    if( pt_index < table->size )
     {
-      table->current_index = index;
-      return 0;
+      table->current_index = pt_index;
+      return SUCCEED;
     }
   }
-  return -1;
+  return FAIL;
 }
 
 static herr_t
-H5PT_get_index(htbl_t *table, hsize_t *index)
+H5PT_get_index(htbl_t *table, hsize_t *pt_index)
 {
   /* Ensure index is valid */
   if( table != NULL )
   {
-    if(index)
-      *index = table->current_index;
-    return 0;
+    if(pt_index)
+      *pt_index = table->current_index;
+    return SUCCEED;
   }
-  return -1;
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -649,7 +738,7 @@ H5PT_get_index(htbl_t *table, hsize_t *index)
  *
  * Purpose: Resets, sets, and gets the current record index for a packet table
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -668,7 +757,7 @@ herr_t H5PTcreate_index(hid_t table_id)
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    return -1;
+    return FAIL;
 
   return H5PT_create_index(table);
 }
@@ -679,7 +768,7 @@ herr_t H5PTset_index(hid_t table_id, hsize_t pt_index)
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    return -1;
+    return FAIL;
 
   return H5PT_set_index(table, pt_index);
 }
@@ -690,7 +779,7 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    return -1;
+    return FAIL;
 
   return H5PT_get_index(table, pt_index);
 }
@@ -705,9 +794,9 @@ herr_t H5PTget_index(hid_t table_id, hsize_t *pt_index)
 /*-------------------------------------------------------------------------
  * Function: H5PTget_num_packets
  *
- * Purpose: Returns by reference the number of packets in the dataset
+ * Purpose: Returns by reference the number of packets in the packet table
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -727,14 +816,15 @@ herr_t H5PTget_num_packets( hid_t table_id, hsize_t *nrecords)
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    goto out;
+    goto error;
 
   if(nrecords)
     *nrecords = table->size;
 
-  return 0;
-out:
-  return -1;
+  return SUCCEED;
+
+error:
+  return FAIL;
 }
 
 
@@ -743,7 +833,7 @@ out:
  *
  * Purpose: Validates a table identifier
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -761,19 +851,18 @@ herr_t H5PTis_valid(hid_t table_id)
 {
   /* find the table struct from its ID */
   if(H5Iobject_verify(table_id, H5PT_ptable_id_type) ==NULL)
-    return -1;
+    return FAIL;
 
-  return 0;
+  return SUCCEED;
 }
 
-#ifdef H5_VLPT_ENABLED
 /*-------------------------------------------------------------------------
  * Function: H5PTis_varlen
  *
  * Purpose: Returns 1 if a table_id corresponds to a packet table of variable-
  *          length records or 0 for fixed-length records.
  *
- * Return: True: 1, False: 0, Failure: -1
+ * Return: True: 1, False: 0, Failure: FAIL
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
  *             James Laird, jlaird at ncsa.uiuc.edu
@@ -794,17 +883,18 @@ herr_t H5PTis_varlen(hid_t table_id)
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    goto out;
+    goto error;
 
   if((type = H5Tget_class( table->type_id )) == H5T_NO_CLASS)
-    goto out;
+    goto error;
 
   if( type == H5T_VLEN )
     return 1;
   else
     return 0;
-out:
-  return -1;
+
+error:
+  return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -815,12 +905,12 @@ out:
  */
 
 /*-------------------------------------------------------------------------
- * Function: H5PTfree_vlen_readbuff
+ * Function: H5PTfree_vlen_buff
  *
  * Purpose: Frees memory used when reading from a variable length packet
  *          table.
  *
- * Return: Success: 0, Failure: -1
+ * Return: Success: SUCCEED, Failure: FAIL
  *          -2 if memory was reclaimed but another error occurred
  *
  * Programmer: Nat Furrer, nfurrer at ncsa.uiuc.edu
@@ -836,25 +926,25 @@ out:
  *-------------------------------------------------------------------------
  */
 
-herr_t H5PTfree_vlen_readbuff( hid_t table_id,
+herr_t H5PTfree_vlen_buff( hid_t table_id,
                                size_t _bufflen,
                                void * buff )
 {
-  hid_t space_id = H5I_BADID;
+  hid_t space_id = H5I_INVALID_HID;
   htbl_t * table;
   hsize_t bufflen = _bufflen;
   herr_t ret_value;
 
   /* find the table struct from its ID */
   if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
-    goto out;
+    goto error;
 
   if((space_id = H5Screate_simple(1, &bufflen, NULL)) < 0)
-    goto out;
+    goto error;
 
   /* Free the memory.  If this succeeds, ret_value should be 0. */
   if((ret_value = H5Dvlen_reclaim(table->type_id, space_id, H5P_DEFAULT, buff)) < 0)
-    goto out;
+    goto error;
 
   /* If the dataspace cannot be closed, return -2 to indicate that memory */
   /* was freed successfully but an error still occurred. */
@@ -863,11 +953,83 @@ herr_t H5PTfree_vlen_readbuff( hid_t table_id,
 
   return ret_value;
 
-out:
+error:
   H5E_BEGIN_TRY
     H5Sclose(space_id);
   H5E_END_TRY
-  return -1;
+  return FAIL;
+} /* H5PTfree_vlen_buff */
+
+/*-------------------------------------------------------------------------
+ *
+ * Accessor functions
+ *
+ *-------------------------------------------------------------------------
+ */
+/*-------------------------------------------------------------------------
+ * Function: H5PTget_dataset
+ *
+ * Purpose: Returns the backend dataset of this packet table
+ *
+ * Return: Success: SUCCEED, Failure: FAIL
+ *
+ * Programmer: User's patch 0003, HDFFV-8623. -BMR
+ *
+ * Date: Feb 10, 2016
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t H5PTget_dataset(hid_t table_id)
+{
+  htbl_t * table;
+  hid_t ret_value = H5I_INVALID_HID;
+
+  /* find the table struct from its ID */
+  if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+    goto error;
+
+  ret_value = table->dset_id;
+
+error:
+
+  return ret_value;
 }
 
-#endif /* H5_VLPT_ENABLED */
+/*-------------------------------------------------------------------------
+ * Function: H5PTget_type
+ *
+ * Purpose: Returns the backend type of this packet table
+ *
+ * Return: Success: datatype ID, Failure: H5I_INVALID_HID
+ *
+ * Programmer: User's patch 0003, HDFFV-8623. -BMR
+ *
+ * Date: Feb 10, 2016
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t H5PTget_type( hid_t table_id)
+{
+  htbl_t * table;
+  hid_t ret_value = H5I_INVALID_HID;
+
+  /* find the table struct from its ID */
+  if((table = (htbl_t *) H5Iobject_verify(table_id, H5PT_ptable_id_type)) == NULL)
+    goto error;
+
+  ret_value = table->type_id;
+
+error:
+
+  return ret_value;
+}
diff --git a/hl/src/H5PTpublic.h b/hl/src/H5PTpublic.h
index f919010..420275a 100644
--- a/hl/src/H5PTpublic.h
+++ b/hl/src/H5PTpublic.h
@@ -22,74 +22,58 @@ extern "C" {
 #endif
 
 /*-------------------------------------------------------------------------
- *
  * Create/Open/Close functions
- *
  *-------------------------------------------------------------------------
  */
+/* NOTE: H5PTcreate is replacing H5PTcreate_fl for better name due to the
+   removal of H5PTcreate_vl.  H5PTcreate_fl may be retired in 1.8.19. */
+H5_HLDLL hid_t H5PTcreate(hid_t loc_id, const char *dset_name,
+			hid_t dtype_id, hsize_t chunk_size, hid_t plist_id);
 
-H5_HLDLL hid_t H5PTcreate_fl ( hid_t loc_id,
-                      const char *dset_name,
-                      hid_t dtype_id,
-                      hsize_t chunk_size,
-                      int compression );
+H5_HLDLL hid_t H5PTopen(hid_t loc_id, const char *dset_name);
 
-#ifdef VLPT_REMOVED
-H5_HLDLL hid_t H5PTcreate_vl ( hid_t loc_id,
-                      const char *dset_name,
-                      hsize_t chunk_size );
-#endif /* VLPT_REMOVED */
+H5_HLDLL herr_t H5PTclose(hid_t table_id);
 
-H5_HLDLL hid_t H5PTopen( hid_t loc_id,
-                const char *dset_name );
-
-H5_HLDLL herr_t  H5PTclose( hid_t table_id );
+/* This function may be removed from the packet table in release 1.8.19. */
+H5_HLDLL hid_t H5PTcreate_fl(hid_t loc_id, const char *dset_name,
+			hid_t dtype_id, hsize_t chunk_size, int compression);
 
 
 /*-------------------------------------------------------------------------
- *
  * Write functions
- *
  *-------------------------------------------------------------------------
  */
-
-H5_HLDLL herr_t  H5PTappend( hid_t table_id,
-                   size_t nrecords,
-                   const void * data );
+H5_HLDLL herr_t H5PTappend(hid_t table_id, size_t nrecords, const void *data);
 
 /*-------------------------------------------------------------------------
- *
  * Read functions
- *
  *-------------------------------------------------------------------------
  */
+H5_HLDLL herr_t H5PTget_next(hid_t table_id, size_t nrecords, void * data);
 
+H5_HLDLL herr_t H5PTread_packets(hid_t table_id, hsize_t start,
+			size_t nrecords, void *data);
 
-H5_HLDLL herr_t  H5PTget_next( hid_t table_id,
-                     size_t nrecords,
-                     void * data );
+/*-------------------------------------------------------------------------
+ * Inquiry functions
+ *-------------------------------------------------------------------------
+ */
+H5_HLDLL herr_t H5PTget_num_packets(hid_t table_id, hsize_t *nrecords);
 
-H5_HLDLL herr_t  H5PTread_packets( hid_t table_id,
-                         hsize_t start,
-                         size_t nrecords,
-                         void *data );
+H5_HLDLL herr_t H5PTis_valid(hid_t table_id);
+
+H5_HLDLL herr_t H5PTis_varlen(hid_t table_id);
 
 /*-------------------------------------------------------------------------
  *
- * Inquiry functions
+ * Accessor functions
  *
  *-------------------------------------------------------------------------
  */
 
+H5_HLDLL hid_t H5PTget_dataset(hid_t table_id);
 
-H5_HLDLL herr_t  H5PTget_num_packets( hid_t table_id,
-                            hsize_t *nrecords );
-
-H5_HLDLL herr_t  H5PTis_valid( hid_t table_id );
-
-#ifdef VLPT_REMOVED
-H5_HLDLL herr_t  H5PTis_varlen( hid_t table_id );
-#endif /* VLPT_REMOVED */
+H5_HLDLL hid_t H5PTget_type(hid_t table_id);
 
 /*-------------------------------------------------------------------------
  *
@@ -113,11 +97,9 @@ H5_HLDLL herr_t  H5PTget_index( hid_t table_id,
  *-------------------------------------------------------------------------
  */
 
-#ifdef VLPT_REMOVED
-H5_HLDLL herr_t  H5PTfree_vlen_readbuff( hid_t table_id,
+H5_HLDLL herr_t  H5PTfree_vlen_buff( hid_t table_id,
                                size_t bufflen,
                                void * buff );
-#endif /* VLPT_REMOVED */
 
 #ifdef __cplusplus
 }
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index 5f01111..8e59e34 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -110,10 +110,23 @@ TESTS =
 subdir = hl/src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
@@ -418,18 +431,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -442,7 +459,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -480,10 +496,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -494,6 +514,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -504,8 +525,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -520,6 +553,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -527,6 +562,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -550,6 +586,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -565,7 +602,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -574,8 +613,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -654,6 +695,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/test/CMakeLists.txt b/hl/test/CMakeLists.txt
index 916dcf3..bf598c4 100644
--- a/hl/test/CMakeLists.txt
+++ b/hl/test/CMakeLists.txt
@@ -48,9 +48,19 @@ HL_ADD_EXE (test_ds)
 HL_ADD_EXE (test_dset_opt)
 HL_ADD_EXE (test_image)
 HL_ADD_EXE (test_lite)
-HL_ADD_EXE (test_packet)
 HL_ADD_EXE (test_table)
 
+# test_packet has two source files
+add_executable (hl_test_packet test_packet.c test_packet_vlen.c)
+TARGET_NAMING (hl_test_packet STATIC)
+TARGET_C_PROPERTIES (hl_test_packet STATIC " " " ")
+target_link_libraries (hl_test_packet
+    ${HDF5_HL_LIB_TARGET}
+    ${HDF5_LIB_TARGET}
+    ${HDF5_TEST_LIB_TARGET}
+)
+set_target_properties (hl_test_packet PROPERTIES FOLDER test/hl)
+
 # --------------------------------------------------------------------
 # This executable is used to generate test files for the test_ds test.
 # It should only be run during development when new test files are needed
diff --git a/hl/test/Makefile.am b/hl/test/Makefile.am
index 7aa3f6b..3f21218 100644
--- a/hl/test/Makefile.am
+++ b/hl/test/Makefile.am
@@ -49,4 +49,7 @@ CHECK_CLEANFILES+=combine_tables[1-2].h5 test_ds[1-9].h5 test_ds10.h5 \
 	test_packet_table.h5 test_packet_compress.h5 test_detach.h5 \
     test_dectris.h5 test_append.h5
 
+# Sources for test_packet executable
+test_packet_SOURCES=test_packet.c test_packet_vlen.c
+
 include $(top_srcdir)/config/conclude.am
diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in
index 709d7ad..4b9190a 100644
--- a/hl/test/Makefile.in
+++ b/hl/test/Makefile.in
@@ -112,10 +112,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = hl/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -170,8 +183,9 @@ test_lite_SOURCES = test_lite.c
 test_lite_OBJECTS = test_lite.$(OBJEXT)
 test_lite_LDADD = $(LDADD)
 test_lite_DEPENDENCIES = $(LIBH5_HL) $(LIBH5TEST) $(LIBHDF5)
-test_packet_SOURCES = test_packet.c
-test_packet_OBJECTS = test_packet.$(OBJEXT)
+am_test_packet_OBJECTS = test_packet.$(OBJEXT) \
+	test_packet_vlen.$(OBJEXT)
+test_packet_OBJECTS = $(am_test_packet_OBJECTS)
 test_packet_LDADD = $(LDADD)
 test_packet_DEPENDENCIES = $(LIBH5_HL) $(LIBH5TEST) $(LIBHDF5)
 test_table_SOURCES = test_table.c
@@ -214,10 +228,11 @@ am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = gen_test_ds.c gen_test_ld.c test_ds.c test_dset_append.c \
 	test_dset_opt.c test_file_image.c test_image.c test_ld.c \
-	test_lite.c test_packet.c test_table.c
+	test_lite.c $(test_packet_SOURCES) test_table.c
 DIST_SOURCES = gen_test_ds.c gen_test_ld.c test_ds.c \
 	test_dset_append.c test_dset_opt.c test_file_image.c \
-	test_image.c test_ld.c test_lite.c test_packet.c test_table.c
+	test_image.c test_ld.c test_lite.c $(test_packet_SOURCES) \
+	test_table.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -468,18 +483,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I. -I$(srcdir) \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -492,7 +511,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -530,10 +548,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -544,6 +566,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -554,8 +577,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -570,6 +605,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -577,6 +614,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -600,6 +638,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -615,7 +654,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -624,8 +665,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -704,6 +747,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
@@ -760,6 +804,9 @@ TEST_PROG = test_lite test_image test_file_image test_table test_ds test_packet
 # --enable-build-all at configure time.
 BUILD_ALL_PROGS = gen_test_ds gen_test_ld
 
+# Sources for test_packet executable
+test_packet_SOURCES = test_packet.c test_packet_vlen.c
+
 # Automake needs to be taught how to build lib, progs, and tests targets.
 # These will be filled in automatically for the most part (e.g.,
 # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
@@ -894,6 +941,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_ld.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_lite.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_packet.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_packet_vlen.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_table.Po at am__quote@
 
 .c.o:
diff --git a/hl/test/h5hltest.h b/hl/test/h5hltest.h
index e8292d2..9a5e702 100644
--- a/hl/test/h5hltest.h
+++ b/hl/test/h5hltest.h
@@ -36,5 +36,7 @@
 /* Implements verbose 'assert' with 'goto error' exit  */
 #define VERIFY(condition, string) do { if (!(condition)) FAIL_PUTS_ERROR(string) } while(0)
 
+int test_packet_table_with_varlen(void);
+
 #endif /* _H5HLTEST_H */
 
diff --git a/hl/test/test_packet.c b/hl/test/test_packet.c
index 345aecb..e2ca2b5 100644
--- a/hl/test/test_packet.c
+++ b/hl/test/test_packet.c
@@ -31,9 +31,6 @@
 #define TEST_FILE_NAME "test_packet_table.h5"
 #define TEST_COMPRESS_FILE "test_packet_compress.h5"
 #define PT_NAME "Test Packet Table"
-#ifdef VLPT_REMOVED
-#define VL_TABLE_NAME "Varlen Test Table"
-#endif /* VLPT_REMOVED */
 #define H5TB_TABLE_NAME "Table1"
 
 /*-------------------------------------------------------------------------
@@ -77,9 +74,9 @@ static int cmp_par(size_t i, size_t j, particle_t *rbuf, particle_t *wbuf )
   rbuf[i].longi != wbuf[j].longi ||
   !H5_FLT_ABS_EQUAL(rbuf[i].pressure,wbuf[j].pressure) ||
   !H5_DBL_ABS_EQUAL(rbuf[i].temperature,wbuf[j].temperature) ) {
-  return -1;
+  return FAIL;
  }
- return 0;
+ return SUCCEED;
 }
 
 /*-------------------------------------------------------------------------
@@ -95,22 +92,22 @@ make_particle_type(void)
 
  /* Create the memory data type. */
  if ((type_id = H5Tcreate (H5T_COMPOUND, type_size )) < 0 )
-  return -1;
+  return FAIL;
 
  /* Insert fields. */
  string_type = H5Tcopy( H5T_C_S1 );
  H5Tset_size( string_type, (size_t)16 );
 
  if ( H5Tinsert(type_id, "Name", HOFFSET(particle_t, name) , string_type ) < 0 )
-     return -1;
+     return FAIL;
  if ( H5Tinsert(type_id, "Lat", HOFFSET(particle_t, lati) , H5T_NATIVE_INT ) < 0 )
-     return -1;
+     return FAIL;
  if ( H5Tinsert(type_id, "Long", HOFFSET(particle_t, longi) , H5T_NATIVE_INT ) < 0 )
-     return -1;
+     return FAIL;
  if ( H5Tinsert(type_id, "Pressure", HOFFSET(particle_t, pressure) , H5T_NATIVE_FLOAT ) < 0 )
-     return -1;
+     return FAIL;
  if ( H5Tinsert(type_id, "Temperature", HOFFSET(particle_t, temperature) , H5T_NATIVE_DOUBLE ) < 0 )
-     return -1;
+     return FAIL;
 
  return type_id;
 }
@@ -156,9 +153,9 @@ static int create_hl_table(hid_t fid)
                         chunk_size, fill_data, compress, testPart  );
 
 if(status<0)
-  return -1;
+  return FAIL;
 else
-  return 0;
+  return SUCCEED;
 }
 
 
@@ -188,23 +185,21 @@ static int test_create_close(hid_t fid)
     table = H5PTcreate_fl(fid, PT_NAME, part_t, (hsize_t)100, -1);
     H5Tclose(part_t);
     if( H5PTis_valid(table) < 0)
-      goto out;
-#ifdef VLPT_REMOVED
+	goto error;
     if( H5PTis_varlen(table) != 0)
-      goto out;
-#endif /* VLPT_REMOVED */
+	goto error;
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-      goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
       H5_FAILED();
-      return -1;
+      return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -224,23 +219,22 @@ static int test_open(hid_t fid)
     /* Open the table */
     table = H5PTopen(fid, PT_NAME);
     if( H5PTis_valid(table) < 0)
-      goto out;
-#ifdef VLPT_REMOVED
+        goto error;
     if( H5PTis_varlen(table) != 0)
-      goto out;
-#endif /* VLPT_REMOVED */
+        goto error;
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-      goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
+      if (table > 0) H5PTclose(table);
       H5_FAILED();
-      return -1;
+      return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -261,52 +255,52 @@ static int test_append(hid_t fid)
     /* Open the table */
     table = H5PTopen(fid, PT_NAME);
     if( H5PTis_valid(table) < 0)
-        goto out;
+        goto error;
 
     /* Count the number of packets in the table  */
     err = H5PTget_num_packets(table, &count);
     if( err < 0)
-        goto out;
+        goto error;
     /* There should be 0 records in the table */
     if( count != 0 )
-        goto out;
+        goto error;
 
     /* Append one particle */
     err = H5PTappend(table, (size_t)1, &(testPart[0]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Append several particles */
     err = H5PTappend(table, (size_t)6, &(testPart[1]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Append one more particle */
     err = H5PTappend(table, (size_t)1, &(testPart[7]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Count the number of packets in the table  */
     err = H5PTget_num_packets(table, &count);
     if( err < 0)
-        goto out;
+        goto error;
     /* There should be 8 records in the table now */
     if( count != 8 )
-        goto out;
+        goto error;
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-        goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
         H5_FAILED();
-        if( H5PTis_valid(table) < 0)
+        if( H5PTis_valid(table) > 0)
             H5PTclose(table);
-        return -1;
+        return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -328,44 +322,44 @@ static int test_read(hid_t fid)
     /* Open the table */
     table = H5PTopen(fid, PT_NAME);
     if( H5PTis_valid(table) < 0)
-        goto out;
+        goto error;
 
     /* Read several particles */
     err = H5PTread_packets(table, (hsize_t)0, 3, &(readBuf[0]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Read one particle */
     err = H5PTread_packets(table, (hsize_t)3, 1, &(readBuf[3]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Read several particles */
     err = H5PTread_packets(table, (hsize_t)4, (NRECORDS - 4 ), &(readBuf[4]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Ensure that particles were read correctly */
     for(c=0; c<NRECORDS; c++)
     {
         if( cmp_par(c%8, c, testPart, readBuf) != 0)
-            goto out;
+            goto error;
     }
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-        goto out;
+        goto error;
 
     PASSED();
 
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
         H5_FAILED();
-        if( H5PTis_valid(table) < 0)
+        if( H5PTis_valid(table) > 0)
             H5PTclose(table);
-        return -1;
+        return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -389,21 +383,21 @@ static int test_get_next(hid_t fid)
     /* Open the table */
     table = H5PTopen(fid, PT_NAME);
     if( H5PTis_valid(table) < 0)
-        goto out;
+        goto error;
 
     /* Read several particles consecutively */
     for(c=0; c < NRECORDS; c++)
     {
-        err = H5PTget_next(table, 1, &readBuf[c]);
+        err = H5PTget_next(table, (size_t)1, &readBuf[c]);
         if(err < 0)
-            goto out;
+            goto error;
     }
 
     /* Ensure that particles were read correctly */
     for(c=0; c<NRECORDS; c++)
     {
         if( cmp_par(c, c, testPart, readBuf) != 0)
-            goto out;
+            goto error;
     }
 
     H5PTcreate_index(table);
@@ -411,31 +405,31 @@ static int test_get_next(hid_t fid)
     /* Read particles two by two */
     for(c=0; c < NRECORDS / 2; c++)
     {
-        err = H5PTget_next(table, 2, &readBuf2[c * 2]);
+        err = H5PTget_next(table, (size_t)2, &readBuf2[c * 2]);
         if(err < 0)
-            goto out;
+            goto error;
     }
 
     /* Ensure that particles were read correctly */
     for(c=0; c<NRECORDS; c++)
     {
         if( cmp_par(c, c, testPart, readBuf2) != 0)
-            goto out;
+            goto error;
     }
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-        goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
         H5_FAILED();
-        if( H5PTis_valid(table) < 0)
+        if( H5PTis_valid(table) > 0)
             H5PTclose(table);
-        return -1;
+        return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -466,7 +460,7 @@ static int    test_big_table(hid_t fid)
     table = H5PTcreate_fl(fid, "Packet Test Dataset2", part_t, (hsize_t)33, -1);
     H5Tclose(part_t);
     if( H5PTis_valid(table) < 0)
-        goto out;
+        goto error;
 
         /* Add many particles */
     for(c = 0; c < BIG_TABLE_SIZE ; c+=8)
@@ -474,222 +468,44 @@ static int    test_big_table(hid_t fid)
         /* Append eight particles at once*/
         err = H5PTappend(table, (size_t)8, &(testPart[0]));
         if( err < 0)
-            goto out;
+            goto error;
     }
 
     /* Count the number of packets in the table  */
     err = H5PTget_num_packets(table, &count);
     if( err < 0)
-        goto out;
+        goto error;
     if( count != BIG_TABLE_SIZE )
-        goto out;
+        goto error;
 
     /* Read particles to ensure that all of them were written correctly  */
     /* Also, ensure that H5PTcreate_fl set the current packet to */
     /* the first packet in the table                                     */
     for(c = 0; c < BIG_TABLE_SIZE; c++)
     {
-        err = H5PTget_next(table, 1, &readPart);
+        err = H5PTget_next(table, (size_t)1, &readPart);
         if(err < 0)
-            goto out;
+            goto error;
 
         /* Ensure that particles were read correctly */
         if( cmp_par(c % 8, 0, testPart, &readPart) != 0)
-            goto out;
+            goto error;
     }
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-        goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
         H5_FAILED();
-        if( H5PTis_valid(table) < 0)
+        if( H5PTis_valid(table) > 0)
             H5PTclose(table);
-        return -1;
-}
-
-#ifdef VLPT_REMOVED
-/*-------------------------------------------------------------------------
- * test_varlen
- *
- * Tests creation, opening, closing, writing, reading, etc. on a
- * variable-length packet table.
- *
- *-------------------------------------------------------------------------
- */
-static int    test_varlen(hid_t fid)
-{
-  herr_t err;
-  hid_t table=H5I_BADID;
-  hsize_t count;
-
-   /* Buffers to hold data */
-  hvl_t writeBuffer[NRECORDS];
-  hvl_t readBuffer[NRECORDS];
-
-    /* This example has three different sizes of "record": longs, shorts, and particles */
-  long longBuffer[NRECORDS];
-  short shortBuffer[NRECORDS];
-  int x;
-
-  TESTING("variable-length packet tables");
-
-   /* Initialize buffers */
-  for(x=0; x<NRECORDS; x++)
-  {
-    longBuffer[x] = -x;
-    shortBuffer[x] = x;
-  }
-
-    /* Fill the write buffer with a mix of variable types */
-  for(x=0; x<8; x+=4)
-  {
-    writeBuffer[x].len = sizeof(long);
-    writeBuffer[x].p = &(longBuffer[x]);
-    writeBuffer[x+1].len = sizeof(short);
-    writeBuffer[x+1].p = &(shortBuffer[x+1]);
-    writeBuffer[x+2].len = sizeof(long);
-    writeBuffer[x+2].p = &(longBuffer[x+2]);
-    writeBuffer[x+3].len = sizeof(particle_t);
-    writeBuffer[x+3].p = &(testPart[x+3]);
-  }
-
-  /* Create the table */
-  table = H5PTcreate_vl(fid, VL_TABLE_NAME, (hsize_t)1001);
-  if( H5PTis_valid(table) < 0)
-    goto out;
-  if( H5PTis_varlen(table) != 1)
-    goto out;
-
-  /* Count the number of packets in the table  */
-  err = H5PTget_num_packets(table, &count);
-  if( err < 0)
-      goto out;
-  if( count != 0 )
-      goto out;
-
-  /* Close the table */
-  err = H5PTclose(table);
-  if( err < 0)
-    goto out;
-
-  /* Re-open the table */
-  table = H5PTopen(fid, VL_TABLE_NAME);
-  if( H5PTis_valid(table) < 0)
-    goto out;
-  if( H5PTis_varlen(table) != 1)
-    goto out;
-
-  /* Count the number of packets in the table  */
-  err = H5PTget_num_packets(table, &count);
-  if( err < 0)
-      goto out;
-  if( count != 0 )
-      goto out;
-
-  /* Add several variable-length packets */
-  err = H5PTappend(table, (size_t)8, writeBuffer );
-  if(err < 0)
-    goto out;
-
-  /* Read them back */
-  err = H5PTread_packets(table, (hsize_t)0, 4, &(readBuffer[0]));
-  if( err < 0)
-    goto out;
-  err = H5PTread_packets(table, (hsize_t)4, 1, &(readBuffer[4]));
-  if( err < 0)
-    goto out;
-  err = H5PTread_packets(table, (hsize_t)5, (NRECORDS - 5 ), &(readBuffer[5]));
-  if( err < 0)
-    goto out;
-
-  /* Ensure that packets were read correctly */
-  for(x=0; x<NRECORDS; x++)
-  {
-    if( readBuffer[x].len != writeBuffer[x%4].len)
-      goto out;
-    switch(x%4)
-    {
-    case 0:
-    case 2:
-      if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
-        goto out;
-      break;
-    case 1:
-      if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
-        goto out;
-      break;
-    case 3:
-      if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
-        goto out;
-      break;
-    default:
-      goto out;
-    }
-  }
-
-  /* Free memory used by read buffer */
-  if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
-    goto out;
-
-  /* Read packets back using get_next */
-  for(x=0; x < NRECORDS; x++)
-  {
-    err = H5PTget_next(table, 1, &readBuffer[x]);
-    if(err < 0)
-      goto out;
-  }
-
-  /* Ensure that packets were read correctly */
-  for(x=0; x<NRECORDS; x++)
-  {
-    if( readBuffer[x].len != writeBuffer[x%4].len)
-      goto out;
-    switch(x%4)
-    {
-    case 0:
-    case 2:
-      if( *((long*)(readBuffer[x].p)) != *((long*)(writeBuffer[x].p)))
-        goto out;
-      break;
-    case 1:
-      if( *((short*)(readBuffer[x].p)) != *((short*)(writeBuffer[x].p)))
-        goto out;
-      break;
-    case 3:
-      if( cmp_par(0, 0, readBuffer[x].p, writeBuffer[x].p) < 0)
-        goto out;
-      break;
-    default:
-      goto out;
-    }
-  }
-
-  /* Free memory used by read buffer */
-  if(H5PTfree_vlen_readbuff(table, NRECORDS, readBuffer) <0)
-    goto out;
-
-  /* Close the table */
-  err = H5PTclose(table);
-  if( err < 0)
-    goto out;
-
-  PASSED();
-  return 0;
-
-  out:
-    H5_FAILED();
-    H5E_BEGIN_TRY
-      H5PTclose(table);
-    H5E_END_TRY
-    return -1;
+        return FAIL;
 }
-#endif /* VLPT_REMOVED */
 
 /*-------------------------------------------------------------------------
  * test_opaque
@@ -710,50 +526,50 @@ static int    test_opaque(hid_t fid)
 
     /* Create an opaque datatype for the particle struct */
     if ((part_t = H5Tcreate (H5T_OPAQUE, sizeof(particle_t) )) < 0 )
-        return -1;
+        return FAIL;
 
     HDassert(part_t != -1);
 
     /* Tag the opaque datatype */
     if ( H5Tset_tag(part_t,  "Opaque Particle"  ) < 0)
-        return -1;
+        return FAIL;
 
     /* Create a new table */
     table = H5PTcreate_fl(fid, "Packet Test Dataset3", part_t, (hsize_t)100, -1);
     H5Tclose(part_t);
     if( H5PTis_valid(table) < 0)
-        goto out;
+        goto error;
 
     /* Append several particles, starting at particle 1 */
     err = H5PTappend(table, (size_t)(NRECORDS - 1), &(testPart[1]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Read the particles back */
     err = H5PTread_packets(table, (hsize_t)0, 7, &(readBuf[0]));
     if( err < 0)
-        goto out;
+        goto error;
 
     /* Ensure that particles were read correctly */
     for(c=0; c<NRECORDS - 1; c++)
     {
         if( cmp_par(c+1, c, testPart, readBuf) != 0)
-            goto out;
+            goto error;
     }
 
     /* Close the table */
     err = H5PTclose(table);
     if( err < 0)
-        goto out;
+        goto error;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
-    out:
+error:
         H5_FAILED();
-        if( H5PTis_valid(table) < 0)
+        if( H5PTis_valid(table) > 0)
             H5PTclose(table);
-        return -1;
+        return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -767,12 +583,12 @@ static int    test_opaque(hid_t fid)
 static int
 test_compress(void)
 {
-    hid_t fid1 = -1;
+    hid_t fid1 = H5I_INVALID_HID;
     herr_t err;
-    hid_t table = -1;
-    hid_t part_t = -1;
-    hid_t dset_id = -1;
-    hid_t plist_id = -1;
+    hid_t table = H5I_INVALID_HID;
+    hid_t part_t = H5I_INVALID_HID;
+    hid_t dset_id = H5I_INVALID_HID;
+    hid_t plist_id = H5I_INVALID_HID;
     size_t c;
     size_t num_elems = 1;
     unsigned filter_vals[1];
@@ -812,7 +628,7 @@ test_compress(void)
     HDmemset(readPart, 0, sizeof(readPart));
     for(c = 0; c < BIG_TABLE_SIZE; c++)
     {
-        err = H5PTget_next(table, 1, readPart);
+        err = H5PTget_next(table, (size_t)1, readPart);
         if(err < 0) TEST_ERROR;
 
         /* Ensure that particles were read correctly */
@@ -881,7 +697,7 @@ test_compress(void)
     if( err < 0) TEST_ERROR;
 
     PASSED();
-    return 0;
+    return SUCCEED;
 
 error:
     H5E_BEGIN_TRY {
@@ -892,7 +708,7 @@ error:
        H5Fclose(fid1);
     } H5E_END_TRY
     H5_FAILED();
-    return -1;
+    return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -932,54 +748,54 @@ static int test_rw_nonnative_dt(hid_t fid)
    ptable = H5PTcreate_fl(fid, "Packet Test Dataset, Non-native", H5T_STD_I32LE, (hsize_t)100, -1);
  }
  if(ptable == H5I_INVALID_HID)
-   goto out;
+        goto error;
 
  /* Write one packet to the packet table */
- if( (err = H5PTappend(ptable, (hsize_t)1, &(writeBuffer[0]))) < 0 )
-   goto out;
+ if( (err = H5PTappend(ptable, (size_t)1, &(writeBuffer[0]))) < 0 )
+        goto error;
 
  /* Write several packets to the packet table */
- if( (err = H5PTappend(ptable, (hsize_t)4, &(writeBuffer[1]))) < 0)
-   goto out;
+ if( (err = H5PTappend(ptable, (size_t)4, &(writeBuffer[1]))) < 0)
+        goto error;
 
  if( (err = H5PTclose(ptable)) < 0)
-   goto out;
+        goto error;
 
  /* Open the Packet table */
  if( (ptable = H5PTopen(fid, "Packet Test Dataset, Non-native")) < 0)
-   goto out;
+        goto error;
 
  /* Get the number of packets in the packet table.  This should be five. */
  if( (err = H5PTget_num_packets(ptable, &count)) < 0)
-   goto out;
+        goto error;
 
  if( (int)count != 5 )
-   goto out;
+        goto error;
 
  /* Initialize packet table's "current record" */
  if( (err = H5PTcreate_index(ptable)) < 0)
-   goto out;
+        goto error;
 
  /* Iterate through packets, read each one back */
  for(x=0; x<5; x++) {
-   if( (err = H5PTget_next(ptable, (hsize_t)1, &(readBuffer[x]))) < 0)
-     goto out;
+   if( (err = H5PTget_next(ptable, (size_t)1, &(readBuffer[x]))) < 0)
+        goto error;
    if( x != readBuffer[x])
-     goto out;
+        goto error;
  }
 
  /* Close the packet table */
  if( (err = H5PTclose(ptable)) < 0)
-   goto out;
+        goto error;
  
  PASSED();
- return 0;
+ return SUCCEED;
 
- out:
+error:
      H5_FAILED();
-     if( H5PTis_valid(ptable) < 0)
+     if( H5PTis_valid(ptable) > 0)
        H5PTclose(ptable);
-     return -1;
+     return FAIL;
 }
 
 /*-------------------------------------------------------------------------
@@ -992,7 +808,7 @@ static int test_rw_nonnative_dt(hid_t fid)
  */
 static int test_error(hid_t fid)
 {
-  hid_t id = H5I_BADID;
+  hid_t id = H5I_INVALID_HID;
   int id_open=0;
   particle_t readBuf[1];
 
@@ -1000,121 +816,121 @@ static int test_error(hid_t fid)
 
   /* Create a HL table */
   if(create_hl_table(fid) < 0)
-    goto out;
+        goto error;
 
   /* Try to open things that are not packet tables */
   H5E_BEGIN_TRY
   if(H5PTopen(fid, "Bogus_name") >= 0)
-    goto out;
+        goto error;
   if(H5PTopen(fid, "group1") >= 0)
-    goto out;
+        goto error;
   H5E_END_TRY
 
   /* Try to execute packet table commands on an invalid ID */
   H5E_BEGIN_TRY
   if(H5PTis_valid(id) >= 0)
-    goto out;
-#ifdef VLPT_REMOVED
+        goto error;
   if(H5PTis_varlen(id) >= 0)
-    goto out;
-#endif /* VLPT_REMOVED */
+        goto error;
   if(H5PTclose(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTappend(id, (size_t)1, testPart) >= 0)
-    goto out;
+        goto error;
   if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
-    goto out;
+        goto error;
   if(H5PTcreate_index(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTset_index(id, (hsize_t)1) >= 0)
-    goto out;
+        goto error;
   if(H5PTget_index(id, NULL) >= 0)
-    goto out;
+        goto error;
   H5E_END_TRY
 
   /* Open a high-level non-packet (H5TB) table and try to */
   /* execute commands on it. */
   if((id=H5Dopen2(fid, H5TB_TABLE_NAME, H5P_DEFAULT)) <0)
-    goto out;
+        goto error;
   id_open = 1;
 
   H5E_BEGIN_TRY
   if(H5PTis_valid(id) >= 0)
-    goto out;
-#ifdef VLPT_REMOVED
+        goto error;
   if(H5PTis_varlen(id) >= 0)
-    goto out;
-#endif /* VLPT_REMOVED */
+        goto error;
   if(H5PTclose(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTappend(id, (size_t)1, testPart) >= 0)
-    goto out;
+        goto error;
   if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
-    goto out;
+        goto error;
   if(H5PTcreate_index(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTset_index(id, (hsize_t)1) >= 0)
-    goto out;
+        goto error;
   if(H5PTget_index(id, NULL) >= 0)
-    goto out;
+        goto error;
   H5E_END_TRY
 
   id_open=0;
   if(H5Dclose(id) <0)
-    goto out;
+        goto error;
 
   /* Open and close a packet table.  Try to execute */
   /* commands on the closed ID. */
   if((id=H5PTopen(fid, PT_NAME))<0)
-    goto out;
+        goto error;
   if(H5PTclose(id) <0)
-    goto out;
+        goto error;
 
   H5E_BEGIN_TRY
   if(H5PTis_valid(id) >= 0)
-    goto out;
-#ifdef VLPT_REMOVED
+        goto error;
   if(H5PTis_varlen(id) >= 0)
-    goto out;
-#endif /* VLPT_REMOVED */
+        goto error;
   if(H5PTclose(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTappend(id, (size_t)1, testPart) >= 0)
-    goto out;
+        goto error;
   if(H5PTread_packets(id, (hsize_t)0, 1, readBuf) >= 0)
-    goto out;
+        goto error;
   if(H5PTcreate_index(id) >= 0)
-    goto out;
+        goto error;
   if(H5PTset_index(id, (hsize_t)1) >= 0)
-    goto out;
+        goto error;
   if(H5PTget_index(id, NULL) >= 0)
-    goto out;
+        goto error;
   H5E_END_TRY
 
   PASSED();
-  return 0;
+  return SUCCEED;
 
-out:
+error:
   H5_FAILED();
   if(id_open)
     H5Dclose(id);
-  return -1;
+  return FAIL;
 }
 
-
+/*-------------------------------------------------------------------------
+ * test_packet_table(): Invokes individual tests to ensure that all
+ *      functions work correctly, except for the variable-length related
+ *      functions, which are tested in "test_packet_vlen.c".
+ *
+ *-------------------------------------------------------------------------
+ */
 static int test_packet_table(hid_t fid)
 {
 
     if( test_create_close(fid) < 0 )
-        return -1;
+        return FAIL;
 
     if( test_open(fid) < 0 )
-        return -1;
+        return FAIL;
 
     /* test_append must be run before test_count and test_read, as it */
     /* creates the packet table they use. */
     if( test_append(fid) < 0 )
-        return -1;
+        return FAIL;
 
     /* These tests will not necessarily cause failures in each other,
            so we don't abort the other tests if one fails. */
@@ -1122,24 +938,24 @@ static int test_packet_table(hid_t fid)
     test_get_next(fid);
     test_big_table(fid);
     test_rw_nonnative_dt(fid);
-#ifdef VLPT_REMOVED
-    test_varlen(fid);
-#endif /* VLPT_REMOVED */
     test_opaque(fid);
     test_compress();
     test_error(fid);
 
-    return 0;
+    return SUCCEED;
 }
 
+/*
+ *
+*/
 int main(void)
 {
- /* identifier for the file */
- hid_t       fid;
- int         status = 0;
+    /* identifier for the file that is used in FL PT tests */
+    hid_t       fid;
+    int         status = 0;
 
 /*-------------------------------------------------------------------------
- * Packet test: test each function of the packet table
+ * Packet test: test each function of the packet table library
  *-------------------------------------------------------------------------
  */
 
@@ -1148,12 +964,16 @@ int main(void)
 
  HDputs("Testing packet table");
 
- /* run tests */
- if ( test_packet_table(fid) < 0)
-     status = 1;
+    /* Test packet table with fixed length */
+    if (test_packet_table(fid) < 0)
+        status = 1;
+
+    /* Test packet table with variable length, using separate data file */
+    if (test_packet_table_with_varlen() < 0)
+        status = 1;
 
- /* close */
- H5Fclose(fid);
+    /* Close the file */
+    H5Fclose(fid);
 
- return status;
+    return status;
 }
diff --git a/hl/test/test_packet_vlen.c b/hl/test/test_packet_vlen.c
new file mode 100644
index 0000000..b3b2fce
--- /dev/null
+++ b/hl/test/test_packet_vlen.c
@@ -0,0 +1,1694 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5hltest.h"
+
+/*-------------------------------------------------------------------------
+ * Packet Table with Variable-Length test
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NRECORDS 5
+#define TEST_FILE_NAME "test_packet_table_vlen.h5"
+#define TESTFL_FILE_NAME "testfl_packet_table_vlen.h5"
+#define PT_VLEN_ATOMIC "Dataset with VL of Atomic types"
+#define PT_VLEN_COMP "Dataset with VL of Compound Types"
+#define PT_COMP_VLEN "Dataset with Compound Type of VL types"
+#define PT_VLEN_VLEN "Dataset with VL of VL types"
+#define PT_FIXED_LEN "Fixed-length Packet Table"
+#define SPACE3_RANK     1
+#define L1_INCM         16
+#define L2_INCM         8
+#define NAME_BUF_SIZE   80
+
+/*-------------------------------------------------------------------------
+ * Local functions
+ *-------------------------------------------------------------------------
+ */
+
+/* Verifies that the packet table is a variable- or fixed-length */
+static int verify_ptlengthtype(hid_t fid, const char *table_name, herr_t checked_value);
+
+/* Adds an attribute to the named packet table */
+static int adding_attribute(hid_t fid, const char *table_name, const char *attr_name);
+
+/* Verifies that the named attribute was written and is read correctly */
+static int verify_attribute(hid_t fid, const char *table_name, const char *attr_name);
+
+/*-------------------------------------------------------------------------
+ * test_VLof_atomic(): Test that a packet table with VL datatypes of atomic
+ *	datatypes can be created and written correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_VLof_atomic(void)
+{
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vltype=H5I_INVALID_HID;	/* Variable length datatype */
+    hsize_t count;		/* Number of records in the table */
+    int     ii, jj;		/* Loop variables */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with vlen of atomic");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(unsigned int));
+        if (writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+	}
+        writeBuf[ii].len = ii+1;
+        for (jj=0; jj<(ii+1); jj++)
+	    ((unsigned int *)writeBuf[ii].p)[jj] = ii * 10 + jj;
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create a vlen type that uses an atomic datatype as its base type */
+    vltype = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vltype < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of an atomic type */
+    ptable = H5PTcreate(fid, PT_VLEN_ATOMIC, vltype, (hsize_t)1, H5P_DEFAULT);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vltype) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)NRECORDS, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    for (ii = 0; ii < NRECORDS; ii++)
+        for (jj=0; jj<(ii+1); jj++)
+        {
+	    if (((unsigned int *)readBuf[ii].p)[jj] != ((unsigned int *)writeBuf[ii].p)[jj]) {
+		printf("Packet %d's value should be %d\n", ii, ((unsigned int *)writeBuf[ii].p)[jj]);
+		printf("Packet %d's value in readBuf is %d\n", ii, ((unsigned int *)readBuf[ii].p)[jj]);
+	    }
+        }
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf );
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* test_VLof_atomic */
+
+/*-------------------------------------------------------------------------
+ * test_VLof_comptype(): Test that a packet table with VL datatypes of
+ *	compound datatypes can be created and written correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_VLof_comptype(void)
+{
+    /* Struct that the VL sequences are composed of */
+    typedef struct {
+        int i;
+        float f;
+    } VLcomp_t;
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vltype=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   cmptype=H5I_INVALID_HID;	/* Compound datatype */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    hsize_t count;		/* Number of records in the table */
+    int     ii, jj;		/* Loop variables */
+    char    msg[80];		/* For error message */
+    herr_t ret;
+
+    TESTING3("        with vlen of compound datatypes");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(VLcomp_t));
+        if(writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+	}
+        writeBuf[ii].len = ii+1;
+        for (jj=0; jj<(ii+1); jj++) {
+            ((VLcomp_t *)writeBuf[ii].p)[jj].i = ii+jj;
+            ((VLcomp_t *)writeBuf[ii].p)[jj].f = (float)((ii+jj)/3.0F);
+          } /* end for */
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create the base compound type */
+    cmptype = H5Tcreate(H5T_COMPOUND, sizeof(VLcomp_t));
+    if (cmptype < 0)
+	goto error;
+
+    /* Insert fields */
+    ret = H5Tinsert(cmptype, "i", HOFFSET(VLcomp_t, i), H5T_NATIVE_INT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(cmptype, "f", HOFFSET(VLcomp_t, f), H5T_NATIVE_FLOAT);
+    if (ret < 0)
+	goto error;
+
+    /* Create a variable length type that uses the VLcomp_t as its base type */
+    vltype = H5Tvlen_create(cmptype);
+    if (vltype < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of compound datatype */
+    ptable = H5PTcreate(fid, PT_VLEN_COMP, vltype, (hsize_t)1, H5P_DEFAULT);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vltype) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)5, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)5, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Compare data read in */
+    for (ii = 0; ii < NRECORDS; ii++) {
+        if (writeBuf[ii].len != readBuf[ii].len) {
+            fprintf(stderr, "%d: VL data length don't match!, writeBuf[%d].len=%d, readBuf[%d].len=%d\n",__LINE__,(int)ii,(int)writeBuf[ii].len,(int)ii,(int)readBuf[ii].len);
+	    continue;
+	} /* write len != read len */
+
+        for (jj=0; jj<(ii+1); jj++) {
+            if (((unsigned int *)writeBuf[ii].p)[jj] != ((unsigned int *)readBuf[ii].p)[jj] ) {
+                fprintf(stderr, "VL data values don't match!, writeBuf[ii].p[%d]=%d, readBuf[ii].p[%d]=%d\n",(int)jj, (int)((unsigned int *)writeBuf[ii].p)[jj], (int)jj, (int)((unsigned int *)readBuf[ii].p)[jj]);
+                continue;
+	    } /* write value != read value */
+	}
+    } /* end for */
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* test_VLof_comptype */
+
+/*-------------------------------------------------------------------------
+ * test_compound_VL_VL(): Test that a packet table of compound datatypes
+ *	containing VL datatypes can be created and written
+ *	correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_compound_VL_VLtype(void)
+{
+    /* Struct that the VL sequences are composed of */
+    typedef struct {
+        int i;
+        float f;
+	hvl_t v;
+    } compVLVL_t;
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   space=H5I_INVALID_HID;	/* Dataspace identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vlatomic=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   vlofvl=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   comp_vlvl=H5I_INVALID_HID;	/* ID of a compound datatype containing 
+					   a VL of VL of atomic datatype */
+    hsize_t dims1[] = {NRECORDS};
+    hsize_t count;		/* Number of records in the table */
+    compVLVL_t writeBuf[NRECORDS];/* Buffer to hold data to be written */
+    compVLVL_t readBuf[NRECORDS]; /* Buffer to hold read data */
+    hvl_t   *t1, *t2;
+    int  ii, jj, kk;		/* Loop variables */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with compound datatype containing vlen datatype");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].i = ii*10;
+        writeBuf[ii].f = (float)((ii*20)/3.0F);
+        writeBuf[ii].v.p = HDmalloc((ii+L1_INCM)*sizeof(hvl_t));
+        if (writeBuf[ii].v.p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%d\n",ii);
+            goto error;
+	}
+        writeBuf[ii].v.len=ii+L1_INCM;
+        for (t1=(hvl_t *)((writeBuf[ii].v).p), jj=0; jj<(ii+L1_INCM); jj++, t1++)
+	{
+            t1->p = HDmalloc((jj+L2_INCM)*sizeof(unsigned int));
+	    if (t1->p == NULL) {
+		fprintf(stderr, "Cannot allocate memory for VL data! ii=%d\n",ii);
+		goto error;
+	    }
+            t1->len = jj+L2_INCM;
+            for (kk=0; kk<jj+L2_INCM; kk++)
+                ((unsigned int*)t1->p)[kk] = ii*100 + jj*10 + kk;
+        }
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create dataspace for datasets */
+    space = H5Screate_simple(SPACE3_RANK, dims1, NULL);
+    if (space < 0)
+	goto error;
+
+    /* Create a VL datatype of an atomic type */
+    vlatomic = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vlatomic < 0)
+	goto error;
+
+    /* Create a VL datatype of the VL of atomic datatype */
+    vlofvl = H5Tvlen_create (vlatomic);
+    if (vlofvl < 0)
+	goto error;
+
+    /* Create the base compound type */
+    comp_vlvl = H5Tcreate(H5T_COMPOUND, sizeof(compVLVL_t));
+    if (comp_vlvl < 0)
+	goto error;
+
+    /* Insert fields: atomic, atomic, vlen */
+    ret = H5Tinsert(comp_vlvl, "i", HOFFSET(compVLVL_t, i), H5T_NATIVE_INT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(comp_vlvl, "f", HOFFSET(compVLVL_t, f), H5T_NATIVE_FLOAT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(comp_vlvl, "v", HOFFSET(compVLVL_t, v), vlofvl);
+    if (ret < 0)
+	goto error;
+
+    /* Create a packet table that uses a compound datatype of vlen datatype */
+    ptable = H5PTcreate(fid, PT_COMP_VLEN, comp_vlvl, (hsize_t)1, H5P_DEFAULT);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(comp_vlvl) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)NRECORDS, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)NRECORDS, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Compare data read in */
+    for (ii = 0; ii < NRECORDS; ii++) {
+        if (writeBuf[ii].i != readBuf[ii].i) {
+            fprintf(stderr, "Integer components don't match!, writeBuf[%d].i=%d, readBuf[%d].i=%d\n",(int)ii,(int)writeBuf[ii].i,(int)ii,(int)readBuf[ii].i);
+            continue;
+        } /* end if */
+        if (!H5_FLT_ABS_EQUAL(writeBuf[ii].f,readBuf[ii].f)) {
+            fprintf(stderr, "Float components don't match!, writeBuf[%d].f=%f, readBuf[%d].f=%f\n",(int)ii,(double)writeBuf[ii].f,(int)ii,(double)readBuf[ii].f);
+            continue;
+        } /* end if */
+
+        if (writeBuf[ii].v.len != readBuf[ii].v.len) {
+            fprintf(stderr, "%d: VL data length don't match!, writeBuf[%d].v.len=%d, readBuf[%d].v.len=%d\n",__LINE__,(int)ii,(int)writeBuf[ii].v.len,(int)ii,(int)readBuf[ii].v.len);
+            continue;
+        } /* end if */
+
+        for (t1=(hvl_t *)(writeBuf[ii].v.p), t2=(hvl_t *)(readBuf[ii].v.p), jj=0; (size_t)jj<readBuf[ii].v.len; jj++, t1++, t2++) {
+            if (t1->len != t2->len) {
+                fprintf(stderr, "%d: VL data length don't match!, ii=%d, jj=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)ii,(int)jj,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for (kk=0; (size_t)kk<t2->len; kk++) {
+                if (((unsigned int *)t1->p)[kk] != ((unsigned int *)t2->p)[kk] ) {
+                    fprintf(stderr, "VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)kk, (int)((unsigned int *)t1->p)[kk], (int)kk, (int)((unsigned int *)t2->p)[kk]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Release datatypes */
+    if (H5Tclose(vlatomic) < 0)
+	goto error;
+    if (H5Tclose(vlofvl) < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* test_compound_VL_VLtype */
+
+/*-------------------------------------------------------------------------
+ * test_VLof_VLtype(): Test that a packet table of VL datatype with VL
+ *	datatypes of atomic datatypes can be created and written
+ *	correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_VLof_VLtype(void)
+{
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vlatomic=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   vlofvl=H5I_INVALID_HID;	/* VL datatype of VL datatypes */
+    hsize_t count;		/* Number of records in the table */
+    hvl_t   *t1;		/* pointer to advance */
+    int     ii, jj, kk;		/* Loop variables */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with vlen datatype of vlen datatype");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii< NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(hvl_t));
+        if (writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+        } /* end if */
+        writeBuf[ii].len = ii+1;
+        for (t1=(hvl_t *)(writeBuf[ii].p), jj=0; jj<(ii+1); jj++, t1++)
+	{
+            t1->p = HDmalloc((jj+1)*sizeof(unsigned int));
+	    if (t1->p == NULL) {
+		fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+		goto error;
+	    }
+            t1->len = jj+1;
+            for (kk=0; kk<(jj+1); kk++)
+                ((unsigned int *)t1->p)[kk] = ii*100+jj*10+kk;
+        } /* end for */
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create a VL datatype of an atomic type */
+    vlatomic = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vlatomic < 0)
+	goto error;
+
+    vlofvl = H5Tvlen_create (vlatomic);
+    if (vlofvl < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of vlen datatype */
+    ptable = H5PTcreate(fid, PT_VLEN_VLEN, vlofvl, (hsize_t)1, H5P_DEFAULT);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vlofvl) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)5, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)5, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* test_VLof_VLtype */
+
+/*-------------------------------------------------------------------------
+ * verify_ptlengthtype() - helper function, verifies that the named packet
+ *	table is a fixed-length or variable-length as indicated by the last
+ *	argument.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int verify_ptlengthtype(hid_t fid, const char *table_name, herr_t expected_value)
+{
+    hid_t   ptable = H5I_INVALID_HID;	/* Packet table identifier */
+    herr_t  is_varlen = 0;
+    herr_t  ret = FAIL;
+
+    /* Open the named packet table */
+    if( (ptable = H5PTopen(fid, table_name)) < 0)
+	goto error;
+
+    /* Verify the value returned from H5PTis_varlen is as expected */
+    is_varlen = H5PTis_varlen(ptable);
+    if (is_varlen == FAIL)
+	goto error;
+    else if (is_varlen == expected_value)
+	ret = SUCCEED;
+    else
+    {
+	char lenthtype[20];
+	HDstrcpy(lenthtype, "fixed-length");
+	if (expected_value == 1)
+	    HDstrcpy(lenthtype, "variable-length");
+	fprintf(stderr, "\nPacket table '%s' should be %s but is not\n", table_name, lenthtype);
+	ret = FAIL;
+    }
+
+    /* Close the packet table */
+    if (H5PTclose(ptable) < 0)
+	goto error;
+
+    return ret;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    return ret;
+} /* verify_ptlengthtype */
+
+/*-------------------------------------------------------------------------
+ * test_H5PTis_varlen(): Test that H5PTis_varlen works correctly on both
+ *	fixed- and variable-length packet tables.
+ *
+ * Description:
+ *	- Added a fixed-length packet table to the file for variety
+ *	- Use the helper funtion verify_ptlengthtype to test H5PTis_varlen
+ *	  on each packet table.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_H5PTis_varlen(void)
+{
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING("H5PTis_varlen");
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create a new table */
+    ptable = H5PTcreate(fid, PT_FIXED_LEN, H5T_STD_I32BE, (hsize_t)100, H5P_DEFAULT);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Open each packet table, and verify that H5PTis_varlen returns correct
+       type for each table */
+    ret = verify_ptlengthtype(fid, PT_VLEN_ATOMIC, 1); /* vlen of atomic */
+    if (ret < 0)
+	goto error;
+    ret = verify_ptlengthtype(fid, PT_VLEN_COMP, 1); /* vlen of compound */
+    if (ret < 0)
+	goto error;
+    ret = verify_ptlengthtype(fid, PT_COMP_VLEN, 0); /* compound of vlen, no vlen */
+    if (ret < 0)
+	goto error;
+    ret = verify_ptlengthtype(fid, PT_VLEN_VLEN, 1); /* vlen of vlen */
+    if (ret < 0)
+	goto error;
+    ret = verify_ptlengthtype(fid, PT_FIXED_LEN, 0); /* no vlen */
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (fid > 0) H5Fclose(fid);
+    H5_FAILED();
+    return FAIL;
+} /* test_H5PTis_varlen */
+
+/*-------------------------------------------------------------------------
+ * adding_attribute() - helper function, adds an attribute to the named
+ *	packet table.
+ * Note:
+ *	For simplicity, the attributes that are added to the packet tables
+ *	have the same characteristics except their names.  They have the
+ *	same type, space, and values.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+#define ATTR_RANK      1
+#define ATTR_DIM       3
+int attr_data[ATTR_DIM]={256,11945,-22107}; /* values to be written to attr */
+
+static int adding_attribute(hid_t fid, const char *table_name, const char *attr_name)
+{
+    hid_t ptable = H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t space_id = H5I_INVALID_HID;	/* Dataspace for the attribute */
+    hid_t attr_id = H5I_INVALID_HID;	/* Attribute identifier */
+    hid_t dset_id = H5I_INVALID_HID;	/* Dataset identifier */
+    hsize_t dims[] = {ATTR_DIM};	/* Dimension for dataspace */
+    int ret = FAIL;		/* Returned status from a callee */
+
+    /* Create dataspace for attribute */
+    space_id = H5Screate_simple(ATTR_RANK, dims, NULL);
+    if (space_id < 0)
+	goto error;
+
+    /* Open the named packet table */
+    if( (ptable = H5PTopen(fid, table_name)) < 0)
+	goto error;
+
+    dset_id = H5PTget_dataset(ptable);
+    if (dset_id < 0)
+	goto error;
+
+    /* Add the specified attribute to it */
+    attr_id = H5Acreate2(dset_id, attr_name, H5T_NATIVE_INT, space_id, H5P_DEFAULT, H5P_DEFAULT);
+    if (attr_id < 0)
+	goto error;
+
+    /* Write attribute values */
+    ret = H5Awrite(attr_id, H5T_NATIVE_INT, attr_data);
+    if (ret < 0)
+	goto error;
+
+    /* Close the attribute */
+    if (H5Aclose(attr_id) < 0)
+	goto error;
+
+    /* Close the packet table */
+    if (H5PTclose(ptable) < 0)
+	goto error;
+
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    return ret;
+} /* adding_attribute */
+
+/*-------------------------------------------------------------------------
+ * verify_attribute() - helper function, verifies the named attribute can
+ *	be read correctly.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static herr_t verify_attribute(hid_t fid, const char *table_name, const char *attr_name)
+{
+    hid_t ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t space_id=H5I_INVALID_HID;	/* Dataspace for the attribute */
+    hid_t attr_id=H5I_INVALID_HID;	/* Attribute identifier */
+    hid_t dset_id=H5I_INVALID_HID;	/* Dataset associated with the pt */
+    hsize_t dims[] = {ATTR_DIM};	/* Dimensions for dataspace */
+    int read_data[ATTR_DIM];		/* Output buffer */
+    int ii;
+    herr_t ret = FAIL;		/* Returned status from a callee */
+
+    /* Create dataspace for attribute */
+    space_id = H5Screate_simple(ATTR_RANK, dims, NULL);
+    if (space_id < 0)
+	goto error;
+
+    /* Open the named packet table */
+    ptable = H5PTopen(fid, table_name);
+    if (ptable < 0)
+	goto error;
+
+    /* Get the dataset id of this packet table */
+    dset_id = H5PTget_dataset(ptable);
+    if (dset_id < 0)
+	goto error;
+
+    /* Open first attribute for the dataset */
+    attr_id = H5Aopen(dset_id, attr_name, H5P_DEFAULT);
+    if (attr_id < 0)
+	goto error;
+
+    /* Read attribute values */
+    ret = H5Aread(attr_id, H5T_NATIVE_INT, read_data);
+    if (ret < 0)
+	goto error;
+
+    /* Verify values read in */
+    for (ii = 0; ii < ATTR_DIM; ii++)
+        if (attr_data[ii] != read_data[ii])
+            TestErrPrintf("%d: attribute data different: attr_data[%d]=%d, read_data[%d]=%d\n", __LINE__, ii, attr_data[ii], ii, read_data[ii]);
+
+    /* Close the attribute */
+    if (H5Aclose(attr_id) < 0)
+	goto error;
+
+    /* Close the packet table */
+    if (H5PTclose(ptable) < 0)
+	goto error;
+
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (attr_id > 0) H5Aclose(attr_id);
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    return ret;
+} /* verify_attribute */
+
+/*-------------------------------------------------------------------------
+ * test_attributes(): Test adding attributes to packet tables
+ *
+ * Description:
+ *	Added attributes to some random packet tables in the file.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_attributes(void)
+{
+    hid_t fid=H5I_INVALID_HID;		/* File identifier */
+    hid_t attr_id=H5I_INVALID_HID;	/* Attribute identifier */
+    herr_t ret = FAIL;		/* Returned status from a callee */
+
+    TESTING("adding attributes to packet tables");
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Add an arbitrary attribute to a few packet tables, using helper func */
+    attr_id = adding_attribute(fid, PT_VLEN_ATOMIC, "Attribute 1");
+    if (attr_id < 0)
+	goto error;
+    attr_id = adding_attribute(fid, PT_VLEN_COMP, "Attribute 2");
+    if (attr_id < 0)
+	goto error;
+    attr_id = adding_attribute(fid, PT_COMP_VLEN, "Attribute 3");
+    if (attr_id < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    /* Open the file again */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Read each attribute and verify the values, using helper function */
+    ret = verify_attribute(fid, PT_VLEN_ATOMIC, "Attribute 1");
+    if (ret < 0)
+	goto error;
+    ret = verify_attribute(fid, PT_VLEN_COMP, "Attribute 2");
+    if (ret < 0)
+	goto error;
+    ret = verify_attribute(fid, PT_COMP_VLEN, "Attribute 3");
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return(ret);
+
+error: /* An error has occurred.  Clean up and exit. */
+    H5Fclose(fid);
+    H5_FAILED();
+    return FAIL;
+} /* test_attributes */
+
+/*-------------------------------------------------------------------------
+ * verify_accessors() - helper function, verifies that various info can be
+ *	retrieved correctly using the info returned by the accessor functions.
+ *
+ * Description:
+ *	Testing functions H5PTget_dataset and H5PTget_type
+ *
+ *	- Opens the named packet table
+ *	- Gets its associated dataset ID then calls a C function on that ID
+ *	  to verify the dataset name
+ *	- Gets its associated datatype ID then calls a C function on that ID
+ *	  to verify that the packet table is variable- or fixed-length as
+ *	  indicated by the expected_value argument
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static herr_t verify_accessors(const char *table_name, herr_t expected_value)
+{
+    hid_t fid=H5I_INVALID_HID;		/* File identifier */
+    hid_t ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t dset_id=H5I_INVALID_HID;	/* Dataset associated with the pt */
+    hid_t dtype_id=H5I_INVALID_HID;	/* Dataset identifier */
+    char buf[NAME_BUF_SIZE];
+    ssize_t name_size;
+    herr_t  is_varlen = 0;
+    herr_t ret = FAIL;		/* Returned status from a callee */
+
+    /* Open the file. */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Open the named packet table. */
+    ptable = H5PTopen(fid, table_name);
+    if (ptable < 0)
+	goto error;
+
+    /* Get the associated dataset ID. */
+    dset_id = H5PTget_dataset(ptable);
+    if (dset_id < 0)
+	goto error;
+
+    /* Check if the packet table's name matches its associated dataset's. */
+    *buf = '\0';
+    name_size = H5Iget_name(dset_id, (char*)buf, NAME_BUF_SIZE);
+    VERIFY(HDstrcmp(buf, table_name), "Names of dataset and packet table don't match");
+
+    /* Get the packet table's datatype ID */
+    dtype_id = H5PTget_type(ptable);
+    if (dtype_id < 0)
+	goto error;
+
+    /* Check if the type class matches that of the packet table. */
+    is_varlen = H5Tdetect_class(dtype_id, H5T_VLEN);
+    if (is_varlen == FAIL) /* failure occurred */
+	goto error;
+    else if (is_varlen == expected_value) /* length types match */
+	ret = SUCCEED;
+    else /* length types don't match */
+    {
+	/* Give lengthtype "fixed-length" or "variable-length" depending on the
+	   expected_value passed in, then print the error message. */
+	char lenthtype[20];
+	HDstrcpy(lenthtype, "fixed-length");
+	if (expected_value == 1)
+	    HDstrcpy(lenthtype, "variable-length");
+	fprintf(stderr, "\nThe dataset '%s' should be %s but is not\n", table_name, lenthtype);
+	ret = FAIL;
+    }
+
+    /* Close the packet table */
+    if (H5PTclose(ptable) < 0)
+	goto error;
+
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    return ret;
+} /* verify_accessors */
+
+/*-------------------------------------------------------------------------
+ * test_accessors(): Test the accessor functions
+ *
+ * Description:
+ *	Retrieves the dataset and datatype IDs and verifies various info
+ *	to ensure these IDs are correct.
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int test_accessors(void)
+{
+    hid_t fid=H5I_INVALID_HID;		/* File identifier */
+    hid_t ptable=H5I_INVALID_HID;	/* File identifier */
+    herr_t ret = FAIL;		/* Returned status from a callee */
+
+    TESTING("accessor functions");
+
+    /* Open the file */
+    fid = H5Fopen(TEST_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    ret = verify_accessors(PT_VLEN_ATOMIC, TRUE);
+    if (ret < 0)
+	goto error;
+
+    ret = verify_accessors(PT_FIXED_LEN, FALSE);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5_FAILED();
+    return FAIL;
+} /* test_accessors */
+
+/**************************************************************************
+	Test set for deprecated function H5PTcreate_fl
+	Each test in this set is the same as the corresponding one in the
+	set for H5PTcreate, as of Mar 2016
+
+**************************************************************************/
+
+/*-------------------------------------------------------------------------
+ * testfl_VLof_atomic(): Test that a packet table with VL datatypes of atomic
+ *	datatypes can be created and written correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int testfl_VLof_atomic(void)
+{
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vltype=H5I_INVALID_HID;	/* Variable length datatype */
+    hsize_t count;		/* Number of records in the table */
+    int     ii, jj;		/* Loop variables */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with vlen of atomic");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(unsigned int));
+        if (writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+	}
+        writeBuf[ii].len = ii+1;
+        for (jj=0; jj<(ii+1); jj++)
+	    ((unsigned int *)writeBuf[ii].p)[jj] = ii * 10 + jj;
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TESTFL_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create a vlen type that uses an atomic datatype as its base type */
+    vltype = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vltype < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of an atomic type */
+    ptable = H5PTcreate_fl(fid, PT_VLEN_ATOMIC, vltype, (hsize_t)1, 0);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vltype) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)NRECORDS, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    for (ii = 0; ii < NRECORDS; ii++)
+        for (jj=0; jj<(ii+1); jj++)
+        {
+	    if (((unsigned int *)readBuf[ii].p)[jj] != ((unsigned int *)writeBuf[ii].p)[jj]) {
+		printf("Packet %d's value should be %d\n", ii, ((unsigned int *)writeBuf[ii].p)[jj]);
+		printf("Packet %d's value in readBuf is %d\n", ii, ((unsigned int *)readBuf[ii].p)[jj]);
+	    }
+        }
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf );
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* testfl_VLof_atomic */
+
+/*-------------------------------------------------------------------------
+ * testfl_VLof_comptype(): Test that a packet table with VL datatypes of
+ *	compound datatypes can be created and written correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int testfl_VLof_comptype(void)
+{
+    /* Struct that the VL sequences are composed of */
+    typedef struct {
+        int i;
+        float f;
+    } VLcomp_t;
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vltype=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   cmptype=H5I_INVALID_HID;	/* Compound datatype */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    hsize_t count;		/* Number of records in the table */
+    int     ii, jj;		/* Loop variables */
+    char    msg[80];		/* For error message */
+    herr_t ret;
+
+    TESTING3("        with vlen of compound datatypes");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(VLcomp_t));
+        if(writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+	}
+        writeBuf[ii].len = ii+1;
+        for (jj=0; jj<(ii+1); jj++) {
+            ((VLcomp_t *)writeBuf[ii].p)[jj].i = ii+jj;
+            ((VLcomp_t *)writeBuf[ii].p)[jj].f = (float)((ii+jj)/3.0F);
+          } /* end for */
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TESTFL_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create the base compound type */
+    cmptype = H5Tcreate(H5T_COMPOUND, sizeof(VLcomp_t));
+    if (cmptype < 0)
+	goto error;
+
+    /* Insert fields */
+    ret = H5Tinsert(cmptype, "i", HOFFSET(VLcomp_t, i), H5T_NATIVE_INT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(cmptype, "f", HOFFSET(VLcomp_t, f), H5T_NATIVE_FLOAT);
+    if (ret < 0)
+	goto error;
+
+    /* Create a variable length type that uses the VLcomp_t as its base type */
+    vltype = H5Tvlen_create(cmptype);
+    if (vltype < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of compound datatype */
+    ptable = H5PTcreate_fl(fid, PT_VLEN_COMP, vltype, (hsize_t)1, 0);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vltype) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)5, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)5, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Compare data read in */
+    for (ii = 0; ii < NRECORDS; ii++) {
+        if (writeBuf[ii].len != readBuf[ii].len) {
+            fprintf(stderr, "%d: VL data length don't match!, writeBuf[%d].len=%d, readBuf[%d].len=%d\n",__LINE__,(int)ii,(int)writeBuf[ii].len,(int)ii,(int)readBuf[ii].len);
+	    continue;
+	} /* write len != read len */
+
+        for (jj=0; jj<(ii+1); jj++) {
+            if (((unsigned int *)writeBuf[ii].p)[jj] != ((unsigned int *)readBuf[ii].p)[jj] ) {
+                fprintf(stderr, "VL data values don't match!, writeBuf[ii].p[%d]=%d, readBuf[ii].p[%d]=%d\n",(int)jj, (int)((unsigned int *)writeBuf[ii].p)[jj], (int)jj, (int)((unsigned int *)readBuf[ii].p)[jj]);
+                continue;
+	    } /* write value != read value */
+	}
+    } /* end for */
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* testfl_VLof_comptype */
+
+/*-------------------------------------------------------------------------
+ * testfl_compound_VL_VL(): Test that a packet table of compound datatypes
+ *	containing VL datatypes can be created and written
+ *	correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int testfl_compound_VL_VLtype(void)
+{
+    /* Struct that the VL sequences are composed of */
+    typedef struct {
+        int i;
+        float f;
+	hvl_t v;
+    } compVLVL_t;
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   space=H5I_INVALID_HID;	/* Dataspace identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vlatomic=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   vlofvl=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   comp_vlvl=H5I_INVALID_HID;	/* ID of a compound datatype containing 
+					   a VL of VL of atomic datatype */
+    hsize_t dims1[] = {NRECORDS};
+    hsize_t count;		/* Number of records in the table */
+    compVLVL_t writeBuf[NRECORDS];/* Buffer to hold data to be written */
+    compVLVL_t readBuf[NRECORDS]; /* Buffer to hold read data */
+    hvl_t   *t1, *t2;
+    int  ii, jj, kk;		/* Loop variables */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with compound datatype containing vlen datatype");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii<NRECORDS; ii++) {
+        writeBuf[ii].i = ii*10;
+        writeBuf[ii].f = (float)((ii*20)/3.0F);
+        writeBuf[ii].v.p = HDmalloc((ii+L1_INCM)*sizeof(hvl_t));
+        if (writeBuf[ii].v.p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%d\n",ii);
+            goto error;
+	}
+        writeBuf[ii].v.len=ii+L1_INCM;
+        for (t1=(hvl_t *)((writeBuf[ii].v).p), jj=0; jj<(ii+L1_INCM); jj++, t1++)
+	{
+            t1->p = HDmalloc((jj+L2_INCM)*sizeof(unsigned int));
+	    if (t1->p == NULL) {
+		fprintf(stderr, "Cannot allocate memory for VL data! ii=%d\n",ii);
+		goto error;
+	    }
+            t1->len = jj+L2_INCM;
+            for (kk=0; kk<jj+L2_INCM; kk++)
+                ((unsigned int*)t1->p)[kk] = ii*100 + jj*10 + kk;
+        }
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TESTFL_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create dataspace for datasets */
+    space = H5Screate_simple(SPACE3_RANK, dims1, NULL);
+    if (space < 0)
+	goto error;
+
+    /* Create a VL datatype of an atomic type */
+    vlatomic = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vlatomic < 0)
+	goto error;
+
+    /* Create a VL datatype of the VL of atomic datatype */
+    vlofvl = H5Tvlen_create (vlatomic);
+    if (vlofvl < 0)
+	goto error;
+
+    /* Create the base compound type */
+    comp_vlvl = H5Tcreate(H5T_COMPOUND, sizeof(compVLVL_t));
+    if (comp_vlvl < 0)
+	goto error;
+
+    /* Insert fields: atomic, atomic, vlen */
+    ret = H5Tinsert(comp_vlvl, "i", HOFFSET(compVLVL_t, i), H5T_NATIVE_INT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(comp_vlvl, "f", HOFFSET(compVLVL_t, f), H5T_NATIVE_FLOAT);
+    if (ret < 0)
+	goto error;
+    ret = H5Tinsert(comp_vlvl, "v", HOFFSET(compVLVL_t, v), vlofvl);
+    if (ret < 0)
+	goto error;
+
+    /* Create a packet table that uses a compound datatype of vlen datatype */
+    ptable = H5PTcreate_fl(fid, PT_COMP_VLEN, comp_vlvl, (hsize_t)1, 0);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(comp_vlvl) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)NRECORDS, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)NRECORDS, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Compare data read in */
+    for (ii = 0; ii < NRECORDS; ii++) {
+        if (writeBuf[ii].i != readBuf[ii].i) {
+            fprintf(stderr, "Integer components don't match!, writeBuf[%d].i=%d, readBuf[%d].i=%d\n",(int)ii,(int)writeBuf[ii].i,(int)ii,(int)readBuf[ii].i);
+            continue;
+        } /* end if */
+        if (!H5_FLT_ABS_EQUAL(writeBuf[ii].f,readBuf[ii].f)) {
+            fprintf(stderr, "Float components don't match!, writeBuf[%d].f=%f, readBuf[%d].f=%f\n",(int)ii,(double)writeBuf[ii].f,(int)ii,(double)readBuf[ii].f);
+            continue;
+        } /* end if */
+
+        if (writeBuf[ii].v.len != readBuf[ii].v.len) {
+            fprintf(stderr, "%d: VL data length don't match!, writeBuf[%d].v.len=%d, readBuf[%d].v.len=%d\n",__LINE__,(int)ii,(int)writeBuf[ii].v.len,(int)ii,(int)readBuf[ii].v.len);
+            continue;
+        } /* end if */
+
+        for (t1=(hvl_t *)(writeBuf[ii].v.p), t2=(hvl_t *)(readBuf[ii].v.p), jj=0; (size_t)jj<readBuf[ii].v.len; jj++, t1++, t2++) {
+            if (t1->len != t2->len) {
+                fprintf(stderr, "%d: VL data length don't match!, ii=%d, jj=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)ii,(int)jj,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for (kk=0; (size_t)kk<t2->len; kk++) {
+                if (((unsigned int *)t1->p)[kk] != ((unsigned int *)t2->p)[kk] ) {
+                    fprintf(stderr, "VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)kk, (int)((unsigned int *)t1->p)[kk], (int)kk, (int)((unsigned int *)t2->p)[kk]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Release datatypes */
+    if (H5Tclose(vlatomic) < 0)
+	goto error;
+    if (H5Tclose(vlofvl) < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* testfl_compound_VL_VLtype */
+
+/*-------------------------------------------------------------------------
+ * testfl_VLof_VLtype(): Test that a packet table of VL datatype with VL
+ *	datatypes of atomic datatypes can be created and written
+ *	correctly. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+static int testfl_VLof_VLtype(void)
+{
+    hid_t   fid=H5I_INVALID_HID;	/* Test file identifier */
+    hid_t   ptable=H5I_INVALID_HID;	/* Packet table identifier */
+    hid_t   vlatomic=H5I_INVALID_HID;	/* Variable length datatype */
+    hid_t   vlofvl=H5I_INVALID_HID;	/* VL datatype of VL datatypes */
+    hsize_t count;		/* Number of records in the table */
+    hvl_t   *t1;		/* pointer to advance */
+    int     ii, jj, kk;		/* Loop variables */
+    hvl_t   writeBuf[NRECORDS];	/* Buffer to hold data to be written */
+    hvl_t   readBuf[NRECORDS];	/* Buffer to hold read data */
+    char    msg[80];		/* For error message */
+    herr_t  ret;		/* Returned status from a callee */
+
+    TESTING3("        with vlen datatype of vlen datatype");
+
+    /* Allocate and initialize VL data to write (copied from C test) */
+    for (ii=0; ii< NRECORDS; ii++) {
+        writeBuf[ii].p = HDmalloc((ii+1)*sizeof(hvl_t));
+        if (writeBuf[ii].p == NULL) {
+            fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+            goto error;
+        } /* end if */
+        writeBuf[ii].len = ii+1;
+        for (t1=(hvl_t *)(writeBuf[ii].p), jj=0; jj<(ii+1); jj++, t1++)
+	{
+            t1->p = HDmalloc((jj+1)*sizeof(unsigned int));
+	    if (t1->p == NULL) {
+		fprintf(stderr, "Cannot allocate memory for VL data! ii=%u\n",ii);
+		goto error;
+	    }
+            t1->len = jj+1;
+            for (kk=0; kk<(jj+1); kk++)
+                ((unsigned int *)t1->p)[kk] = ii*100+jj*10+kk;
+        } /* end for */
+    } /* end for */
+
+    /* Open the file */
+    fid = H5Fopen(TESTFL_FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (fid < 0)
+	goto error;
+
+    /* Create a VL datatype of an atomic type */
+    vlatomic = H5Tvlen_create (H5T_NATIVE_UINT);
+    if (vlatomic < 0)
+	goto error;
+
+    vlofvl = H5Tvlen_create (vlatomic);
+    if (vlofvl < 0)
+	goto error;
+
+    /* Create a packet table that uses a vlen datatype of vlen datatype */
+    ptable = H5PTcreate_fl(fid, PT_VLEN_VLEN, vlofvl, (hsize_t)1, 0);
+
+    /* Ensure that PT is created successfully */
+    if (ptable == H5I_INVALID_HID)
+	goto error;
+
+    /* Close the vlen datatype */
+    if (H5Tclose(vlofvl) < 0)
+	goto error;
+
+    /* Write the entire buffer to the packet table */
+    ret = H5PTappend(ptable, (size_t)5, writeBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Get the number of packets in the packet table, should be NRECORDS. */
+    ret = H5PTget_num_packets(ptable, &count);
+    if (ret < 0)
+	goto error;
+
+    sprintf(msg, "The number of packets in the packet table must be %u\n", NRECORDS);
+    VERIFY(count == NRECORDS, msg);
+
+    /* Read all five packets back */
+    ret = H5PTread_packets(ptable, (hsize_t)0, (size_t)5, (void*)readBuf );
+    if (ret < 0)
+	goto error;
+
+    /* Free the buffers */
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    if (ret < 0)
+	goto error;
+    ret = H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    if (ret < 0)
+	goto error;
+
+    /* Close the packet table */
+    ret = H5PTclose(ptable);
+    if (ret < 0)
+	goto error;
+
+    /* Close the file */
+    if (H5Fclose(fid) < 0)
+	goto error;
+
+    PASSED();
+    return SUCCEED;
+
+error: /* An error has occurred.  Clean up and exit. */
+    if (H5PTis_valid(ptable) > 0) H5PTclose(ptable);
+    if (fid > 0) H5Fclose(fid);
+    H5PTfree_vlen_buff(ptable, NRECORDS, readBuf);
+    H5PTfree_vlen_buff(ptable, NRECORDS, writeBuf);
+    H5_FAILED();
+    return FAIL;
+} /* testfl_VLof_VLtype */
+
+/*-------------------------------------------------------------------------
+ * test_packet_table_with_varlen(): Invokes individual tests to ensure that
+ *	packet tables with variable length are created and written correctly
+ *	without the specific VL PT functionality. (HDFFV-442)
+ *
+ * 2016/01/27 -BMR
+ *-------------------------------------------------------------------------
+ */
+int test_packet_table_with_varlen(void)
+{
+    hid_t fid=H5I_INVALID_HID;		/* File identifier */
+    int status = SUCCEED;
+
+    /* Create a file using default properties */
+    fid = H5Fcreate(TEST_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    if (fid < 0)
+	return FAIL;
+
+    /* Close the file.  The file will be opened by each test function below */
+    if (H5Fclose(fid) < 0)
+	return FAIL;
+
+    HDputs("Testing packet table with various variable-length datatypes");
+
+    /* If any test fails, move on to subsequent test, but status will indicate
+       there is a failure. */
+
+    /* Test variable length of a simple type */
+    if (test_VLof_atomic() < 0)
+	status = FAIL;
+
+    /* Test variable length of a compound type */
+    if (test_VLof_comptype() < 0)
+	status = FAIL;
+
+    /* Test compound type with variable length */
+    if (test_compound_VL_VLtype() < 0)
+	status = FAIL;
+
+    /* Test variable length of a variable length */
+    if (test_VLof_VLtype() < 0)
+	status = FAIL;
+
+    /* Test variable length of a variable length */
+    if (test_H5PTis_varlen() < 0)
+	status = FAIL;
+
+    /* Test adding attributes to packet table */
+    if (test_attributes() < 0)
+	status = FAIL;
+
+    /* Test accessor functions */
+    if (test_accessors() < 0)
+	status = FAIL;
+
+
+/**************************************************************************
+	Calling test functions for deprecated function H5PTcreate_fl
+	Mar 2016, -BMR
+
+**************************************************************************/
+
+    /* Create a file using default properties */
+    fid = H5Fcreate(TESTFL_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    if (fid < 0)
+	return FAIL;
+
+    /* Close the file.  The file will be opened by each test function below */
+    if (H5Fclose(fid) < 0)
+	return FAIL;
+
+    HDputs("Testing packet table with various variable-length datatypes - H5PTcreate_fl");
+
+    /* If any test fails, move on to subsequent test, but status will indicate
+       there is a failure. */
+
+    /* Test variable length of a simple type */
+    if (testfl_VLof_atomic() < 0)
+	status = FAIL;
+
+    /* Test variable length of a compound type */
+    if (testfl_VLof_comptype() < 0)
+	status = FAIL;
+
+    /* Test compound type with variable length */
+    if (testfl_compound_VL_VLtype() < 0)
+	status = FAIL;
+
+    /* Test variable length of a variable length */
+    if (testfl_VLof_VLtype() < 0)
+	status = FAIL;
+
+    return(status);
+}
diff --git a/hl/tools/Makefile.in b/hl/tools/Makefile.in
index 70934f0..0c2dd4a 100644
--- a/hl/tools/Makefile.in
+++ b/hl/tools/Makefile.in
@@ -108,10 +108,23 @@ TESTS =
 subdir = hl/tools
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -417,18 +430,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -441,7 +458,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -479,10 +495,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -493,6 +513,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -503,8 +524,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -519,6 +552,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -526,6 +561,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -549,6 +585,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -564,7 +601,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -573,8 +612,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -653,6 +694,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in
index c25a88d..8163fe3 100644
--- a/hl/tools/gif2h5/Makefile.in
+++ b/hl/tools/gif2h5/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = hl/tools/gif2h5
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -431,18 +444,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -455,7 +472,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -493,10 +509,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -507,6 +527,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -517,8 +538,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -533,6 +566,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -540,6 +575,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -563,6 +599,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -578,7 +615,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -587,8 +626,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -667,6 +708,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/tools/gif2h5/h52giftest.sh.in b/hl/tools/gif2h5/h52giftest.sh.in
index 7aec219..90931f2 100644
--- a/hl/tools/gif2h5/h52giftest.sh.in
+++ b/hl/tools/gif2h5/h52giftest.sh.in
@@ -77,7 +77,7 @@ TOOLTEST ./h52gif $TESTFILE1 image1.gif -i image
 echo ""
 
 # Negative tests.
-echo "**verify the the h52gif tool handle error conditions correctly..."
+echo "**verify that the h52gif tool handles error conditions correctly..."
 # nonexisting dataset name
 TESTING "./h52gif h52giftst.h5 image.gif -i nosuch_image" 
 TOOLTESTFAIL "./h52gif $TESTFILE1 image.gif -i nosuch_image" 
diff --git a/hl/tools/h5watch/Makefile.in b/hl/tools/h5watch/Makefile.in
index 375b159..05fd313 100644
--- a/hl/tools/h5watch/Makefile.in
+++ b/hl/tools/h5watch/Makefile.in
@@ -112,10 +112,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = hl/tools/h5watch
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -434,18 +447,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -458,7 +475,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -496,10 +512,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -510,6 +530,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -520,8 +541,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -536,6 +569,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -543,6 +578,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -566,6 +602,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -581,7 +618,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -590,8 +629,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -670,6 +711,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/hl/tools/h5watch/h5watch.c b/hl/tools/h5watch/h5watch.c
index 643b4e7..1812087 100644
--- a/hl/tools/h5watch/h5watch.c
+++ b/hl/tools/h5watch/h5watch.c
@@ -830,8 +830,8 @@ main(int argc, const char *argv[])
     void               *edata;
     H5E_auto2_t         func;
     char	*x;
-    hid_t	fid = -1;
-    hid_t	fapl = -1;
+    hid_t       fid = -1;
+    hid_t       fapl = -1;
 
     /* Set up tool name and exit status */
     h5tools_setprogname(PROGRAMNAME);
diff --git a/html/Copyright.html b/html/Copyright.html
index 58d3ccf..181d3fa 100644
--- a/html/Copyright.html
+++ b/html/Copyright.html
@@ -21,7 +21,7 @@ HDF5 (Hierarchical Data Format 5) Software Library and Utilities</h3>
 
 HDF5 (Hierarchical Data Format 5) Software Library and Utilities
 <br>
-Copyright 2006-2015 by The HDF Group.
+Copyright 2006-2016 by The HDF Group.
 <p>
 NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
 <br>
diff --git a/html/HL/H5LT/H5LDget_dset_dims.htm b/html/HL/H5LT/H5LDget_dset_dims.htm
new file mode 100644
index 0000000..10b73ad
--- /dev/null
+++ b/html/HL/H5LT/H5LDget_dset_dims.htm
@@ -0,0 +1,117 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5LDget_dset_dims" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="H5LDget_dset_dims">H5LDget_dset_dims</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5LDget_dset_dims(
+              <em>hid_t</em> dset_id, 
+	      <em>hsize_t</em> *cur_dims
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Retrieves the current dimension sizes of a dataset.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>This routine retrieves the current dimension sizes for the 
+        dataset <code>dset_id</code> through the parameter <code>cur_dims</code>.  
+        It will return failure if <code>cur_dims</code> is NULL.</dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+      <table>
+      <tr>
+          <td valign="top" width="25%"><code><em>hid_t</em> dset_id</code></td>
+	  <td valign="top" width="75%">IN: The dataset identifier</td>
+      </tr>
+      <tr>
+          <td valign="top"><code><em>hsize_t</em> *cur_dims   
+              </code></td>
+          <td valign="top">OUT: The current dimension sizes of the dataset.</td>
+      </tr>
+      </table>
+    
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>If successful, returns zero. 
+        Otherwise, returns a negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt>
+    <dd>
+    See the examples in <a href="H5LDget_dset_elmts.htm">
+    <code>H5LDget_dset_elmts</code></a> for the usage of this routine.
+    </dd>
+    <br />
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5LDget_dset_type_size.htm">H5LDget_dset_type_size</a></li>
+      <li><a href="H5LDget_dset_dims.htm">H5LDget_dset_dims</a></li>
+      <li><a href="H5LDget_dset_elmts.htm">H5LDget_dset_elmts</a></li>
+      <li><a href="h5watch.htm">h5watch</a></li>
+    </ul>
+    <br />
+
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/HL/H5LT/H5LDget_dset_elmts.htm b/html/HL/H5LT/H5LDget_dset_elmts.htm
new file mode 100644
index 0000000..c43a57c
--- /dev/null
+++ b/html/HL/H5LT/H5LDget_dset_elmts.htm
@@ -0,0 +1,287 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5LDget_dset_elmts" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="H5LDget_dset_elmts">H5LDget_dset_elmts</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5LDget_dset_elmts(
+              <em>hid_t</em> dset_id,
+              <em>hsize_t</em> *prev_dims, 
+              <em>hsize_t</em> *cur_dims,
+              <em>char</em> *fields, 
+              <em>void</em> *buf
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Retrieves selected data from the dataset.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>This routine retrieves selected data of the dataset 
+    <code>dset_id</code> and stores the data in the parameter <code>buf</code>. 
+    The difference between the parameters <code>prev_dims</code> and 
+    <code>cur_dims</code> indicates the dimension sizes of the data to 
+    be selected from the dataset. Note that <code>cur_dims</code> must 
+    have at least one dimension whose size is greater than the 
+    corresponding dimension in <code>prev_dims</code>. 
+    Users can determine the size of <code>buf</code> by multipling 
+    the datatype size of the dataset by the number of selected 
+    elements.
+    <p>If the parameter <code>fields</code> is NULL, this routine returns 
+    data for the selected elements of the dataset. 
+    If <code>fields</code> is not NULL and the dataset has a compound 
+    datatype, <code>fields</code> is a string containing a comma-separated 
+    list of fields.
+    Each name in <code>fields</code> specifies a field in the compound 
+    datatype, and this routine returns data of the selected fields for the 
+    dataset's selected elements.
+    Note that ’,’ is the 
+    separator for the fields of a compound datatype while ’.’ 
+    is the separator for a nested field. Use backslash to escape characters 
+    in field names that conflict with these two separators.</td>
+    </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+  <dd>
+    <table>
+    <tr>
+        <td valign="top" width="25%"><code><em>hid_t</em> dset_id</code></td>
+        <td valign="top" width="75%">IN: The dataset identifier</td>
+    </tr>
+    <tr>
+        <td valign="top"><code><em>hsize_t</em> *prev_dims   
+            </code></td>
+        <td valign="top">IN: The previous dimension size of the dataset</td>
+    </tr>
+    <tr>
+        <td valign="top"><code><em>hsize_t</em> *cur_dims</code></td>
+        <td valign="top">IN: The current dimension size of the dataset</td>
+    </tr>
+    <tr>
+        <td valign="top"><code><em>char</em> *fields</code></td>
+        <td valign="top">IN: A string containing a comma-separated list of 
+            fields for a compound datatype. 
+    </tr>
+    <tr>
+        <td valign="top"><code><em>void</em> *buf</code></td>
+        <td valign="top">OUT: Buffer for storing data retrieved from the 
+            dataset</td>
+    </tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>If successful, returns zero; otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt>
+    <dd>
+    For the first example, <code>DSET1</code> is a two-dimensional 
+    chunked dataset with atomic type defined below:
+    <pre>
+    DATASET "DSET1" {
+	DATATYPE  H5T_STD_I32LE
+	DATASPACE  SIMPLE { ( 4, 13 ) / ( 60, 100 ) }
+	:
+	:
+    }
+</pre>
+
+    The following coding sample illustrates the reading of data elements 
+    appended to the dataset <code>DSET1</code>:
+    <pre>
+    /* open the HDF5 file */
+    fid = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* open the dataset */
+    did = H5Dopen2(fid, "DSET1", H5P_DEFAULT);
+        :
+        :
+    /* define hsize_t dims[2]; */
+    /* define hsize_t new_dims[2]; */
+    /* get the dataset's current dimension sizes */
+    H5LDget_dset_dims(did, dims);
+
+    /* extend the dataset by 2 */
+    new_dims[0] = dims[0] + 2; 
+    new_dims[1] = dims[1] + 2;
+    H5Dset_extent(did, new_dims) 
+     
+    /* write data to the extended dataset */
+        :
+        :
+    /* get the size of the dataset's data type */
+    type_size = H5LDget_dset_type_size(did, NULL);
+        :
+        :
+    /* allocate buffer for storing selected data elements from the dataset */
+    /* calculate # of selected elements from dims & new_dims */
+    /* buffer size = type_size * number of selected elements */
+        :
+        :
+    /* read the selected elements from the dataset into buf */
+    H5LDget_dset_elmts(did, dims, new_dims, NULL, buf);
+        :
+        :
+    H5Dclose(did);
+    H5Fclose(fid);
+</pre>
+
+    The output buffer will contain data elements selected from 
+    <code>DSET1</code> as follows:
+    <pre>
+    data for elements (0, 13), (0, 14) 
+    data for elements (1, 13), (1, 14) 
+    data for elements (2, 13), (2, 14) 
+    data for elements (3, 13), (3, 14)
+    data for elements (4, 0), (4, 1), (4, 2)......................(4, 13), (4, 14)
+    data for elements (5, 0), (5, 1), (5, 2)......................(5, 13), (5, 14)
+</pre>
+
+    For the second example, <code>DSET2</code> is a one-dimensional 
+    chunked dataset with compound type defined below:
+    <pre>
+    DATASET "DSET2" {
+	DATATYPE  H5T_COMPOUND {
+	    H5T_STD_I32LE "a";
+	    H5T_STD_I32LE "b";
+	    H5T_ARRAY { [4] H5T_STD_I32LE } "c";
+	    H5T_STD_I32LE "d";
+	    H5T_STD_I32LE "e";
+	    H5T_COMPOUND {
+		H5T_STD_I32LE "a";
+		H5T_STD_I32LE "b";
+		H5T_ARRAY {[4] H5T_STD_I32LE} "c";
+		H5T_STD_I32LE "d";
+		H5T_STD_I32LE "e";
+	    } "s2";
+	}
+	DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+	:
+	:
+    }
+</pre>
+
+    The following coding sample illustrates the reading of data elements 
+    appended to the dataset <code>DSET2</code> with compound datatype
+    This example selects only 2 fields: the fourth field <code>d</code> 
+    and a subfield of the sixth field <code>s2.c</code>:    
+    <pre>
+    /* open the HDF5 file */
+    fid = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* open the dataset */
+    did = H5Dopen2(fid, "DSET2", H5P_DEFAULT);
+
+    /* define hsize_t dims[1]; */
+    /* define hsize_t new_dims[1]; */
+        :
+        :
+    /* get the dataset's current dimension size */
+    H5LDget_dset_dims(did, dims);
+
+    /* extend the dataset by 2 */
+    new_dims[0] = dims[0] + 2;
+    H5Dset_extent(did, new_dims);
+        :
+        :
+    /* write data to the extended part of the dataset */
+        :
+        :
+    /* #define fields "d,s2.c" */
+    /* get the size of the dataset's data type for the selected fields */
+    type_size = H5LDget_dset_type_size(did, fields);
+        :
+        :
+    /* allocate buffer for storing selected data elements from the dataset */
+    /* calculate # of selected elements from dims & new_dims */
+    /* buffer size = type_size * number of selected elements */
+        :        
+        :
+    /* read the selected elements from the dataset into buf */
+    H5LD_get_dset_elmts(did, dims, new_dims, fields, buf);
+        :
+        :
+    H5Dclose(did);
+    H5Fclose(fid);
+</pre>
+
+    The output buffer will contain data for <code>d</code> and 
+    <code>s2.c</code> selected from <code>DSET2</code> as follows:
+    <pre>
+    Data for element (5): integer value for "d", 4 integer values for array "s2.c"
+    Data for element (6): integer value for "d", 4 integer values for array "s2.c"
+</pre>
+
+    </dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+<li><a href="H5LDget_dset_type_size.htm">H5LDget_dset_type_size</a></li>
+<li><a href="H5LDget_dset_dims.htm">H5LDget_dset_dims</a></li>
+<li><a href="H5LDget_dset_elmts.htm">H5LDget_dset_elmts</a></li>
+<li><a href="h5watch.htm">h5watch</a></li>
+    </ul>
+    <br />
+
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/HL/H5LT/H5LDget_dset_type_size.htm b/html/HL/H5LT/H5LDget_dset_type_size.htm
new file mode 100644
index 0000000..2cb5b92
--- /dev/null
+++ b/html/HL/H5LT/H5LDget_dset_type_size.htm
@@ -0,0 +1,126 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5LDget_dset_type_size" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="H5LDget_dset_type_size">H5LDget_dset_type_size</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>size_t</em> H5LDget_dset_type_size(
+              <em>hid_t</em> dset_id, 
+              <em>char</em> *fields</em>
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Returns the size in bytes of the dataset’s datatype.
+    </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>This routine allows the user to find out the datatype size for the 
+    dataset associated with <em>dset_id</em>.
+    If the parameter <em>fields</em> is NULL, 
+    this routine just returns the size of the dataset’s datatype. 
+    If the dataset has a compound datatype and <em>fields</em> is non-NULL,
+    this routine returns the size of the datatype(s) for the selected fields
+    specified in <em>fields</em>.  Note that ’,’ is the separator 
+    for the fields of a compound datatype while ’.’ (dot)
+    is the separator for a nested field.  
+    Use a backslash ( \ ) to escape characters in field names that 
+    conflict with these two separators.
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>    
+      <table>
+        <tr>
+	  <td valign="top" width="20%"><code><em>hid_t</em> dset_id   </code></td>
+	  <td valign="top" width="80%">IN: The dataset identifier</td>
+	</tr>
+	<tr>
+	  <td valign="top"><code><em>char</em> *fields</code></td>
+	  <td valign="top">IN: The pointer to a comma-separated list of fields
+	    for a compound datatype. 
+	</tr>
+      </table>
+</dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>If successful, returns the size in bytes of the dataset’s 
+    datatype. Otherwise, returns 0.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt>
+    <dd>
+    See the examples in 
+    <a href="H5LDget_dset_elmts.htm"><code>H5LDget_dset_elmts</code></a>
+    for the usage of this routine.
+    </dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5LDget_dset_type_size.htm">H5LDget_dset_type_size</a></li>
+      <li><a href="H5LDget_dset_dims.htm">H5LDget_dset_dims</a></li>
+      <li><a href="H5LDget_dset_elmts.htm">H5LDget_dset_elmts</a></li>
+      <li><a href="h5watch.htm">h5watch</a></li>
+    </ul>
+    <br />
+
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+      <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td></tr>
+      <tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release. </td></tr>
+      </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/HL/HDF5Optimized/H5DOappend.htm b/html/HL/HDF5Optimized/H5DOappend.htm
new file mode 100644
index 0000000..9574d37
--- /dev/null
+++ b/html/HL/HDF5Optimized/H5DOappend.htm
@@ -0,0 +1,179 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5DOappend" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 9 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="H5DOappend">H5DOappend</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5DOappend(
+              <em>hid_t</em> dset_id, 
+              <em>hid_t</em> dxpl_id, 
+              <em>unsigned</em> index, 
+              <em>size_t</em> num_elem, 
+              <em>hid_t</em> memtype, 
+              <em>const void</em> *buffer
+        )</code></dd>
+<br />
+
+<dt><strong>Purpose:</strong></dt>  
+    <dd>Appends data to a dataset along a specified dimension. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd>
+    The <code>H5DOappend</code> routine extends a dataset by 
+    <code>num_elem</code> number of elements along a dimension specified by 
+    a dimension <code>index</code> and writes <code>buffer</code> of elements 
+    to the dataset. Dimension <code>index</code> is 0-based. Elements’ 
+    type is described by <code>memtype</code>. 
+    <p>
+    This routine combines calling <code>H5Dset_extent</code>, 
+    <code>H5Sselect_hyperslab</code>, and <code>H5Dwrite</code> into a single 
+    routine that simplifies application development for the common case of 
+    appending elements to an existing dataset.</p>
+    <p>
+    For a multi-dimensional dataset, appending to one dimension will 
+    write a contiguous hyperslab over the other dimensions. For example, 
+    if a 3-D dataset has dimension sizes (3, 5, 8), extending the 
+    0<sup>th</sup> dimension (currently of size 3) by 3 will append 
+    3*5*8 = 120 elements (which must be pointed to by the <code>buffer</code> 
+    parameter) to the dataset, making its final dimension sizes (6, 5, 8).</p>
+    <p>
+    If a dataset has more than one unlimited dimension, any of those 
+    dimensions may be appended to, although only along one dimension per 
+    call to <code>H5DOappend</code>.</p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> dset_id</code></td>
+        <td width="80%">IN: Dataset identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>hid_t</em> dxpl_id</code></td>
+        <td>IN: Dataset transfer property list 
+            identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>unsigned</em> index</code></td>
+        <td>IN: Dimension number (0-based).</td></tr>
+      <tr valign="top">
+        <td><code><em>size_t</em> num_elem   </code></td>
+        <td>IN: Number of elements to add along the 
+            dimension.</td></tr>
+      <tr valign="top">
+        <td><code><em>hid_t</em> memtype</code></td>
+        <td>IN: Memory type identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>void</em> *buffer</code></td>
+        <td>IN: Data buffer.</td></tr>
+    </table></dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; otherwise returns a 
+    negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt> 
+    <dd>
+    See the example in the entry for the <a href="H5Pset_append_flush.htm"> 
+    <code>H5Pset_append_flush</code> </a> API. The example illustrates the 
+    usage of <code>H5DOappend</code> to append to a dataset. 
+    </dd>
+    <br />
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+
+
+
+
+<br />
+
+
+<dt><strong>History:</strong></dt>
+<dd><table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td></tr>
+    <tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release. </td></tr>
+    </table></dd>
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/APICompatMacros.html b/html/RM/APICompatMacros.html
index 5baf0f4..acd8834 100644
--- a/html/RM/APICompatMacros.html
+++ b/html/RM/APICompatMacros.html
@@ -89,25 +89,33 @@ In the
 <h3>Audience</h3>
 The target audience for this document has existing applications
 that use the HDF5 Library, and is considering moving to 
-HDF5 Release 1.8.0  to take advantage of the latest library 
+HDF5 Release 1.10.x  to take advantage of the latest library 
 features and enhancements.
 
 <h3>Compatibility Issues</h3>
-HDF5 1.8.0 is a major update of the HDF5 Library. 
-Several compatibility issues must be considered when migrating 
-applications to the HDF5 1.8.0 release.
+HDF5 Release 1.10.0 is a major update of the HDF5 Library. 
+Certain compatibility issues must be considered when migrating 
+applications from an earlier major release series, such as 1.8.x or 1.6.x,
+to a HDF5 1.10.x release.
 <p>
-This document, “<cite>API Compatibility Macros in HDF5</cite>,” introduces 
-the approach taken by The HDF Group in HDF Release 1.8.0 to 
+This document, “<cite>API Compatibility Macros in HDF5</cite>,” 
+describes the approach taken by The HDF Group in HDF5 Release 1.10.0 to 
 help existing users of HDF5 address compatibility issues in the HDF5 API. 
+A companion document,
+<a href="/HDF5/docNewFeatures/index.html"><cite>New Features in 
+HDF5 Release 1.10.0</cite></a>, discusses 
+    features introduced in HDF5 Release 1.10.0 and 
+    the HDF5 API calls associated with those features. 
+<!--
 The companion document,
 <a href="../ADGuide/CompatFormat180.html"><cite>New Features in 
-HDF5 Release 1.8.0 and Format Compatibility Considerations</cite></a>,
+HDF5 Release 1.10.0 and Format Compatibility Considerations</cite></a>,
 discusses 
-    features introduced in HDF5 Release 1.8.0, 
+    features introduced in HDF5 Release 1.10.0, 
     the HDF5 API calls associated with those features, 
     and the potential file format compatibility issues that may 
       result if the new features are used.
+-->
 
 <h3>Summary and Motivation</h3>
 In response to new and evolving requirements for the library and
@@ -117,23 +125,23 @@ To allow existing applications to continue to compile and run properly,
 all versions of these functions have been retained in the later
 releases of the HDF5 Library.
 <p>
-HDF5 Release 1.8.0 includes a number of new features that will offer
-many users of HDF5 substantial performance improvements and expanded
-capabilities.  Many of these features can only be accessed via 
+HDF5 Release 1.10.0 includes a number of new features that offer
+users of HDF5 substantial performance improvements and expanded
+capabilities.  Some of these features can only be accessed via 
 revised API calls.   Given the scope of the changes, and recognizing
 the potentially time-consuming task of editing all the affected calls
 in user applications, The HDF Group has created a set of macros that can be
-used to flexibly and easily map existing API calls to either 1.6.x
-or 1.8.x (currently 1.8.0) functions.  
+used to flexibly and easily map existing API calls to either 1.6.x, 1.8.x,
+or 1.10.x functions.  
 We refer to these as the <em>API compatibility macros</em>.
 <p>
 The HDF Group generally encourages users to update applications 
-to work with the latest HDF5 library release, so that 
+to work with the latest HDF5 Library release so that 
 all new features and enhancements are available to them.
-At the same time, The HDF Group understands that under some circumstances
+At the same time, The HDF Group understands that, under some circumstances,
 updating applications may not be feasible or necessary.
 The API compatibility macros, described in this document,
-provide a bridge from old APIs to new, 
+provide a bridge from old APIs to new 
 and can be particularly helpful in situations such as these:
 <ul>
     <li>Source code is not available - only binaries are available;
@@ -152,72 +160,84 @@ and can be particularly helpful in situations such as these:
 <!-- NEW PAGE -->
 <h3>Understanding and Using the Macros</h3>
 
-As part of HDF5 release 1.8.0, twenty-three functions that existed in 
+As part of HDF5 Release 1.10.0, two functions that existed in 
 previous versions of the library were updated with new calling
 parameters and given new names. 
-The updated versions of the functions have a "2" at the end of the original function name.
+The updated versions of the functions have a ‘2’ at the end of the 
+original function name.
 The original versions of these functions were retained and renamed to have 
-a "1" at the end of the original function name.   
+a ‘1’ at the end of the original function name.   
+In one case, <code>H5Fget_info</code>, the change is in the struct employed 
+by the function.  In this case, the struct was versioned in exactly the
+same manner as the function. 
 API compatibility macros, with the same names as the original
-function names, were created.
+function and struct names, were then created.
 
 <p>
-Concretely, consider the function <code> H5Acreate </code> in HDF5 releases prior
-to 1.8.0:
+Note that twenty-three versioned functions and corresponding macros 
+were introduced in HDF5 Release 1.8.0.
+These functions and macros were created in exactly the same manner discussed 
+in the preceding paragraph.
+
+<p>
+Concretely, consider the function <code>H5Rdereference</code> 
+in HDF5 releases prior to 1.10.0:
 
 <p>
 
 <ul>
-Original function name and signature, in releases prior to 1.8.0:
+Original function name and signature, in releases prior to 1.10.0:
 <br>
     <code>
-    <em>hid_t</em> H5Acreate( <em>hid_t</em> loc_id,
-                                   <em>const char </em> *attr_name,
-                                   <em>hid_t</em> type_id,
-                                   <em>hid_t</em> space_id,
-                                   <em>hid_t</em> acpl_id ) </code>
-
+    <em>hid_t</em> H5Rdereference( 
+                   <em>hid_t</em> <code>obj_id</code>,
+                   <em>H5R_type_t</em> <code>ref_type</code>,
+                   <em>void *</em><code>ref</code>
+                   ) </code>
 <br><br>
-Updated function and signature, introduced in release 1.8.0:
+Updated function and signature, introduced in release 1.10.0:
 <br>
     <code>
-    <em>hid_t</em> H5Acreate2( <em>hid_t</em> loc_id,
-                                   <em>const char </em> *attr_name,
-                                   <em>hid_t</em> type_id,
-                                   <em>hid_t</em> space_id,
-                                   <em>hid_t</em> acpl_id,
-                                   <em>hid_t</em> aapl_id ) </code>
+    <em>hid_t</em> H5Rdereference2( 
+                   <em>hid_t</em> <code>obj_id</code>,
+                   <em>hid_t</em> <code>oapl_id</code>,
+                   <em>H5R_type_t</em> <code>ref_type</code>,
+                   <em>void *</em><code>ref</code>
+                   ) </code>
 
 <br> <br>
-Original function and signature, renamed in release 1.8.0:
+Original function and signature, renamed in release 1.10.0:
 <br>
     <code>
-    <em>hid_t</em> H5Acreate1( <em>hid_t</em> loc_id,
-                                   <em>const char </em> *attr_name,
-                                   <em>hid_t</em> type_id,
-                                   <em>hid_t</em> space_id,
-                                   <em>hid_t</em> acpl_id ) </code>
+    <em>hid_t</em> H5Rdereference1( 
+                   <em>hid_t</em> <code>obj_id</code>,
+                   <em>H5R_type_t</em> <code>ref_type</code>,
+                   <em>void *</em><code>ref</code>
+                   ) </code>
 <br><br>
-API compatibility macro, introduced in release 1.8.0:
+API compatibility macro, introduced in release 1.10.0:
 <br>
-    <code> H5Acreate </code>
+    <code> H5Rdereference </code>
 </ul>
-The macro, <code>H5Acreate</code>, will be mapped to either 
-<code>H5Acreate1</code> or <code>H5Acreate2</code>.  
+
+The macro, <code>H5Rdereference</code>, will be mapped to either 
+<code>H5Rdereference1</code> or <code>H5Rdereference2</code>.  
 The mapping is determined by a combination of the 
 configuration options use to build the HDF5 Library 
 and compile-time options used to build the application.
-The calling parameters used with the <code>H5Acreate</code> 
+The calling parameters used with the <code>H5Rdereference</code> 
 compatibility macro should match the number and type of the 
-function they will be mapped to
-(<code>H5Acreate1</code> or <code>H5Acreate2</code>).
-<p>
-The function names ending in "1" or "2" are referred to as <em>version-numbered names</em>,
-and the corresponding functions are referred to as <em>version-numbered functions</em>.
-For new code development, 
-The HDF Group recommends use of the compatibility macro mapped to the latest version of the function.
-The original versions of these functions, with names ending in "1", should be considered
-deprecated and, in general, should not be used when developing new code.
+function the macros will be mapped to
+(<code>H5Rdereference1</code> or <code>H5Rdereference2</code>).
+<p>
+The function names ending in ‘1’ or ‘2’ 
+are referred to as <em>versioned names</em>, and
+the corresponding functions are referred to as <em>versioned functions</em>.
+For new code development, The HDF Group recommends use of the 
+compatibility macro mapped to the latest version of the function.
+The original versions of these functions, with names ending in 
+‘1’, should be considered deprecated and, in general, 
+should not be used when developing new code.
 
 <a name="FunctionLevelSettings"> </a>
 <a name="GlobalSettings"> </a>
@@ -231,40 +251,72 @@ a combination of user-controlled selections,
 collectively referred to as the 
 <em>compatibility macro mapping options</em>,
 is considered in the following sequence:
+
+<table border="0" width="100%">
+<tr><td width="50%" valign="top">
+
 <ol>
   <li> What compatibility macro configuration option was used to
        build the HDF5 Library?  
        We refer to this selection as the <em>library mapping</em>.
 
-  <p>
+  <br /> 
   <li> Was a compatibility macro global compile-time option specified
        when the application was built?
-       We refer to this (optional) selection as the <em>application mapping</em>.  
-       If an application mapping exists, it overrides the library mapping.
+       We refer to this (optional) selection as the 
+       <em>application mapping</em>.  
+       If an application mapping exists, it overrides the library 
+       mapping. 
+       <i>(See adjacent <a href="#KnownLimitation">notes</a>.)</i>
 
-  <p>
+  <br /> 
   <li> Were any compatibility macro function-level compile-time options
        specified when the application was built?  
        We refer to these (optional) selections as <em>function mappings</em>.
        If function mappings exist, they override library and application
        mappings for the relevant API compatibility macros.
+       <i>(See adjacent <a href="#KnownLimitation">notes</a>.)</i>
 </ol>
 
+</td><td width="50%" valign="top">
+
+<table border="1" cellpadding="10" width="100%">
+<tr><td>
+<a name="KnownLimitation"><b>Notes:</b></a>
+       An application mapping can map APIs to the same version 
+       or to a version older than the configured library mapping. 
+       When the application attempts to map APIs to a newer version of 
+       the API than the library was configured with, it will fail to 
+       “upgrade” the mapping
+       (and may fail silently). 
+       <p>
+       When it is necessary to “upgrade” the macro mappings
+       from those set in the library mapping, it must be done at 
+       the per-function level, using the function-level mappings. 
+       As long as one does not try to map a function to a version 
+       that was compiled out in the library mapping, 
+       individual functions can be upgraded or downgraded freely. 
+</td></tr>
+</table>
+
+</td></tr>
+</table>
+
 
 <p>
 The tables that follow summarize the macro mapping behaviors, and the
 configuration and compile-time options that control the mappings.  
-The macro <code>H5Gcreate</code> is used to demonstrate mapping behavior.
+The macro <code>H5Rdereference</code> is used to demonstrate mapping behavior.
 <p>
 Regardless of the macro mapping options used,
-the 1.8.x functions will always be available 
-by explicitly calling the version-numbered functions 
-by their version-numbered names.
-For example, <code>H5Gcreate2</code>.
+the 1.10.x functions will always be available 
+by explicitly calling the versioned functions 
+by their versioned names.
+For example, <code>H5Rdereference2</code>.
 Through the compatibility macro mapping options provided, it is possible to 
-disallow calls to the deprecated 1.6.x functions, 
-such as <code>H5Gcreate1</code>.
-This capability can be used to guarantee only the 
+disallow calls to the deprecated 1.8.x functions, 
+such as <code>H5Rdereference1</code>.
+This capability can be used to guarantee that only the 
 most recent versions of the functions are being called.
 
 <p>
@@ -275,7 +327,7 @@ When the HDF5 Library is built, <code>configure</code> flags can be
 used to control the API compatibility macro mapping behavior 
 exhibited by the library. This behavior can be overridden by application 
 and function mappings.  One configure flag excludes deprecated functions
-from the HDF5 library, making them unavailable to applications linked with
+from the HDF5 Library, making them unavailable to applications linked with
 the library.
 
 <div align=center>
@@ -290,20 +342,29 @@ the library.
         <code>configure</code> flag
       <th>
         Macros map to release
-        <br>(version-numbered function; <code>H5Gcreate</code> shown)
+        <br>(versioned function; <code>H5Rdereference</code> shown)
       <th>
         Deprecated functions available? 
-        <br>(<code>H5Gcreate1</code>)
+        <br>(<code>H5Rdereference1</code>)
       </th>
 
     <tr align=center>
       <td align=left>
+        <code>--with-default-api-version=v110</code>
+        <br />
+        <em>Default behavior if no flag is specified.</em>
+      <td>
+        1.10.x 
+        <br>(<code>H5Rdereference2</code>)
+      <td>
+        yes
+
+    <tr align=center>
+      <td align=left>
         <code>--with-default-api-version=v18</code>
-        <p>
-        <em>Also, default behavior if no flag specified.</em>
       <td>
         1.8.x 
-        <br>(<code>H5Gcreate2</code>)
+        <br>(<code>H5Rdereference1</code>)
       <td>
         yes
 
@@ -312,7 +373,7 @@ the library.
         <code>--with-default-api-version=v16</code>
       <td>
         1.6.x 
-        <br>(<code>H5Gcreate1</code>)
+        <br>(<code>H5Rdereference1</code>)
       <td>
         yes
 
@@ -320,8 +381,8 @@ the library.
       <td align=left>
         <code>--disable-deprecated-symbols</code>
       <td>
-        1.8.x 
-        <br>(<code>H5Gcreate2</code>)
+        1.10.x 
+        <br>(<code>H5Rdereference2</code>)
       <td>
         no
 </table>    
@@ -329,12 +390,12 @@ the library.
 
 <p>
 Refer to the file <code>libhdf5.settings</code> in the directory where
-the HDF5 library is installed to determine the <code>configure</code> 
+the HDF5 Library is installed to determine the <code>configure</code> 
 flags used to build the library.
 In particular, look for the two lines shown here:
 <ul>
     <code>
-    Default Version of Public Symbols:  v18
+    Default Version of Public Symbols:  v110
     <br>
     With Deprecated Public Symbols:  Yes
     </code>
@@ -351,8 +412,9 @@ exhibited by the application.
 The application mapping overrides the behavior specified by the library mapping, 
 and can be overridden on a function-by-function basis by the function mappings.
 <p>
-If the HDF5 Library was configured with the <code>--disable-deprecated-symbols</code>
-flag, then the deprecated functions will not be available, regardless of the
+If the HDF5 Library was configured with the 
+<code>--disable-deprecated-symbols</code> flag,
+then the deprecated functions will not be available, regardless of the
 application mapping options.
 
 <!-- NEW PAGE -->
@@ -368,18 +430,28 @@ application mapping options.
         <code>h5cc</code> option
       <th>
         Macros map to release
-        <br>(version-numbered function; <code>H5Gcreate</code> shown)
+        <br>(versioned function; <code>H5Rdereference</code> shown)
       <th>
         Deprecated functions available? 
-        <br>(<code>H5Gcreate1</code>)
+        <br>(<code>H5Rdereference1</code>)
       </th>
 
     <tr align=center>
       <td align=left>
         <em>Default behavior if no option specified.</em>
       <td>
+        1.10.x 
+        <br>(<code>H5Rdereference2</code>)
+      <td>
+        yes*
+        <br><em>*if available in library</em>
+
+    <tr align=center>
+      <td align=left>
+        <code>-DH5_USE_18_API</code>
+      <td>
         1.8.x 
-        <br>(<code>H5Gcreate2</code>)
+        <br>(<code>H5Rdereference1</code>)
       <td>
         yes*
         <br><em>*if available in library</em>
@@ -389,7 +461,7 @@ application mapping options.
         <code>-DH5_USE_16_API</code>
       <td>
         1.6.x 
-        <br>(<code>H5Gcreate1</code>)
+        <br>(<code>H5Rdereference1</code>)
       <td>
         yes*
         <br><em>*if available in library</em>
@@ -398,8 +470,8 @@ application mapping options.
       <td align=left>
         <code>-DH5_NO_DEPRECATED_SYMBOLS</code>
       <td>
-        1.8.x 
-        <br>(<code>H5Gcreate2</code>)
+        1.10.x 
+        <br>(<code>H5Rdereference2</code>)
       <td>
         no
 </table>    
@@ -425,34 +497,34 @@ function mapping options.
 <p>
 For every function with multiple available versions, a compile-time 
 version flag can be defined to selectively map the function macro 
-to the desired version-numbered function.  
-For example, the <code>H5Gcreate</code>
-can be mapped to either <code>H5Gcreate1</code> or
-<code>H5Gcreate2</code>.
+to the desired versioned function.  
+For example, the <code>H5Rdereference</code> macro
+can be mapped to either <code>H5Rdereference1</code> or
+<code>H5Rdereference2</code>.
 When used, the value of the 
-<code>H5Gcreate_vers</code> compile-time version flag determines
+<code>H5Rdereference_vers</code> compile-time version flag determines
 which function will be called:
 <ul>
-    <li>When <code>H5Gcreate_vers</code> is set to <code>1</code>,
-        the macro <code>H5Gcreate</code> will be mapped to
-        <code>H5Gcreate1</code>. 
+    <li>When <code>H5Rdereference_vers</code> is set to <code>1</code>,
+        the macro <code>H5Rdereference</code> will be mapped to
+        <code>H5Rdereference1</code>. 
         <br>
         <code>     
-        h5cc ... -DH5Gcreate_vers=1 ...</code>
+        h5cc ... -DH5Rdereference_vers=1 ...</code>
         <p>
-    <li>When <code>H5Gcreate_vers</code> is set to <code>2</code>,
-        the macro <code>H5Gcreate</code> will be mapped to
-        <code>H5Gcreate2</code>. 
+    <li>When <code>H5Rdereference_vers</code> is set to <code>2</code>,
+        the macro <code>H5Rdereference</code> will be mapped to
+        <code>H5Rdereference2</code>. 
         <br>
         <code>     
-        h5cc ... -DH5Gcreate_vers=2 ...</code>
+        h5cc ... -DH5Rdereference_vers=2 ...</code>
         <p>
-    <li>When <code>H5Gcreate_vers</code> is not set,
-        the macro <code>H5Gcreate</code> will be mapped to
+    <li>When <code>H5Rdereference_vers</code> is not set,
+        the macro <code>H5Rdereference</code> will be mapped to
         either 
-        <code>H5Gcreate1</code>
+        <code>H5Rdereference1</code>
         or
-        <code>H5Gcreate2</code>,
+        <code>H5Rdereference2</code>,
         based on the application mapping, if one was specified,
         or on the library mapping.
         <br>
@@ -463,15 +535,72 @@ which function will be called:
         
 <!-- NEW PAGE -->
 <p>
-As of Release 1.8.0, the API compatibility macros, 
-the function mapping compile-time version flags and values,
-and the corresponding version-numbered functions are as indicated:
+At release 1.10.0, 
+The following table lists the new API compatibility macros, 
+function and struct mapping compile-time version flags and values,
+and corresponding versioned functions and struct that were 
+introduced at HDF5 Release 1.10.0.
+If the application being compiled to run with any 1.10.x release
+was written to use any 1.8.x release of HDF5, 
+these are the only macros you need to worry about.
 
 <div align=center>
-<table border="1" cellpadding="3">
+<table border="1" cellpadding="3" width="90%">
+
     <caption>
         <b>Table 3: <font size=6> </font>
-        Function Mapping Options </b>
+        Function Mapping Options in Releases 1.10.x</b>
+    </caption>
+
+    <tr>
+      <th>
+        Macro</th>
+      <th>
+        <code>h5cc</code> version flag and value</th>
+      <th>
+        Mapped to function<br />or struct </th>
+    </tr>
+
+    <tr> 
+      <td rowspan="2"><code>H5Acreate</code> </td>
+        <td><code>-DH5Rdereference_vers=1</code></td>
+        <td><code>H5Rdereference1</code></td>
+    </tr>
+    <tr> 
+        <td><code>-DH5Rdereference_vers=2</code></td>
+        <td><code>H5Rdereference2</code></td>
+    </tr>
+
+    <tr> 
+      <td rowspan="2"><code>H5Fget_info</code> </td>
+        <td><code>-DH5Fget_info_vers=1</code></td>
+        <td><code>H5Fget_info1</code>
+            <br />
+            with struct <code>H5F_info1_t</code></td>
+    </tr>
+    <tr> 
+        <td><code>-DH5Fget_info_vers=2</code></td>
+        <td><code>H5Fget_info2</code>
+            <br />
+            with struct <code>H5F_info2_t</code></td>
+    </tr>
+    </table>
+</div>
+
+<p>
+At release 1.8.0, the API compatibility macros, 
+function mapping compile-time version flags and values,
+and corresponding versioned functions listed in the 
+following table were introduced.
+If the application being compiled to run with any 1.10.x release
+was written to use any 1.6.x release of HDF5, 
+you must also consider these macros and mapping options.
+
+<div align=center>
+<table border="1" cellpadding="3" width="90%">
+    <caption>
+        <b>Table 4: <font size=6> </font>
+        Function Mapping Options in Releases 1.8.x</b>
     </caption>
 
     <tr>
@@ -480,7 +609,7 @@ and the corresponding version-numbered functions are as indicated:
       <th>
         <code>h5cc</code> version flag and value
       <th>
-        Mapped To function 
+        Mapped to function<br />or struct </th>
       </th>
 
     <tr> 
@@ -495,9 +624,13 @@ and the corresponding version-numbered functions are as indicated:
       <td rowspan="2"><code>H5Aiterate</code> 
         <td><code>-DH5Aiterate_vers=1</code>
         <td><code>H5Aiterate1</code>
+            <br />
+            with struct <code>H5A_operator1_t</code></td>
     <tr> 
         <td><code>-DH5Aiterate_vers=2</code>
         <td><code>H5Aiterate2</code>
+            <br />
+            with struct <code>H5A_operator2_t</code></td>
 
     <tr> 
       <td rowspan="2"><code>H5Dcreate</code> 
@@ -556,12 +689,32 @@ and the corresponding version-numbered functions are as indicated:
         <td><code>H5Eget_auto2</code>
 
     <tr> 
+      <td rowspan="2"><code>H5E_auto_t</code>
+            <br />
+            Struct for <code>H5Eset_auto</code> 
+            <br />
+            and <code>H5Eget_auto</code> 
+        <td><code>-DH5E_auto_t_vers=1</code>
+        <td><code>H5E_auto1_t</code>
+    <tr> 
+        <td><code>-DH5E_auto_t_vers=2</code>
+        <td><code>H5E_auto2_t</code>
+
+    <tr> 
       <td rowspan="2"><code>H5Ewalk</code> 
         <td><code>-DH5Ewalk_vers=1</code>
         <td><code>H5Ewalk1</code>
+            <br />
+            with callback <code>H5E_walk1_t</code>
+            <br />
+            and struct <code>H5E_error1_t</code></td>
     <tr> 
         <td><code>-DH5Ewalk_vers=2</code>
         <td><code>H5Ewalk2</code>
+            <br />
+            with callback <code>H5E_walk2_t</code>
+            <br />
+            and struct <code>H5E_error2_t</code></td>
 
     <tr> 
       <td rowspan="2"><code>H5Gcreate</code> 
@@ -650,6 +803,16 @@ and the corresponding version-numbered functions are as indicated:
     <tr> 
         <td><code>-DH5Topen_vers=2</code>
         <td><code>H5Topen2</code>
+
+    <tr> 
+      <td rowspan="2"><code>H5Z_class_t</code> 
+            <br \>
+            Struct for <code>H5Zregister</code>
+        <td><code>-DH5Z_class_t_vers=1</code>
+        <td><code>H5Z_class1_t</code>
+    <tr> 
+        <td><code>-DH5Z_class_t_vers=2</code>
+        <td><code>H5Z_class2_t</code>
 </table>
 </div>
 
@@ -657,105 +820,124 @@ and the corresponding version-numbered functions are as indicated:
 See the 
 <a href="RM_H5Front.html">HDF5 Reference Manual</a> 
 for complete descriptions of all API compatibility macros and 
-version-numbered functions 
-shown in Table 3.
+versioned functions shown in Table 3 (and Table 4, if the application 
+in question was written for a 1.6.x version of HDF5).
 <p>
-It is possible to specify multiple function mappings for a single application build:
+It is possible to specify multiple function mappings for a single 
+application build:
 <ul>
-<code> h5cc ... -DH5Gcreate_vers=1 -DH5Dcreate_vers=2...</code>
+<code> h5cc ... -DH5Rdereference_vers=1 -DH5Fget_info_vers=2 ...</code>
 </ul>
-As a result of the function mappings in this compile example, 
-all occurrences of the macro  H5Gcreate will be mapped to H5Gcreate1, and
-all occurrences of the macro H5Dcreate will be mapped to H5Dcreate2 for the
-application being built.  
-<p>
-The function mappings can be used to guarantee that a given
+As a result of the function and struct mappings in this compile example, 
+all occurrences of the macro <code>H5Rdereference</code> 
+will be mapped to <code>H5Rdereference1</code> and 
+all occurrences of the macro <code>H5Fget_info</code> 
+will be mapped to <code>H5Fget_info2</code>
+for the application being built.  
+<p>
+The function and struct mappings can be used to guarantee that a given
 API compatibility macro will be mapped to the desired underlying function
-version regardless of the library or application mappings.
+or struct version regardless of the library or application mappings.
 In cases where an application may benefit greatly from features offered by
 some of the later APIs, or must continue to use some earlier API versions for
 compatibility reasons, this fine-grained control may be very important.
 
 <p>
-As noted earlier, the function mappings can only reference version-numbered
-functions that are included in the HDF5 library,
+As noted earlier, the function mappings can only reference versioned
+functions that are included in the HDF5 Library,
 as determined by the configure flag used to build the library.   
-For example, if the HDF5 library being linked with the application was built 
+For example, if the HDF5 Library being linked with the application was built 
 with the <code>--disable-deprecated-symbols</code> option, version 1 of the 
 underlying functions would not be available, and the example above 
-that defined <code>H5Gcreate_ver=1</code> would not be supported.
+that defined <code>H5Rdereference_ver=1</code> would not be supported.
 
 <p>
 The function mappings do not negate any available functions.
-If <code>H5Gcreate1</code> is available in the installed version of the
+If <code>H5Rdereference1</code> is available in the installed version of the
 HDF5 Library, 
 and the application was not compiled with the 
 <code>-DH5_NO_DEPRECATED_SYMBOLS</code> flag,
-the function <code>H5Gcreate1</code> will remain available to 
-the application through its version-numbered name.
-Similarly, <code>H5Gcreate2</code> will remain available to the 
-application as <code>H5Gcreate2</code>.
-The function mapping version flag <code>H5Gcreate_vers</code> 
+the function <code>H5Rdereference1</code> will remain available to 
+the application through its versioned name.
+Similarly, <code>H5Rdereference2</code> will remain available to the 
+application as <code>H5Rdereference2</code>.
+The function mapping version flag <code>H5Rdereference_vers</code> 
 only controls the mapping of the API compatibility macro
-<code>H5GCreate</code> to one of the two available functions.
+<code>H5Rdereference</code> to one of the two available functions.
+<p>
+This can be especially useful in any case where the programmer does not have
+direct control over global macro definitions, such as when writing code meant 
+to be copied to multiple applications or when writing code in a header file.
 
 <h3>Compatibility Macros in HDF5 1.6.8 and Later</h3>
-A series of similar compatibility macros have been introduced into
+A series of similar compatibility macros were introduced into
 the release 1.6 series of the library, starting with release 1.6.8.
-These macros simply alias the "1" version functions listed above,
-as well as the typedefs not listed, to their original non-numbered names.
-<p>
-This allows users to write code that can be used with any version of the
-library since 1.6.8 and any library compilation options except
-<code>H5_NO_DEPRECATED_SYMBOLS</code>, by always using the "1" version of
-versioned functions and types.  For example, <code>H5Gcreate1</code> will
-always be interpreted in exactly the same manner by any version of the library
-since 1.6.8.
-<p>
-This can be especially useful in any case where the programmer does not have
-direct control over global macro definitions, such as when writing code meant to
-be copied to multiple applications or when writing code in a header file.
+These macros simply alias the ‘1’ version functions, callbacks, 
+and typedefs listed above to their original non-numbered names.
+<p>
+These macros were strictly a forward-looking feature at that time; 
+they were not necessary for compatibility in 1.6.x.
+These macros were created at that time to enable writing code 
+that could be used with any version of the library after 1.6.8 
+and any library compilation options except
+<code>H5_NO_DEPRECATED_SYMBOLS</code>, by always using the ‘1’ 
+version of versioned functions and types.  
+For example, <code>H5Dopen1</code> will always be interpreted 
+in exactly the same manner by any version of the library since 1.6.8.
 
 <h3>Common Use Case</h3>
 
 A common scenario where the API compatibility macros may be helpful
-is the migration of an existing application to HDF5 Release 1.8.0.
+is the migration of an existing application to HDF5 Release 1.10.0.
 An incremental migration plan is outlined here:
 
 <ol>
 <li>
-Build the HDF5 library without specifying any library mapping <code>configure</code> flag.
-In this default mode, both 1.6.x and 1.8.x versions of the underlying functions are available,
-and the API compatibility macros will be mapped to the 1.8.x version-numbered functions.  
-For example, <code>H5Gcreate</code> will be mapped to <code>H5Gcreate2</code>.
+Build the HDF5 Library without specifying any library mapping 
+<code>configure</code> flag.
+In this default mode, the 1.6.x, 1.8.x, and 1.10.x versions of the 
+underlying functions are available, and the API compatibility macros 
+will be mapped to the 1.10.x versioned functions.  For example, 
+<code>H5Rdereference</code> will be mapped to <code>H5Rdereference2</code>
+and <code>H5Gcreate</code> will be mapped to <code>H5Gcreate2</code>.
 <p>
 <li>
-Compile the application with the <code>-DH5_USE_16_API</code> application mapping option,
-and link with the HDF5 library built in step 1.   
+Compile the application with the <code>-DH5_USE_18_API</code> application 
+mapping option if it was written for use with an HDF5 Release 1.8.x library
+(or with <code>-DH5_USE_16_API</code> if it was written for use with 1.6.x)
+and link with the HDF5 Library built in step 1.   
 No changes should be required to build the application.  
-The API compatibility macros, for example <code>H5Gcreate</code>, replace the
-actual function names that were used in versions of the library prior to 1.8.0.  
-Because the application mapping overrides the library mapping,
-the macros will all be mapped to the 1.6.x versions of the functions.
+The API compatibility macros, for example <code>H5Rdereference</code>, 
+replace the actual function names that were used in versions of the library 
+prior to 1.10.0.  
+Because the application mapping overrides the library mapping, the macros 
+will all be mapped to the 1.8.x (or 1.6.x) versions of the functions.
 <p>
 <li>
-Remap one API compatibility macro at a time (or sets of macros), to use the 1.8.x versions. 
-At each stage, use the function mappings to map the macros being worked on to the
-1.8.x versions.   For example, use the <code>-DH5Gcreate_vers=2</code> version flag setting
-to remap the <code>H5Gcreate</code> macro to <code>H5Gcreate2</code>, the 1.8.x version.
-During this step, the application code will need to be modified to change the calling parameters
-used with the API compatibility macros to match the number and type of the 1.8.x version-numbered 
-functions.  The macro name, for example <code>H5Gcreate</code>, should continue to be used in the code,
-to allow for possible re-mappings to later version-numbered functions in a future release.
+Remap one API compatibility macro at a time (or sets of macros), 
+to use the 1.10.x versions. 
+At each stage, use the function mappings to map the macros being worked on 
+to the 1.10.x versions.   
+For example, use the <code>-DH5Rdereference_vers=2</code> 
+version flag setting to remap the <code>H5Rdereference</code> macro to 
+<code>H5Rdereference2</code>, the 1.10.x version.
+<p>
+During this step, the application code will need to be modified to change 
+the calling parameters used with the API compatibility macros 
+to match the number and type of the 1.10.x versioned functions.  
+The macro name, for example <code>H5Rdereference</code>, should continue 
+to be used in the code, to allow for possible re-mappings 
+to later versioned functions in a future release.
 <p>
 <li>
-After all macros have been migrated to the 1.8.x version-numbered functions in step 3, 
-compile the application without any application or function mappings.  
+After all macros have been migrated to the 1.10.x versioned functions in 
+step 3, compile the application without any application or function mappings.  
 This build uses the library mappings set in step 1, and maps
-API compatibility macros to the 1.8.x versions.
+API compatibility macros to the 1.10.x versions.
 <p>
 <li>
-Finally, compile the application with the application mapping <code>-DH5_NO_DEPRECATED_SYMBOLS</code>,
+Finally, compile the application with the application mapping 
+<code>-DH5_NO_DEPRECATED_SYMBOLS</code>,
 and address any failures to complete the application migration process.    
 </ol>
 
@@ -821,7 +1003,7 @@ In the
 
 <SCRIPT LANGUAGE="JAVASCRIPT">
 <!--
-document.writeln("Last modified: 13 January 2012");
+document.writeln("Last modified: 16 March 2016");
 -->
 </SCRIPT>
 
diff --git a/html/RM/H5D/H5Dflush.htm b/html/RM/H5D/H5Dflush.htm
new file mode 100644
index 0000000..8a2c741
--- /dev/null
+++ b/html/RM/H5D/H5Dflush.htm
@@ -0,0 +1,128 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dflush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Dataset-Flush">H5Dflush</a></dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Dflush(<em>hid_t</em> dataset_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+        <dd>Flushes all buffers associated with a dataset to disk.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+        <dd><code>H5Dflush</code> causes all buffers associated with a
+        dataset to be immediately flushed to disk without removing the
+        data from the cache.  
+    </dd></dt><br />
+
+<dt><strong>Note:</strong>
+        <dd>HDF5 does not possess full control over buffering.
+        <code>H5Dflush</code> flushes the internal HDF5 buffers and then 
+        asks the operating system (the OS) to flush the system buffers for the 
+        open files.  After that, the OS is responsible for ensuring that
+        the data is actually flushed to disk.
+    </dd></dt><br />
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="bottom" width="15%"><code><em>hid_t</em> dataset_id   </code></td>
+            <td valign="bottom" width="85%">IN: Identifier of the dataset 
+                to be flushed.</td></tr>
+        </table></dd>
+    </dt><br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+
+<br />
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5D/H5Drefresh.htm b/html/RM/H5D/H5Drefresh.htm
new file mode 100644
index 0000000..b9d0b29
--- /dev/null
+++ b/html/RM/H5D/H5Drefresh.htm
@@ -0,0 +1,125 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Drefresh" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Dataset-Refresh">H5Drefresh</a>
+    </dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Drefresh(<em>hid_t</em> dataset_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Refreshes all buffers associated with a dataset.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Drefresh</code> causes all buffers associated with a
+        dataset to be cleared and immediately re-loaded with updated 
+        contents from disk.
+        </dd><br />
+    <dd>This function essentially closes the dataset, evicts all metadata 
+        associated with it from the cache, and then re-opens the dataset. 
+        The reopened dataset is automatically re-registered with the same 
+        identifier.
+    </dd></dt><br />
+
+<dt><strong>Parameters:</strong>
+    <ul><table width="100%">
+        <tr>
+            <td valign="top" width="15%"><code><em>hid_t</em> dataset_id   </code></td>
+            <td valign="top">IN: Identifier of the dataset 
+                to be refreshed.</td></tr>
+    </table></ul>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5F/H5Fare_mdc_flushes_disabled.htm b/html/RM/H5F/H5Fare_mdc_flushes_disabled.htm
new file mode 100644
index 0000000..d8a9041
--- /dev/null
+++ b/html/RM/H5F/H5Fare_mdc_flushes_disabled.htm
@@ -0,0 +1,154 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fare_mdc_flushes_disabled" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-AreMdcFlushesDisabled">H5Fare_mdc_flushes_disabled</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>htri_t</em> H5Fare_mdc_flushes_enabled(
+              <em>hid_t</em> file_id,
+              <em>hbool_t</em> *are_disabled
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Determines if flushes have been globally disabled for a file’s 
+    metadata cache. </dd>
+    <br />
+
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+    <code>H5Xflush()</code> functions can be used to control the flushing of 
+    entries from a file’s metadata cache. Metadata cache entries can 
+    be controlled at both the individual HDF5 object level (datasets, groups, 
+    committed datatypes) and the entire metadata cache level. 
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>
+    Only HDF5 file identifiers (obtained from <code>H5Fopen()</code> or 
+    <code>H5Fcreate()</code>) may be passed to this function. To determine 
+    the enabled/disabled state of metadata flushes for individual HDF5 
+    objects, use <code>H5Oare_mdc_flushes_disabled</code> instead.
+
+    <p>Passing in a <code>hid_t</code> identifier that represents any other 
+    HDF5 entity is considered an error. </p> 
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> file_id</code></td>
+        <td width="80%">IN: An HDF5 file identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *are_disabled   </code></td>
+        <td>OUT: Flushes enabled/disabled.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>
+    <code>are_disabled</code> will be set to TRUE if the file’s 
+    metadata cache has been set to globally prevent flushes via 
+    <code>H5Fdisable_mdc_flushes</code> and FALSE if it is not.
+
+    <p>Returns a non-negative value if successful; otherwise returns a 
+    negative value.</p>
+    </dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5F/H5Fdisable_mdc_flushes.htm b/html/RM/H5F/H5Fdisable_mdc_flushes.htm
new file mode 100644
index 0000000..2429150
--- /dev/null
+++ b/html/RM/H5F/H5Fdisable_mdc_flushes.htm
@@ -0,0 +1,156 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fdisable_mdc_flushes" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-DisableMdcFlushes">H5Fdisable_mdc_flushes</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fdisable_mdc_flushes(
+              <em>hid_t</em> file_id
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Globally prevents dirty metadata entries from being flushed from the 
+    metadata cache to storage. </dd>
+    <br />
+
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+    <code>H5Xflush()</code> functions can be used to control the flushing 
+    of entries from a file’s metadata cache. Metadata cache entries 
+    can be controlled at both the individual HDF5 object level (datasets, 
+    groups, committed datatypes) and the entire metadata cache level. This 
+    function prevents a file’s dirty metadata entries 
+    from being flushed from the cache by the usual cache eviction/flush 
+    policy. Instead, users must manually flush the cache or entries 
+    for individual objects via <code>H5F/H5D/H5G/H5T/H5Oflush()</code> calls. 
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>
+    Only HDF5 file identifiers (obtained from <code>H5Fopen()</code> or 
+    <code>H5Fcreate()</code>) may be passed to this function. To restore 
+    flushes on individual HDF5 objects, use H5Oenable_mdc_flushes. </p>
+
+    <p>Passing in a <code>hid_t</code> identifier that represents any other 
+    HDF5 entity is considered an error. </p>
+
+    <p>Misuse of this function can cause the cache to exhaust available 
+    memory. </p>
+
+    <p>Prevention only pertains to new or dirty metadata entries. Clean 
+    entries can still be evicted from the cache. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> file_id   
+            </code></td>
+        <td width="85%">IN: An HDF5 file identifier.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+
+
+<br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5F/H5Fenable_mdc_flushes.htm b/html/RM/H5F/H5Fenable_mdc_flushes.htm
new file mode 100644
index 0000000..54c868e
--- /dev/null
+++ b/html/RM/H5F/H5Fenable_mdc_flushes.htm
@@ -0,0 +1,154 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fenable_mdc_flushes" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-EnableMdcFlushes">H5Fenable_mdc_flushes</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fenable_mdc_flushes(
+              <em>hid_t</em> file_id
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Returns a file’s metadata cache to the standard eviction and 
+    flushing algorithm. </dd>
+    <br />
+
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+    <code>H5Xflush()</code> functions can be used to control the flushing 
+    of entries from a file’s metadata cache. Metadata cache entries 
+    can be controlled at both the individual HDF5 object level (datasets, 
+    groups, committed datatypes) and the entire metadata cache level. This 
+    function allows a file’s dirty metadata entries to be 
+    flushed from the cache by the usual cache eviction/flush policy. 
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>
+    Only HDF5 file identifiers (obtained from <code>H5Fopen()</code> or 
+    <code>H5Fcreate()</code>) may be passed to this function. To restore 
+    flushes on individual HDF5 objects, use <code>H5Oenable_mdc_flushes</code> 
+    instead. 
+
+    <p>Passing in a <code>hid_t</code> identifier that represents any other 
+    HDF5 entity is considered an error. </p>
+
+    <p>A file will be returned to the default flushing algorithm when closed.</p>
+
+    <p>A file’s cache entries will not necessarily be flushed when the 
+    cache is returned to the default algorithm. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="yop">
+        <td width="15%"><code><em>hid_t</em> file_id   
+            </code></td>
+        <td width="85%">IN: An HDF5 file identifier.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+
+
+<br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5F/H5Fget_free_sections.htm b/html/RM/H5F/H5Fget_free_sections.htm
index fa2da7b..960d392 100644
--- a/html/RM/H5F/H5Fget_free_sections.htm
+++ b/html/RM/H5F/H5Fget_free_sections.htm
@@ -1,30 +1,32 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.                                               *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "H5Fget_free_sections" -->
 <hr>
 <dl>
 
   <dt><div align=right><font color=999999 size=-1><i>
-      Last modified: 5 April 2012
+      Last modified: 4 December 2015
       </i></font></div>
 
   <dt><strong>Name:</strong> <a name="File-GetFreeSections">H5Fget_free_sections</a>
@@ -37,6 +39,7 @@
             <em>H5F_sect_info_t * </em><code>sect_info</code>
         )
 
+  <p>
   <dt><strong>Purpose:</strong>
     <dd>Retrieves free-space section information for a file.
 
@@ -45,8 +48,8 @@
     <dd><code>H5Fget_free_sections</code> 
       retrieves free-space section information for the free-space manager with
       <code>type</code> that is associated with file <code>fcpl_id</code>.
-      If <code>type</code> is H5FD_MEM_DEFAULT, this routine retrieves free-space 
-      section information for all the free-space managers in the file.
+      If <code>type</code> is H5FD_MEM_DEFAULT, this routine retrieves free-space section
+      information for all the free-space managers in the file.
       <p>
       This routine retrieves free-space section information for <code>nsects</code> 
       sections or at most the maximum number of sections in the specified 
@@ -56,8 +59,7 @@
       sections for the specified free-space manager will be returned.  
       Users can then allocate space for entries
       in <code>sect_info</code>, each of which is defined as an 
-      <code>H5F_sect_info_t</code> struct 
-      (see the “Parameters:” section below).
+      <code>H5F_sect_info_t</code> struct (see <strong>Parameters</strong> section).
       <p>
 
   <p>
@@ -101,7 +103,7 @@
             </table>
             <p>
             There are other file memory allocation types that are mapped 
-	    to the above six basic types.  
+            to the above six basic types.  
             The <code><em>H5F_mem_t</em></code> <small>ENUM</small>
             is fully described in <a href="../examples/H5F_mem_t.html">
             <code>H5F_mem_t.html</code></a>.
@@ -121,32 +123,33 @@
             <a href="H5F_sect_info_t.html">
             <code><em>H5F_sect_info_t</em></code></a>
             in which the free-space section information is to be returned.
-	    <p>
-	    An <em>H5F_sect_info_t</em> struct is defined as follows
-	    (in <code>H5Fpublic.h</code>):
-	<pre>
-typedef struct H5F_sect_info_t {
-    haddr_t           addr;	/* address of the free-space section */
-    hsize_t           size;	/* size of the free-space section */
-} H5F_sect_info_t; </pre>
+            <p>
+            An <em>H5F_sect_info_t</em> struct is defined as follows
+            (in <code>H5Fpublic.h</code>):
+        <pre>
+        typedef struct H5F_sect_info_t {
+            haddr_t     addr;     /* address of the     */
+                                  /* free-space section */
+            hsize_t     size;     /* size of the        */
+                                  /* free-space section */
+        } H5F_sect_info_t;
+        </pre>
 
     </table>
 
   <p>
   <dt><strong>Returns:</strong>
 
-    <dd>Returns the number of free-space sections for the 
-	specified free-space manager in the file;
+    <dd>Returns the number of free-space sections for the specified free-space manager
+	in the file;
         otherwise returns a negative value.
 
   <p>
-
-  <p>
   <dt><strong>Failure Modes:</strong>
     <dd>This routine will fail when the following is true:
         <ul>
             <li>The library fails to retrieve the file creation property list 
-                <code>fcpl_id</code>.
+                associated with <code>fcpl_id</code>.
             <li>If the parameter <code>sect_info</code> is nonnull, 
                 but the parameter <code>nsects</code> is equal to 0.
             <li>The library fails to retrieve free-space section information 
@@ -158,14 +161,14 @@ typedef struct H5F_sect_info_t {
   <dt><strong>Example Usage:</strong>
 
     <dd>The first example shows that the first call to 
-	<code>H5Fget_free_sections()</code> returns the total number of 
-        free-space sections in <code>nsects</code> for all
-	the free-space managers in the file that is associated with 
-        <code>fcpl</code>.
+        <code>H5Fget_free_sections()</code> returns the total number of 
+        free-space sections in <code>nsects</code> for all the free-space 
+	managers in the file that is associated with <code>fcpl</code>.
 	The second call to <code>H5Fget_free_sections()</code> retrieves 
 	free-space section information in <code>sect_info</code>
 	for <code>nsects</code> sections.
 	The value in <code>ret</code> is the same as <code>nsects</code>.
+
 <dir><pre>
 nsects = H5Fget_free_sections(fcpl, H5FD_MEM_DEFAULT, 0, NULL);
 :
@@ -176,16 +179,17 @@ ret = H5F_get_free_sections(fcpl, H5FD_MEM_DEFAULT, nsects, sect_info);
     <p>
 
     <dd>The second example shows that the first call to 
-        <code>H5Fget_free_sections()</code>
-	returns the total number of free-space sections in <code>nsects</code> 
-	for the <code>H5FD_MEM_SUPER</code> free-space manager in the file 
-	that is associated with <code>fcpl</code>.
-	Even though there are <code>nsects</code> sections for the specified 
-	free-space manager, the second call to 
+        <code>H5Fget_free_sections()</code> returns the total number of 
+        free-space sections in <code>nsects</code> for the
+	<code>H5FD_MEM_SUPER</code> free-space manager in the file that 
+	is associated with <code>fcpl</code>.
+	Even though there are <code>nsects</code> sections for the 
+	specified free-space manager, the second call to 
         <code>H5Fget_free_sections()</code> retrieves 
 	free-space section information in <code>sect_info</code>
 	for <code>nsects-1</code> sections as requested.
 	The value in <code>ret</code> is the same as <code>nsects</code>.
+
 <dir><pre>
 nsects = H5Fget_free_sections(fcpl, H5FD_MEM_SUPER, 0, NULL);
 :
@@ -196,15 +200,16 @@ ret = H5F_get_free_sections(fcpl, H5FD_MEM_SUPER, nsects-1, sect_info);
   <p>
 
     <dd>The third example shows that the first call to 
-	<code>H5Fget_free_sections()</code> returns the total number of 
-        free-space sections in <code>nsects</code> for
-	the <code>H5FD_MEM_BTREE</code> free-space manager in the file that 
+        <code>H5Fget_free_sections()</code> returns the total number of 
+        free-space sections in <code>nsects</code> for the
+	<code>H5FD_MEM_BTREE</code> free-space manager in the file that 
 	is associated with <code>fcpl</code>.
 	Even though the second call to <code>H5Fget_free_sections()</code>
 	requests <code>nsects+1</code> sections,
 	the routine retrieves free-space section information in 
-	<code>sect_info</code> for only <code>nsects</code> sections.
+        <code>sect_info</code> for only <code>nsects</code> sections.
 	The value in <code>ret</code> is the same as <code>nsects</code>.
+
 <dir><pre>
 nsects = H5Fget_free_sections(fcpl, H5FD_MEM_BTREE, 0, NULL);
 :
@@ -212,7 +217,7 @@ nsects = H5Fget_free_sections(fcpl, H5FD_MEM_BTREE, 0, NULL);
 :
 ret = H5F_get_free_sections(fcpl, H5FD_MEM_BTREE, nsects+1, sect_info);
 </pre></dir>
-
+  <p>
 
 <!--__ *** FORTRAN90 INTERFACE  **********************************  -->
 <!--__ When the Fortran90 interface is complete, replace this       -->
@@ -221,16 +226,77 @@ ret = H5F_get_free_sections(fcpl, H5FD_MEM_BTREE, nsects+1, sect_info);
 <!--__ See the file h5fortran_f_insert.htm for a template and       -->
 <!--__ instructions.                                                -->
 <!--__ ***********************************************************  -->
-
+  <p>
 
   <p>
   <dt><strong>See Also:</strong>
-    <dd>
-        <a href="../html/RM/Tools.html#h5stat"><code>h5stat</code></a>
+
+<!-- FOR FINAL RM INTEGRATION
+
+    <dd><a href="RM_H5P.html#Property-SetFileSpace">
+        <code>H5Pset_file_space</code></a>
+        <br />
+        <a href="RM_H5P.html#Property-GetFileSpace">
+        <code>H5Pget_file_space</code></a>
         <p>
-        <a href="../../html/Advanced.html"><cite>HDF5 Guide to File Space 
-        Management</cite></a> ??????? Update this link when the 
-        document has been published. ???????</p>
+
+        <a href="RM_H5F.html#File-GetFreeSections">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetFreespace">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetInfo">
+        <code>H5Fget_info</code></a>
+        <p>
+
+        <a href="Tools.html#h5repack"><code>h5repack</code></a>
+        <br />
+        <a href="Tools.html#h5dump"><code>h5dump</code></a>
+        <br />
+        <a href="Tools.html#h5stat"><code>h5stat</code></a>
+        <p>
+
+        <a href="../?????/FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+END FINAL RM INTEGRATION -->
+
+<!-- FOR docNewFeatures ONLY                                -->
+
+    <dd><a href="H5Pset_file_space.htm">
+        <code>H5Pset_file_space</code></a>
+        <br />
+        <a href="H5Pget_file_space.htm">
+        <code>H5Pget_file_space</code></a>
+        <p>
+
+<!--
+        <a href="H5Fget_free_sections.htm">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+-->
+        <a href="H5Fget_freespace.htm">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="H5Fget_info.htm">
+        <code>H5Fget_info</code></a>
+        <p>
+
+        <a href="h5repack.htm"><code>h5repack</code></a>
+        <br />
+        <a href="h5dump.htm"><code>h5dump</code></a>
+        <br />
+        <a href="h5stat.htm"><code>h5stat</code></a>
+        <p>
+
+        <a href="FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+<!-- END docNewFeatures ONLY                                -->
+
+    </dd></dt>
+
 
   <p>
   <dt><strong>History:</strong>
@@ -242,17 +308,34 @@ ret = H5F_get_free_sections(fcpl, H5FD_MEM_BTREE, nsects+1, sect_info);
             <strong>Change</strong></td>
         </tr>
         <tr>
-          <td valign="top">*.**.**</td>
+          <td valign="top">1.10.0</td>
           <td valign="top">
             C function introduced in this release.</td>
         </tr>
+
+<!--__ ***********************************************************  -->
+<!--__ If adding a new C functions, include the following 5 lines,  -->
+<!--__ replacing '*.**.**' with the appropriate release number,     -->
+<!--__ but otherwise without modification.                          -->
+<!--__ ***********************************************************  -->
+<!--__ If adding a new Fortran subroutine, include the following    -->
+<!--__ 5 lines, replacing '*.**.**' with the appropriate release    -->
+<!--__ number, but otherwise without modification.                  -->
+<!--__ ***********************************************************  -->
+<!--
         <tr>
           <td valign="top">*.**.**</td>
           <td valign="top">
             Fortran90 subroutine introduced in this release.</td>
         </tr>
-        </table>
+-->
 
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 3 lines; they close the "History:"    -->
+<!--__ table and the function entry.                                -->
+<!--__ ***********************************************************  -->
+        </tr>
+        </table>
 </dl>
 
 
diff --git a/html/RM/H5F/H5Fget_freespace.htm b/html/RM/H5F/H5Fget_freespace.htm
index 22e5637..1a2d817 100644
--- a/html/RM/H5F/H5Fget_freespace.htm
+++ b/html/RM/H5F/H5Fget_freespace.htm
@@ -1,33 +1,48 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "H5Fget_freespace" -->
 <hr>
 <dl>
-<dt><strong>Name:</strong> <a name="File-GetFreespace">H5Fget_freespace</a>
-<dt><strong>Signature:</strong>
-    <dd><em>hssize_t </em><code>H5Fget_freespace</code>(<em>hid_t</em> <code>file_id</code>)
-<dt><strong>Purpose:</strong>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+      Last modified: 15 October 2003
+      </i></font></div>
+
+  <dt><strong>Name:</strong> <a name="File-GetFreeSpace">H5Fget_freespace</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>hssize_t </em><code>H5Fget_freespace</code>(
+            <em>hid_t</em> <code>file_id</code>
+        )
+
+  <p>
+  <dt><strong>Purpose:</strong>
         <dd>Returns the amount of free space in a file.
-<dt><strong>Description:</strong>
+
+  <p>
+  <dt><strong>Description:</strong>
     <dd>Given the identifier of an open file, <code>file_id</code>, 
         <code>H5Fget_freespace</code> returns the amount of space that is
         unused by any objects in the file.
@@ -36,16 +51,23 @@
         file open or create until that file is closed, so this routine will
         only report the free space that has been created during that
         interval.
-<dt><strong>Parameters:</strong>
-    <ul><table>
+
+  <p>
+  <dt><strong>Parameters:</strong>
+    <dd><table>
         <tr>
-            <td valign="top"><em>hid_t</em> <code>file_id    </code></td>
-            <td valign="top">IN: Identifier of a currently-open HDF5 file</td></tr>
-    </table></ul>
-<dt><strong>Returns:</strong>
+            <td valign="top"><em>hid_t</em> <code>file_id   </code></td>
+            <td valign="top">IN: Identifier of a currently-open HDF5 file</td>
+        </tr>
+        </table></dd>
+
+  <p>
+  <dt><strong>Returns:</strong>
     <dd>Returns the amount of free space in the file if successful;
         otherwise returns a negative value.
-<dt><strong>Fortran90 Interface:</strong> h5fget_freespace_f
+
+  <p>
+  <dt><strong>Fortran90 Interface:</strong> h5fget_freespace_f
     <dd>
     <pre>
 SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
@@ -58,24 +80,19 @@ SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
 END SUBROUTINE h5fget_freespace_f 
     </pre>
 
-        <!--<dt><strong>Non-C API(s):</strong>
-        <dd>
-        
-        <img src="Graphics/Java.gif"> 
-        <img src="Graphics/C++.gif">
-        -->
-<dt><strong>History:</strong>
-	<ul><table width="90%">
+  <p>
+  <dt><strong>History:</strong>
+    <dd><table width="90%">
         <tr>
-		  <td valign="top" align="left" width="10%">
-		    <strong>Release</strong>    </td>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
           <td valign="top" align="left">
-		    <strong>C</strong></td></tr>
+            <strong>Change</strong></td></tr>
         <tr>
-		  <td valign="top">1.6.1</td>
+          <td valign="top">1.6.1</td>
           <td valign="top">
-		    Function introduced in this release.</td></tr>
-    </table></ul>
+            Function introduced in this release.</td></tr>
+    </table></dd>
 </dl>
 
 
diff --git a/html/RM/H5F/H5Fget_info.htm b/html/RM/H5F/H5Fget_info.htm
index f23d486..bf07a49 100644
--- a/html/RM/H5F/H5Fget_info.htm
+++ b/html/RM/H5F/H5Fget_info.htm
@@ -22,116 +22,137 @@
 <!-- HEADER RIGHT "H5Fget_info" -->
 <hr>
 <dl>
-  <dt><strong>Name:</strong> <a name="File-GetInfo">H5Fget_info</a>
-  <dt><strong>Signature:</strong>
+
+<dt><div align=right><font color=999999 size=-1><i>
+    Last modified: 3 March 2016
+    </i></font></div>
+
+<dt><strong>Name:</strong> <a name="File-GetInfo">H5Fget_info</a>
+<dt><strong>Signature:</strong>
     <dd><em>herr_t</em> <code>H5Fget_info</code>(
-    <em>hid_t</em> <code>obj_id</code>, 
-    <em>H5F_info_t *</em><code>file_info</code>
+    <em>hid_t</em> <code>obj_id</code>,
+    <em>H5F_info_t</em> *<code>file_info</code>
     )
-  <p>
-  <dt><strong>Purpose:</strong>
-    <dd>Returns global information for a file.
-  <p>
-  <dt><strong>Description:</strong>
-    <dd><code>H5Fget_info</code> returns global information 
-      for the file associated with the object identifier <code>obj_id</code>
-      in the <em>H5F_info_t</em> struct named <code>file_info</code>.
+    <p>
+    <dd><em>herr_t</em> <code>H5Fget_info</code>(
+    <em>hid_t</em> <code>obj_id</code>,
+    <em>H5F_info_t</em> *<code>file_info</code>
+    )
+<p>
+<dt><strong>Purpose:</strong>
+    <dd>Opens the HDF5 object referenced.
+<p>
+<dt><strong>Description:</strong>
+    <dd><code>H5Fget_info</code> is a macro that is mapped to either
+      <a href="#File-GetInfo1"><code>H5Fget_info1</code></a> or
+      <a href="#File-GetInfo2"><code>H5Fget_info2</code></a>,
+      depending on the needs of the application.
       <p>
-      <code>obj_id</code> is an identifier for any object 
-      in the file of interest.
+      Similarly, the macro for the <code>H5F_info_t</code> struct is mapped 
+      to either <code>H5F_info1_t</code> or <code>H5F_info2_t</code></a>.
       <p>
-      An <em>H5F_info_t</em> struct is defined in <code>H5Fpublic.h</code> as follows:
-<pre>
-        typedef struct H5F_info_t {
-	    struct {
-		unsigned      vers;	
-		hsize_t	      super_size;
-		hsize_t	      super_ext_size;	
-	    } super;
-	    struct {
-		unsigned      vers;
-		hsize_t	      hdr_size;
-		hsize_t	      tot_space;
-	    } free;
-            struct {
-		unsigned      vers;
-                hsize_t       hdr_size;		
-                H5_ih_info_t  msgs_info; 
-            } sohm;
-        } H5F_info_t; 
-</pre>
-      The <em>super</em> sub-struct contains the following information:
-	<ul>
-	<li><code>vers</code> is the version # of the superblock.
-	<li><code>super_size</code> is the size of the superblock.
-        <li><code>super_ext_size</code> is the size of the superblock extension.
-	</ul>
+      Such macros are provided to facilitate application compatibility.
+      Their use and mappings are fully described in 
+      “<a href="APICompatMacros.html">API Compatibility Macros 
+      in HDF5</a>”; 
+      we urge you to read that document closely.
       <p>
-      The <em>free</em> sub-struct contains the following information:
-	<ul>
-	<li><code>vers</code> is the version # of the free-space manager.
-	<li><code>hdr_size</code> is the size of the free-space manager header.
-        <li><code>tot_space</code> is the total amount of free space in the file.
-	</ul>
+      When both the HDF5 Library and the application are built and 
+      installed with no specific compatibility flags, 
+      <code>H5Fget_info</code> is mapped to the most recent version of
+      the function, currently 
+      <a href="#File-GetInfo2"><code>H5Fget_info2</code></a>.
+      If the library and/or application is compiled for Release 1.8
+      emulation, <code>H5Fget_info</code> will be mapped to 
+      <a href="#File-GetInfo1"><code>H5Fget_info1</code></a>.
+      Since there was no <code>H5Fget_info</code> function in Release 1.6,
+      if the library and/or application is compiled for Release 1.6 
+      emulation, <code>H5Fget_info</code> will be mapped to 
+      the most recent version of the function, currently
+      <a href="#File-GetInfo2"><code>H5Fget_info2</code></a>.
+      Function-specific flags are available to override these settings 
+      on a function-by-function basis when the application is compiled. 
       <p>
-      The <em>sohm</em> sub-struct contains shared object header message
-      information as follows:
-	<ul>
-	<li><code>vers</code> is the version # of the shared object header info.
-	<li><code>hdr_size</code> is the size of the shared object header message.
-	<li><code>msgs_info</code> is an <code>H5_ih_info_t</code> struct defined
-	    in <code>H5public.h</code> as follows:
-<pre>
-        typedef struct H5_ih_info_t {
-            hsize_t     index_size;     
-            hsize_t     heap_size;
-        } H5_ih_info_t;
-</pre>
-	<ul>
-	<li><code>index_size</code> is the summed size of all the
-	    shared object header indexes.  Each index might be either a B-tree or a list.
-	<li><code>heap_size</code> is the size of the heap.
-	</ul>
-      </ul>
-      </p>
-  <p>
-  <dt><strong>Parameters:</strong>
-    <dd><table>
-      <tr>
-        <td valign="top"><em>hid_t</em> <code>obj_id</code>, 
-        </td>
-        <td valign="top">IN: Object identifier for any object in the file.
-        </td></tr>
-      <tr>
-        <td valign="top"><em>H5F_info_t *</em><code>file_info  </code>
-        </td>
-        <td valign="top">OUT: Struct containing global file information.
-        </td></tr>
-    </table>
-  <p>
-  <dt><strong>Returns:</strong>
-    <dd>Returns a non-negative value if successful;
-        otherwise returns a negative value.
+      Specific compile-time compatibility flags and the resulting 
+      mappings are as follows:
+
+      <dir>
+      <table border=0 cellpadding=4>
+        <tr valign=top align=left> 
+          <th>Compatibility setting</th>
+          <th><code>H5Fget_info</code> and 
+              <code>H5F_info_t</code> mappings</th>
+        </tr><tr valign=top align=left>
+          <td colspan=2><hr><u><a href="APICompatMacros.html#GlobalSettings">Global settings</a></u></td>
+        </tr><tr valign=top align=left>
+          <td>No compatibility flag</td>
+          <td><code>H5Fget_info2</code> and <code>H5F_info2_t</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Enable deprecated symbols</td>
+          <td><code>H5Fget_info2</code> and <code>H5F_info2_t</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Disable deprecated symbols</td>
+          <td><code>H5Fget_info2</code> and <code>H5F_info2_t</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Emulate Release 1.6 interface<code>    </code></td>
+          <td><code>H5Fget_info2</code> and <code>H5F_info2_t</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Emulate Release 1.8 interface<code> </code></td>
+          <td><code>H5Fget_info1</code> and <code>H5F_info1_t</code> </td>
+        </tr><tr valign=top align=left>
+          <td colspan=2><hr><u><a href="APICompatMacros.html#FunctionLevelSettings">Function- and struct-level macros</a></u></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5Fget_info_vers = 2</code></td>
+          <td><code>H5Fget_info2</code></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5Fget_info_vers = 1</code></td>
+          <td><code>H5Fget_info1</code></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5F_info_t_vers = 2</code></td>
+          <td><code>H5F_info2_t</code></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5F_info_t_vers = 1</code></td>
+          <td><code>H5F_info1_t</code></td>
+        </tr>
+      </table>
+      </dir>
+      
+<!-- NEW PAGE -->
   <p>
-  <dt><strong>Fortran90 Interface:</strong> <!-- h5fget_info_f -->
+<dt><strong>Fortran90 Interface:</strong> <!--h5fget_info_f-->
     <dd>None.
+
+
 <!--
-    <pre>
-  
-    </pre>
+        <?php include("H5R/h5fget_info_f_F90.htm"); ?>
+
+  <p>
+<dt><strong>Fortran2003 Interface:</strong> h5fget_info_f
+    <dd>
+
+        <?php include("H5R/h5fget_info_f_F03.htm"); ?>
 -->
+
+<!-- NEW PAGE -->
   <p>
-  <dt><strong>History:</strong>
+<dt><strong>History:</strong>
     <dd><table width="90%">
         <tr>
           <td valign="top" align="left" width="10%">
             <strong>Release</strong>    </td>
           <td valign="top" align="left">
-            <strong>C</strong></td></tr>
+            <strong>Change</strong></td></tr>
         <tr>
-          <td valign="top">1.8.0</td>
-          <td valign="top">
-            Function introduced in this release.</td></tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">The C function 
+            <code>H5Fget_info</code> and <code>H5F_info_t</code>
+            renamed to <code>H5Fget_info1</code> and <code>H5F_info1_t</code>,
+            respectively, and deprecated in this release.
+            <br>
+            The C macro <code>H5Fget_info</code>, 
+            the C function <code>H5Fget_info2</code>, 
+            and the struct <code>H5F_info2_t</code>
+            introduced in this release.</td></tr>
     </table>
 </dl>
 
diff --git a/html/RM/H5F/H5Fget_info1.htm b/html/RM/H5F/H5Fget_info1.htm
new file mode 100644
index 0000000..6ba6f46
--- /dev/null
+++ b/html/RM/H5F/H5Fget_info1.htm
@@ -0,0 +1,144 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_info" -->
+<hr>
+<dl>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+      Last modified: 4 March 2016
+      </i></font></div>
+
+  <dt><strong>Name:</strong> <a name="File-GetInfo1">H5Fget_info1</a>
+    </dt>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Fget_info1</code>(
+    <em>hid_t</em> <code>obj_id</code>, 
+    <em>H5F_info1_t *</em><code>file_info</code>
+    )
+
+  <p>
+  <dt><strong>Purpose:</strong>
+    <dd>Returns global information for a file.
+
+<p>
+<dt><strong>Notice:</Strong>
+  <dd><i>This function has been renamed from <code>H5Fget_info</code>
+      and is deprecated in favor of the macro
+      <a href="RM_H5F.html#File-GetInfo"><code>H5Fget_info</code></a>
+      or the function 
+      <a href="RM_H5F.html#File-GetInfo2"><code>H5Fget_info2</code></a>.</i>
+
+  <p>
+  <dt><strong>Description:</strong>
+    <dd><code>H5Fget_info1</code> returns global information 
+      for the file associated with the object identifier <code>obj_id</code>
+      in the <em>H5F_info1_t</em> struct named <code>file_info</code>.
+      <p>
+      <code>obj_id</code> is an identifier for any object 
+      in the file of interest.
+      <p>
+      An <em>H5F_info1_t</em> struct is defined as follows 
+      (in <code>H5Fpublic.h</code>):
+<pre>
+        typedef struct H5F_info1_t {
+            hsize_t           super_ext_size; 
+            struct {
+                hsize_t       hdr_size;      
+                H5_ih_info_t  msgs_info;      
+            } sohm;
+        } H5F_info1_t; 
+</pre>
+      <code>super_ext_size</code> is the size of the superblock extension.
+      </p>
+      <p>
+      The <em>sohm</em> sub-struct contains shared object header message
+      information:
+      <code>hdr_size</code> is the size of shared of object header messages.
+      <code>msgs_info</code> is a <code>H5_ih_info_t</code> struct 
+      containing the cumulative shared object header message index size 
+      and heap size;
+      an <em>H5_ih_info1_t</em> struct is defined as follows 
+      (in <code>H5public.h</code>):
+<pre>
+        typedef struct H5_ih_info_t {
+            hsize_t     index_size;     
+            hsize_t     heap_size;
+        } H5_ih_info_t;
+</pre>
+      <code>index_size</code> is the summed size of all of the 
+      shared of object header indexes.  
+      Each index might be either a B-tree or a list.
+      <code>heap_size</code> is the size of the heap.
+
+  <p>
+  <dt><strong>Parameters:</strong>
+    <dd><table>
+      <tr>
+        <td valign="top"><em>hid_t</em> <code>obj_id</code>, 
+        </td>
+        <td valign="top">IN: Object identifier for any object in the file.
+        </td></tr>
+      <tr>
+        <td valign="top"><em>H5F_info1_t *</em><code>file_info  </code>
+        </td>
+        <td valign="top">OUT: Struct containing global file information.
+        </td></tr>
+    </table>
+
+  <p>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+
+  <p>
+  <dt><strong>Fortran90 Interface:</strong> <!-- h5fget_info_f -->
+    <dd>None.
+<!--
+    <pre>
+  
+    </pre>
+-->
+
+  <p>
+  <dt><strong>History:</strong>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.8.0</td>
+          <td valign="top">
+            Function introduced in this release.</td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function <code>H5Fget_info</code> renamed to
+            <code>H5Fget_info1</code> 
+            and deprecated in this release.</td></tr>
+    </table>
+
+</dl>
+
+
diff --git a/html/RM/H5F/H5Fget_info2.htm b/html/RM/H5F/H5Fget_info2.htm
new file mode 100644
index 0000000..2fc142b
--- /dev/null
+++ b/html/RM/H5F/H5Fget_info2.htm
@@ -0,0 +1,157 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_info2" -->
+<hr>
+<dl>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+      Last modified: 3 March 2016
+      </i></font></div>
+
+  <dt><strong>Name:</strong> <a name="File-GetInfo2">H5Fget_info2</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Fget_info2</code>(
+            <em>hid_t</em> <code>obj_id</code>, 
+            <em>H5F_info2_t *</em><code>file_info</code>
+        )
+
+  <p>
+  <dt><strong>Purpose:</strong>
+    <dd>Returns global information for a file.
+
+  <p>
+  <dt><strong>Description:</strong>
+    <dd><code>H5Fget_info2</code> returns global information 
+      for the file associated with the object identifier <code>obj_id</code>
+      in the <em>H5F_info2_t</em> struct named <code>file_info</code>.
+      <p>
+      <code>obj_id</code> is an identifier for any object 
+      in the file of interest.
+      <p>
+      An <em>H5F_info2_t</em> struct is defined in <code>H5Fpublic.h</code> as follows:
+<pre>
+        typedef struct H5F_info2_t {
+	    struct {
+		unsigned      vers;	
+		hsize_t	      super_size;
+		hsize_t	      super_ext_size;	
+	    } super;
+	    struct {
+		unsigned      vers;
+		hsize_t	      hdr_size;
+		hsize_t	      tot_space;
+	    } free;
+            struct {
+		unsigned      vers;
+                hsize_t       hdr_size;		
+                H5_ih_info_t  msgs_info; 
+            } sohm;
+        } H5F_info2_t; 
+</pre>
+      The <em>super</em> sub-struct contains the following information:
+	<ul>
+	<li><code>vers</code> is the version number of the superblock.
+	<li><code>super_size</code> is the size of the superblock.
+        <li><code>super_ext_size</code> is the size of the superblock extension.
+	</ul>
+      <p>
+      The <em>free</em> sub-struct contains the following information:
+	<ul>
+	<li><code>vers</code> is the version number of the free-space manager.
+	<li><code>hdr_size</code> is the size of the free-space manager header.
+        <li><code>tot_space</code> is the total amount of free space in the file.
+	</ul>
+      <p>
+      The <em>sohm</em> sub-struct contains shared object header message
+      information as follows:
+	<ul>
+	<li><code>vers</code> is the version number of the shared object header 
+            information.
+	<li><code>hdr_size</code> is the size of the shared object header 
+            message.
+	<li><code>msgs_info</code> is an <code>H5_ih_info_t</code> struct 
+            defined in <code>H5public.h</code> as follows:
+<pre>
+        typedef struct H5_ih_info_t {
+            hsize_t     index_size;     
+            hsize_t     heap_size;
+        } H5_ih_info_t;
+</pre>
+	<ul>
+	<li><code>index_size</code> is the summed size of all the
+	    shared object header indexes.  Each index might be either a 
+            B-tree or a list.
+	<li><code>heap_size</code> is the size of the heap.
+	</ul>
+      </ul>
+      </p>
+
+  <p>
+  <dt><strong>Parameters:</strong>
+    <dd><table>
+      <tr>
+        <td valign="top"><em>hid_t</em> <code>obj_id</code>, 
+        </td>
+        <td valign="top">IN: Object identifier for any object in the file.
+        </td></tr>
+      <tr>
+        <td valign="top"><em>H5F_info2_t *</em><code>file_info  </code>
+        </td>
+        <td valign="top">OUT: Struct containing global file information.
+        </td></tr>
+    </table>
+
+  <p>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+
+  <p>
+  <dt><strong>Fortran90 Interface:</strong> <!-- h5fget_info_f -->
+    <dd>None.
+<!--
+    <pre>
+  
+    </pre>
+-->
+
+  <p>
+  <dt><strong>History:</strong>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function <code>H5Fget_info2</code> 
+            introduced in this release.</td></tr>
+    </table>
+</dl>
+
+
diff --git a/html/RM/H5F/H5Fget_intent.htm b/html/RM/H5F/H5Fget_intent.htm
index 9d59cc9..fc337f9 100644
--- a/html/RM/H5F/H5Fget_intent.htm
+++ b/html/RM/H5F/H5Fget_intent.htm
@@ -1,117 +1,135 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "H5Fget_intent" -->
-<hr />
-<dl>
-
-<dt><div align="right"><font color="999999" size="-1"><i>
-    Last modified: 17 March 2014
-    </i></font></div></dt>
-    <br />
-
-<dt><strong>Name:</strong> <a name="File-GetIntent">H5Fget_intent</a>
-</dt><br />
-
-<dt><strong>Signature:</strong></dt>
-    <dd><code><em>herr_t </em> H5Fget_intent(<em>hid_t</em> file_id,
-        <em>unsigned</em> *intent</code>)</dd>
-        <br />
-<dt><strong>Purpose:</strong></dt>
-    <dd>Determines the read/write or read-only status of a file.</dd>
-    <br />
-    
-<dt><strong>Description:</strong>
-    <dd>Given the identifier of an open file, <code>file_id</code>, 
-    <code>H5Fget_intent</code> retrieves the 
-    “intended access mode” flag 
-    passed with <a href="#File-Open"><code>H5Fopen</code></a> 
-	when the file was opened.
-    <br />
-    
-    <p>The value of the flag is returned in <code>intent</code>.
-    Valid values are as follows:</p>
-    
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 12 March 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="File-GetIntent">H5Fget_intent</a>
+    </dt><br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t </em> H5Fget_intent(
+              <em>hid_t</em> file_id,
+              <em>unsigned</em> *intent</code>
+        )</dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Determines the read/write or read-only status of a file.</dd>
+    <br />
+    
+<dt><strong>Description:</strong></dt>
+    <dd>Given the identifier of an open file, <code>file_id</code>, 
+    <code>H5Fget_intent</code> retrieves the 
+    “intended access mode” flag 
+    passed with <a href="#File-Open"><code>H5Fopen</code></a>
+    when the file was opened.
+    <br />
+
+    <p>The value of the flag is returned in <code>intent</code>.
+    Valid values are as follows:</p>
+
     <dir>
-    <table width="100%">
-        <tr>
-        <td width="10%"><code>H5F_ACC_RDWR</code></td>
-        <td width="90%">File was opened with read/write access.</td></tr>
-        <tr>
-        <td><code>H5F_ACC_RDONLY</code></td>
-        <td>File was opened with read-only access.</td></tr>
-        </table>
-        </dir>
+    <table width="100%">
+      <tr>
+        <td width="15%"><code>H5F_ACC_RDWR</code></td>
+        <td width="85%">File was opened with read/write access.</td></tr>
+      <tr>
+        <td><code>H5F_ACC_RDONLY</code></td>
+        <td>File was opened with read-only access.</td></tr>
+      <tr>
+        <td><code>H5F_ACC_SWMR_WRITE</code></td>
+        <td>File was opened with read/write access for a 
+        single-writer/multiple-reader (SWMR) scenario. Note that the 
+        writer process must also open the file with the 
+        <code>H5F_ACC_RDWR</code> flag. 
+      <tr>
+        <td><code>H5F_ACC_SWMR_READ</code></td>
+        <td>File was opened with read-only access for a 
+        single-writer/multiple-reader (SWMR) scenario. Note that the 
+        reader process must also open the file with the 
+        <code>H5F_ACC_RDONLY</code> flag.</td></tr>
+    </table>
+    </dir>
+
+    <p>The function will not return an error if <code>intent</code>
+    is <code>NULL</code>; it will simply do nothing.</p></dd>
+        
+<dt><strong>Parameters:</strong></dt>
+    <dd><table width="100%">
+        <tr valign="top">
+            <td width="10%"><code><em>hid_t</em> file_id</code></td>
+            <td>IN: File identifier for a 
+                currently-open HDF5 file.</td></tr>
+        <tr valign="top">
+            <td><code><em>unsigned</em> *intent   </code></td>
+            <td>OUT: Intended access mode flag 
+                as originally passed with <code>H5Fopen</code>.</td>
+        </tr></table></dd>
+    <br />
+        
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful; otherwise returns 
+    a negative value.</dd>
+    <br />
         
-        <p>The function will not return an error if <code>intent</code>
-        is <code>NULL</code>; it will simply do nothing.</p></dd>
-        
-<dt><strong>Parameters:</strong></dt>
-    <dd><table width="100%">
-        <tr>
-        <td width="10%"><code><em>hid_t</em> file_id</code></td>
-        <td width="90%">IN: File identifier for a 
-            currently-open HDF5 file.</td></tr>
-        <tr>
-            <td><code><em>unsigned</em> *intent</code></td>
-            <td>OUT: Intended access mode flag 
-            as originally passed with <code>H5Fopen</code>.</td>
-        </tr></table></dd>
-        <br />
-        
-<dt><strong>Returns:</strong></dt>
-    <dd>Returns a non-negative value if successful; otherwise returns 
-    a negative value.</dd>
-        <br />
-        
-<dt><strong>Fortran90 Interface:</strong></dt>
-    <dd>None</dd>
-    <br />
+<dt><strong>Fortran90 Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
 <!--
 <dt><strong>Fortran90 Interface:</strong> h5fget_intent_f
     <dd>
     <pre>
     </pre>
 -->
-        <!--<dt><strong>Non-C API(s):</strong>
-        <dd>
         
-        <img src="Graphics/Java.gif"> 
-        <img src="Graphics/C++.gif">
-        -->
-        
-<dt><strong>History:</strong></dt>
-	<dd><table width="90%">
-        <tr>
-          <td valign="top" align="left" width="10%">
-          <strong>Release</strong>    </td>
-          <td valign="top" align="left">
-            <strong>Change</strong></td></tr>
-        <tr>
-          <td>1.8.0</td>
-          <td>C function introduced in this release.</td></tr>
-
-    </table></dd>
-</dl>
-<br />
-<br />
-<br />
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td>1.8.0</td>
+          <td>C function introduced in this release.</td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function enhanced to work with SWMR functionality. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
 
diff --git a/html/RM/H5F/H5Fget_mdc_flush_disabled_obj_ids.htm b/html/RM/H5F/H5Fget_mdc_flush_disabled_obj_ids.htm
new file mode 100644
index 0000000..91fc174
--- /dev/null
+++ b/html/RM/H5F/H5Fget_mdc_flush_disabled_obj_ids.htm
@@ -0,0 +1,163 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_mdc_flush_disabled_obj_ids" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 25 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong>
+    <a name="File-GetMdcFlushDisabledObjectIds">
+    H5Fget_mdc_flush_disabled_obj_ids</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fget_mdc_flush_disabled_obj_ids(
+              <em>hid_t</em> file_id,
+              <em>int</em> *n_objects,
+              <em>hid_t</em> object_ids[]
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Returns a list of all object identifiers for which flushes have 
+    been disabled in a file’s metadata cache. </dd>
+    <br />
+
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+    <code>H5Xflush()</code> functions can be used to control the flushing 
+    of entries from a file’s metadata cache. Metadata cache entries 
+    can be controlled at both the individual HDF5 object level (datasets, 
+    groups, committed datatypes) and the entire metadata cache level. 
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>
+    The <code>object_ids</code> array must be allocated by the caller. The 
+    appropriate size can be determined by calling the function with 
+    <code>object_ids</code> set to NULL, which will return the number 
+    of objects via the <code>n_objects</code> pointer.  The correct 
+    size of the array will then be <code>(*n_objects * sizeof(hid_t))</code>. 
+    <br />
+
+    <p>Only HDF5 file identifiers (obtained from <code>H5Fopen()</code> or 
+    <code>H5Fcreate()</code>) may be passed to this function.</p>
+
+    <p>Passing in a <code>hid_t</code> identifier that represents any other 
+    HDF5 entity is considered an error. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> file_id</code></td>
+        <td width="85%">IN: File identifier.</td></tr>
+      <tr valign="top">
+        <td width="15%"><code><em>int</em> *n_objects</code></td>
+        <td width="85%">OUT: Number of object identifiers being 
+            returned.</td></tr>
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> object_ids[]   
+            </code></td>
+        <td width="85%">OUT: Array of object identifiers 
+            (allocated by caller).</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+    otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+          <tr>
+            <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+            <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+          <tr>
+            <td valign="top">1.10.0</td>
+            <td valign="top">
+            C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5F/H5Fget_metadata_read_retries_info.htm b/html/RM/H5F/H5Fget_metadata_read_retries_info.htm
new file mode 100644
index 0000000..ccbd735
--- /dev/null
+++ b/html/RM/H5F/H5Fget_metadata_read_retries_info.htm
@@ -0,0 +1,415 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_read_attempts" -->
+<hr>
+<dl>
+
+  <dt><div align="right"><font color="999999" size="-1"><i>
+      Last modified: 7 December 2015
+      </i></font></div></dt>
+  <br />
+
+  <dt><strong>Name:</strong> <a name="File-GetMetadataReadRetriesInfo">
+    H5Fget_metadata_read_retries_info</a></dt>
+    <br />
+
+  <dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Fget_metadata_read_retries_info(
+              <em>hid_t</em> file_id,
+              <em>H5F_retries_info_t</em>  *info
+        )</code>
+    </dd></dt><br />
+
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the collection of read retries for metadata entries with 
+    checksum.
+    </dd></dt><br />
+
+  <dt><strong>Motivation:</strong>
+    <dd>On a system that is not atomic, the library might possibly read 
+    inconsistent metadata with checksum when performing 
+    single-writer/multiple-reader (SWMR) operations 
+    for an HDF5 file. Upon encountering such situations, the library will 
+    try reading the metadata again for a set number of times to attempt 
+    to obtain consistent data. The maximum number of read attempts used 
+    by the library will be either the value set via 
+    <code>H5Pset_metadata_read_attempts</code> or 
+    the library default value when a value is not set.
+    <br /><br />
+    When the current number of metadata read attempts used in the library 
+    is unable to remedy the reading of inconsistent metadata on a system, 
+    the user can assess the information obtained via this routine to 
+    derive a different maximum value. The information can also be helpful 
+    for debugging purposes to identify potential issues with metadata flush 
+    dependencies and SWMR implementation in general. 
+    </dd></dt><br />
+    
+  <dt><strong>Description:</strong>
+    <dd><code>H5Fget_metadata_read_retries_info</code> 
+      retrieves information regarding the number of read retries for 
+      metadata entries with checksum for the file <code>file_id</code>.
+      This information is reported in the <code>H5F_retries_info_t</code> struct
+      defined in <code>H5Fpublic.h</code> as follows:
+    <pre>
+        /* The number of metadata entries with checksum */
+        #define NUM_METADATA_READ_RETRIES         21        
+
+        typedef struct H5F_retries_info_t {
+            unsigned nbins;
+            uint32_t *retries[NUM_METADATA_READ_RETRIES];
+        } H5F_retries_info_t;
+    </pre>
+    
+    <p><code>nbins</code> is the number of bins for 
+    each <code>retries[i]</code> of metadata entry <code>i</code>.
+    It is calculated based on the current number of read attempts 
+    used in the library and logarithmic 10.</p>
+    
+    <p>If read retries are incurred for a metadata entry <code>i</code>,
+    the library will allocate memory 
+    for <code>retries[i] (nbins * sizeof(uint32_t)</code>
+    and store the collection of retries there.  
+    If there are no retries for a metadata entry <code>i</code>,
+    <code>retries[i]</code> will be NULL. After a call to this routine,
+    users should free each <code>retries[i]</code> that is non-NULL, 
+    otherwise resource leak will occur.</p>
+    
+    <p>For the library default read attempts of 100 for SWMR access, 
+    <code>nbins</code> will be 2 as depicted below:</p>
+    <ul>
+    <li><code>retries[i][0]</code> is the number of 1 to 9 read retries.</li>
+    <li><code>retries[i][1]</code> is the number of 10 to 99 read retries.</li>
+    </ul>
+    
+    <p>For the library default read attempts of 1 for non-SWMR access,
+    <code>nbins</code> will be 0 and each <code>retries[i]</code> will be NULL.</p>
+    
+    <p>The following table lists the 21 metadata entries of 
+    <code>retries[]</code>:</p>
+    
+    <table>
+      <tr><td><code>    </code></td>
+        <td>
+    <table>
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="3" /></td>
+        </tr>
+      <tr valign="top">
+        <th align="right" width="20%">Index for <code>retries[]</code></th>
+        <th width="5%"><code>    </code></th>
+        <th align="left" width="70%">Metadata entries<sup>*</sup></th>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="3" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">0  </td>
+        <td> </td>
+        <td align="left">Object header (version 2)</td>
+        </tr>
+      <tr align="top">
+        <td align="right">1  </td>
+        <td> </td>
+        <td align="left">Object header chunk (version 2)</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">2  </td>
+        <td> </td>
+        <td align="left">B-tree header (version 2)</td>
+        </tr>
+      <tr align="top">
+        <td align="right">3  </td>
+        <td> </td>
+        <td align="left">B-tree internal node (version 2)</td>
+        </tr>
+      <tr align="top">
+        <td align="right">4  </td>
+        <td> </td>
+        <td align="left">B-tree leaf node (version 2)</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">5  </td>
+        <td> </td>
+        <td align="left">Fractal heap header</td>
+        </tr>
+      <tr align="top">
+        <td align="right">6  </td>
+        <td> </td>
+        <td align="left">Fractal heap direct block 
+            (optional checksum)<code>  </code></td>
+        </tr>
+      <tr align="top">
+        <td align="right">7  </td>
+        <td> </td>
+        <td align="left">Fractal heap indirect block</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">8  </td>
+        <td> </td>
+        <td align="left">Free-space  header</td>
+        </tr>
+      <tr align="top">
+        <td align="right">9  </td>
+        <td> </td>
+        <td align="left">Free-space  sections</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">10  </td>
+        <td> </td>
+        <td align="left">Shared object header message table</td>
+        </tr>
+      <tr align="top">
+        <td align="right">11  </td>
+        <td> </td>
+        <td align="left">Shared message record list</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">12  </td>
+        <td> </td>
+        <td align="left">Extensive array header</td>
+        </tr>
+      <tr align="top">
+        <td align="right">13  </td>
+        <td> </td>
+        <td align="left">Extensive array index block</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">14  </td>
+        <td> </td>
+        <td align="left">Extensive array super block</td>
+        </tr>
+      <tr align="top">
+        <td align="right">15  </td>
+        <td> </td>
+        <td align="left">Extensive array data block</td>
+        </tr>
+      <tr align="top">
+        <td align="right">16  </td>
+        <td> </td>
+        <td align="left">Extensive array data block page</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">17  </td>
+        <td> </td>
+        <td align="left">Fixed array header</td>
+        </tr>
+      <tr align="top">
+        <td align="right">18  </td>
+        <td> </td>
+        <td align="left">Fixed array data block</td>
+        </tr>
+      <tr align="top">
+        <td align="right">19  </td>
+        <td> </td>
+        <td align="left">Fixed array data block page</td>
+        </tr>
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="1" /></td>
+        </tr>
+      <tr align="top">
+        <td align="right">20  </td>
+        <td> </td>
+        <td align="left">File’s superblock (version 2)</td>
+        </tr>
+
+      <tr valign="top" align="left">
+        <td colspan="3"><hr color="green" size="3" /></td>
+        </tr>
+      <tr valign="top" align="left">
+        <td colspan="3"><sup>*</sup> <i>All entries are of version 0 (zero)
+            unless indicated otherwise.</i></td>
+        </tr>
+    </table>
+        </td>
+      </tr>
+    </table>
+    </dd></dt><br />
+
+  <dt><strong>Parameters:</strong>
+    <dd>
+    <table>
+    <tr valign="top">
+      <td width="15%"><code><em>hid_t</em> file_id</code>
+           </td>
+      <td>
+          IN: Identifier for a currently opened HDF5 file.
+          </td></tr>
+    <tr valign="top">
+      <td><code><em>H5F_retries_info_t</em> *info   </code>
+          </td>
+      <td>OUT: Struct containing the collection of read retries 
+          for metadata entries with checksum.
+          </td></tr>
+    </table></dd></dt><br />
+
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd></dt><br />
+
+  <dt><strong>Failure Modes:</strong>
+    <dd>When the input identifier is not a file identifier.
+    <p>When the pointer to the output structure is NULL.</p>
+    <p>When memory allocation failed for <code>retries</code>.</p>
+    </dd></dt><br />
+    
+
+  <dt><strong>Example Usage:</strong>
+    <dd>This example illustrates the case on retrieving the collection of 
+    read retries for a file opened with SWMR access.
+    <dir><pre>
+
+H5F_retries_info_t info;
+
+/* Get a copy of file access property list */
+fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+/* Set to use the latest library format */
+H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+
+/* Create a file with the latest library format */
+fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+/* Create groups/datasets etc. in the file */
+:
+:
+:
+
+/* Close the file */
+H5Fclose(fid);
+
+/* Open and perform operations via a writer. */
+fidw = H5Fopen(filename, H5F_ACC_RDWR |H5F_ACC_SWMR_WRITE, fapl);
+:
+:
+:
+:
+:
+/* Open and perform operations via a reader */
+fidr = H5Fopen(FILE, H5F_ACC_RDONLY|H5F_ACC_SWMR_READ, fapl);
+:
+:
+:
+:
+:
+/* Retrieve the collection of read retries for the file */
+H5Fget_metadata_read_retries_info(fidr, &info);
+
+/* Print the collection of read retries */
+for(i = 0; i < NUM_METADATA_READ_RETRIES; i++) {
+    if(info. retries[i] != NULL) {
+        printf("Read retries for metadata entry %u:\n", i);
+
+        /* info.nbins will be 2 */
+        for(j = 0; j < info.nbins; j++)
+            /* 
+             * Print the following if nonzero:
+             * info.retries[i][0] for # of 1-9 read retries
+             * info.retries[i][1] for # of 10-99 read retries
+             */
+    } /* end if */
+} /* end for */
+
+/* Free the array of retries */
+for(i = 0; i < NUM_ METADATA_READ_RETRIES; i++)
+    if(info.retries[i] != NULL)
+        free(info.retries[i];
+:
+:
+:
+</pre></dir></dd></dt><br />
+
+<!--__ *** FORTRAN90 INTERFACE  **********************************  -->
+<!--__ When the Fortran90 interface is complete, replace this       -->
+<!--__ section with the Fortran90 subroutine description.           -->
+<!--__                                                              -->
+<!--__ See the file h5fortran_f_insert.htm for a template and       -->
+<!--__ instructions.                                                -->
+<!--__ ***********************************************************  -->
+
+  <dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+  <dt><strong>See Also:</strong>
+  <ul>
+    <li><a href="#Property-SetMetadataReadAttempts">
+        <code>H5Pset_metadata_read_attempts</code></a></li>
+    <li><a href="#Property-GetMetadataReadAttempts">
+        <code>H5Pget_metadata_read_attempts</code></a></li>
+    </ul>
+    <br />
+
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 8 lines; they set up the table.       -->
+<!--__ ***********************************************************  -->
+
+  <dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+              <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+              <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+              C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5F/H5Fstart_mdc_logging.htm b/html/RM/H5F/H5Fstart_mdc_logging.htm
new file mode 100644
index 0000000..fca0239
--- /dev/null
+++ b/html/RM/H5F/H5Fstart_mdc_logging.htm
@@ -0,0 +1,145 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fstart_mdc_logging" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 7 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-StartMdcLogging">H5Fstart_mdc_logging</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fstart_mdc_logging(
+              <em>hid_t</em> file_id
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Starts logging metadata cache events if logging was previously 
+    enabled.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The metadata cache is a central part of the HDF5 library 
+    through which all <em>file metadata</em> reads and writes take 
+    place. File metadata is normally invisible to the user and is used 
+    by the library for purposes such as locating and indexing data. 
+    File metadata should not be confused with <em>user metadata</em>, 
+    which consists of attributes created by users and attached to 
+    HDF5 objects such as datasets via H5A API calls. 
+    
+    <p>Due to the complexity of the cache, a trace/logging feature has 
+    been created that can be used by HDF5 developers for debugging and 
+    performance analysis. The functions that control this functionality 
+    will normally be of use to a very limited number of developers 
+    outside of The HDF Group. The functions have been documented to help 
+    users create logs that can be sent with bug reports.</p>
+    
+    <p>Control of the log functionality is straightforward. Logging is 
+    enabled via the <code>H5Pset_mdc_log_options()</code> function, 
+    which will modify the file access property list used to open or create 
+    a file. This function has a flag that determines whether logging 
+    begins at file open or starts in a paused state. Log messages can 
+    then be controlled via the <code>H5Fstart/stop_logging()</code> 
+    functions. <code>H5Pget_mdc_log_options()</code> can be used to 
+    examine a file access property list, and 
+    <code>H5Fget_mdc_logging_status()</code> will return the current 
+    state of the logging flags.</p>
+    
+    <p>The log format is described in the 
+    <a href="Design-MetadataCache-Logging-THG20140224-v4.pdf">
+    <em>Metadata Cache Logging</em></a> document.</p></dd>
+    <br />
+    
+<dt><strong>Notes:</strong></dt>
+    <dd>Logging can only be started or stopped if metadata cache logging 
+    was enabled via <code>H5Pset_mdc_log_options()</code>.
+    
+    <p>When enabled and currently logging, the overhead of the logging 
+    feature will almost certainly be significant.</p>
+    
+    <p>The log file is opened when the HDF5 file is opened or created 
+    and not when this function is called for the first time.</p>
+    
+    <p>This function opens the log file and starts logging metadata 
+    cache operations for a particular file. Calling this function when 
+    logging has already been enabled will be considered an error.</p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> file_id  </code> </td>
+        <td>IN: Identifier of an open HDF5 file.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful. 
+    Otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+      <li><a href="H5Pset_mdc_log_options.htm">H5Pset_mdc_log_options</a></li>
+      <li><a href="H5Pget_mdc_log_options.htm">H5Pget_mdc_log_options</a></li>
+      <li><a href="H5Fstop_mdc_logging.htm">H5Fstop_mdc_logging</a></li>
+      <li><a href="H5Pget_mdc_logging_status.htm">H5Pget_mdc_logging_status</a>
+          </li>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5F/H5Fstart_swmr_write.htm b/html/RM/H5F/H5Fstart_swmr_write.htm
new file mode 100644
index 0000000..3e90ea5
--- /dev/null
+++ b/html/RM/H5F/H5Fstart_swmr_write.htm
@@ -0,0 +1,208 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fstart_swmr_write" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-StartSwmrWrite">H5Fstart_swmr_write</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fstart_swmr_write(<em>hid_t</em> file_id)
+        </code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Enables SWMR writing mode for a file.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd>
+    <code>H5Fstart_swmr_write</code> will activate SWMR writing mode for 
+    a file associated with <code>file_id</code>. This routine will prepare 
+    and ensure the file is safe for SWMR writing as follows: 
+    <br /><br />
+    <ul>
+    <li>Check that the file is opened with write access
+        (<code>H5F_ACC_RDWR</code>). </li>
+    <li>Check that the file is opened with the latest library format to 
+        ensure data structures with check-summed metadata are used. </li>
+    <li>Check that the file is not already marked in SWMR writing mode. </li>
+    <li>Enable reading retries for check-summed metadata to remedy possible 
+        checksum failures from reading inconsistent metadata on a system 
+        that is not atomic. </li>
+    <li>Turn off usage of the library’s accumulator to avoid possible 
+        ordering problem on a system that is not atomic. </li>
+    <li>Perform a flush of the file’s data buffers and metadata to 
+        set a consistent state for starting SWMR write operations. </li>
+    </ul>
+    </dd>
+    <dd>
+    <p>Library objects are groups, datasets, and committed datatypes.
+    For the current implementation, groups and datasets can remain open
+    when activating SWMR writing mode, but not committed datatypes.
+    Attributes attached to objects cannot remain open either.
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> file_id   
+            </code></td>
+        <td width="80%">IN: A file identifier.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; otherwise returns a 
+    negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt>
+    <dd>
+    The example below illustrates the usage of this routine to activate the 
+    SWMR writing mode for an opened file.
+    <dir><pre>
+/*
+ *   The writer process
+ */
+/* Create a copy of the file access property list */
+fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+
+/* Set to use the latest library format */
+H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST); 
+
+/* Create a file with the latest library format */ 
+file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+:
+:
+:
+/* Perform operations that are not SWMR-safe. */
+:
+:
+:
+/* Start a concurrent SWMR reader process (see coding below) at this point 
+   will fail because the file is not marked as SWMR-safe */
+
+/* Enable SWMR writing mode */
+H5Fstart_swmr_write(file_id);
+
+/* Start a concurrent SWMR reader process (see coding below) at this point 
+   will succeed because the file is marked as SWMR-safe */
+
+
+/* Perform SWMR-safe operations */
+:
+:
+:
+/* Close the file */
+H5Fclose(file_id);
+
+/* Close the property list */
+H5Pclose(fapl_id);
+
+
+/*
+ *   The SWMR reader process
+ */
+read_file_id = H5Fopen(filename, H5F_ACC_RDONLY|H5F_ACC_SWMR_READ, fapl_id);
+
+/* Perform reading operations */
+:
+:
+:
+/* Close the file */
+H5Fclose(read_file_id);
+</pre></dir>
+    </dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5F/H5Fstop_mdc_logging.htm b/html/RM/H5F/H5Fstop_mdc_logging.htm
new file mode 100644
index 0000000..7ce7179
--- /dev/null
+++ b/html/RM/H5F/H5Fstop_mdc_logging.htm
@@ -0,0 +1,139 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fstop_mdc_logging" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 7 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="File-StopMdcLogging">H5Fstop_mdc_logging</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fstop_mdc_logging(
+              <em>hid_t</em> file_id
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Stops logging metadata cache events if logging was previously 
+    enabled and is currently ongoing.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The metadata cache is a central part of the HDF5 library 
+    through which all <em>file metadata</em> reads and writes take 
+    place. File metadata is normally invisible to the user and is used 
+    by the library for purposes such as locating and indexing data. 
+    File metadata should not be confused with <em>user metadata</em>, 
+    which consists of attributes created by users and attached to 
+    HDF5 objects such as datasets via H5A API calls. 
+    
+    <p>Due to the complexity of the cache, a trace/logging feature has 
+    been created that can be used by HDF5 developers for debugging and 
+    performance analysis. The functions that control this functionality 
+    will normally be of use to a very limited number of developers 
+    outside of The HDF Group. The functions have been documented to help 
+    users create logs that can be sent with bug reports.</p>
+    
+    <p>Control of the log functionality is straightforward. Logging is 
+    enabled via the <code>H5Pset_mdc_log_options()</code> function, 
+    which will modify the file access property list used to open or create 
+    a file. This function has a flag that determines whether logging 
+    begins at file open or starts in a paused state. Log messages can 
+    then be controlled via the <code>H5Fstart/stop_logging()</code> 
+    functions. <code>H5Pget_mdc_log_options()</code> can be used to 
+    examine a file access property list, and 
+    <code>H5Fget_mdc_logging_status()</code> will return the current 
+    state of the logging flags.</p>
+    
+    <p>The log format is described in the 
+    <a href="Design-MetadataCache-Logging-THG20140224-v4.pdf">
+    <em>Metadata Cache Logging</em></a> document.</p></dd>
+    <br />
+    
+<dt><strong>Notes:</strong></dt>
+    <dd>Logging can only be started or stopped if metadata cache logging 
+    was enabled via <code>H5Pset_mdc_log_options()</code>.
+    
+    <p>This function only suspends the logging operations. The log file 
+    will remain open and will not be closed until the HDF5 file is closed.
+    </p></dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="bottom">
+        <td width="10%">
+          <code><em>hid_t</em> file_id  </code> </td>
+        <td width="90%">IN: Identifier of an open HDF5 file.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful. 
+    Otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <li><a href="H5Pset_mdc_log_options.htm">H5Pset_mdc_log_options</a></li>
+    <li><a href="H5Pget_mdc_log_options.htm">H5Pget_mdc_log_options</a></li>
+    <li><a href="H5Fstart_mdc_logging.htm">H5Fstart_mdc_logging</a></li>
+    <li><a href="H5Pget_mdc_logging_status.htm">H5Pget_mdc_logging_status</a>
+        </li>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5G/H5Gflush.htm b/html/RM/H5G/H5Gflush.htm
new file mode 100644
index 0000000..a16c18c
--- /dev/null
+++ b/html/RM/H5G/H5Gflush.htm
@@ -0,0 +1,130 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gflush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Group-Flush">H5Gflush</a>
+    </dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Gflush(<em>hid_t</em> group_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Flushes all buffers associated with a group to disk.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Gflush</code> causes all buffers associated with a
+    group to be immediately flushed to disk without removing the
+    data from the cache.  
+    </dd></dt><br />
+
+<dt><strong>Note:</strong>
+    <dd>HDF5 does not possess full control over buffering.
+    <code>H5Gflush</code> flushes the internal HDF5 buffers and then 
+    asks the operating system (the OS) to flush the system buffers for the 
+    open files.  After that, the OS is responsible for ensuring that
+    the data is actually flushed to disk.
+    </dd></dt><br />
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="bottom" width="15%">
+              <code><em>hid_t</em> group_id  </code> 
+              </td>
+          <td valign="bottom" width="85%">IN: Identifier of the group 
+              to be flushed.</td></tr>
+        </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5G/H5Grefresh.htm b/html/RM/H5G/H5Grefresh.htm
new file mode 100644
index 0000000..b923f92
--- /dev/null
+++ b/html/RM/H5G/H5Grefresh.htm
@@ -0,0 +1,127 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Grefresh" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Group-Refresh">H5Grefresh</a>
+    </dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Grefresh(<em>hid_t</em> group_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Refreshes all buffers associated with a group.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Grefresh</code> causes all buffers associated with a
+        group to be cleared and immediately re-loaded with updated contents 
+        from disk.
+        </dd><br />
+        <dd>This function essentially closes the group, evicts all metadata 
+        associated with it from the cache, and then re-opens the group. 
+        The reopened group is automatically re-registered with the same 
+        identifier.
+    </dd></dt><br />
+
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="top" width="15%">
+              <code><em>hid_t</em> group_id  </code> 
+              </td>
+          <td valign="top" width="85%">IN: Identifier of the group 
+              to be refreshed.</td></tr>
+        </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5O/H5Oare_mdc_flushes_disabled.htm b/html/RM/H5O/H5Oare_mdc_flushes_disabled.htm
new file mode 100644
index 0000000..e5b555b
--- /dev/null
+++ b/html/RM/H5O/H5Oare_mdc_flushes_disabled.htm
@@ -0,0 +1,155 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Oare_mdc_flushes_disabled" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 8 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Object-AreMdcFlushesDisabled">H5Oare_mdc_flushes_disabled</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Oare_mdc_flushes_enabled(
+              <em>hid_t</em> object_id, 
+              <em>hbool_t</em> *are_disabled
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Determines if an HDF5 object (dataset, group, committed datatype) 
+        has had flushes of metadata entries disabled. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+        <code>H5Xflush()</code> functions can be used to control the flushing 
+        of entries from a file’s metadata cache. Metadata cache entries 
+        can be controlled at both the individual HDF5 object level (datasets, 
+        groups, committed datatypes) and the entire metadata cache level. 
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>HDF5 objects include datasets, groups, and committed datatypes. 
+        Only <code>hid_t</code> identifiers that represent these objects 
+        can be passed to the function.
+
+        <p>Passing in a <code>hid_t</code> identifier that represents any 
+        other HDF5 entity is considered an error. </p>
+
+        <p>It is an error to pass an HDF5 file identifier (obtained from 
+        <code>H5Fopen()</code> or <code>H5Fcreate()</code>) to this function. 
+        Use <code>H5Fare_mdc_flushes_disabled</code> instead. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> object_id</code></td>
+        <td width="80%">IN: Identifier of an object in the cache 
+           (See the above notes for restrictions).</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *are_disabled   </code></td>
+        <td> OUT: Flushes enabled/disabled.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd><code>are_disabled</code> will be set to 
+        <code>TRUE</code> if an object has had flushes disabled and 
+        <code>FALSE</code> if it has not had flushes disabled.
+
+        <p>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</p>
+    </dd>
+    <br />
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+      <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td></tr>
+      <tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release. </td></tr>
+      </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5O/H5Odisable_mdc_flushes.htm b/html/RM/H5O/H5Odisable_mdc_flushes.htm
new file mode 100644
index 0000000..45fcf22
--- /dev/null
+++ b/html/RM/H5O/H5Odisable_mdc_flushes.htm
@@ -0,0 +1,171 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Odisable_mdc_flushes" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 28 January 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Object-DisableMdcFlushes">H5Odisable_mdc_flushes</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Odisable_mdc_flushes(
+              <em>hid_t</em> object_id
+        )</code>
+    </dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Prevents metadata entries for an HDF5 object from being flushed 
+        from the metadata cache to storage.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+        <code>H5Xflush()</code> functions can be used to control the flushing 
+        of entries from a file’s metadata cache.  
+        <p>
+        This function prevents an object’s or cache’s 
+        dirty metadata entries from being flushed from the cache by the usual 
+        cache eviction/flush policy.  Instead, users must manually flush 
+        the cache or entries for individual objects via the appropriate
+        <code>H5F/H5D/H5G/H5T/H5Oflush()</code> calls. 
+        </p>
+        <p>
+        Metadata cache entries can be controlled at both the individual 
+        HDF5 object level (datasets, groups, committed datatypes) 
+        and the entire metadata cache level.  
+    </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>HDF5 objects include datasets, groups, and committed datatypes. 
+        Only <code>hid_t</code> identifiers that represent these objects 
+        can be passed to this function. 
+
+        <p>Passing in a <code>hid_t</code> identifier that represents any 
+        other HDF5 entity is considered an error. </p>
+
+        <p>It is an error to pass an HDF5 file identifier (obtained from 
+        <code>H5Fopen()</code> or <code>H5Fcreate()</code>) to this function. 
+        Use <code>H5Fdisable_mdc_flushes</code> instead.</p>
+
+        <p>Misuse of this function can cause the cache to exhaust available 
+        memory.</p>
+
+        <p>Objects can be returned to the default automatic flush behavior 
+        with <code>H5Oenable_mdc_flushes()</code>.</p>
+
+        <p>Flush prevention only pertains to new or dirty metadata entries. 
+        Clean entries can be evicted from the cache. </p>
+
+        <p>Calling this function on an object that has already had flushes 
+        disabled will return an error. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> object_id   
+            </code></td>
+        <td width="85%">IN: Identifier of the object that will have flushes 
+            disabled.
+            <br />
+            <i>See the above notes for restrictions.</i>
+        </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5O/H5Oenable_mdc_flushes.htm b/html/RM/H5O/H5Oenable_mdc_flushes.htm
new file mode 100644
index 0000000..7b02b48
--- /dev/null
+++ b/html/RM/H5O/H5Oenable_mdc_flushes.htm
@@ -0,0 +1,173 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Oenable_mdc_flushes" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 28 January 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Object-EnableMdcFlushes">H5Oenable_mdc_flushes</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Oenable_mdc_flushes(
+              <em>hid_t</em> object_id
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Returns the cache entries associated with an HDF5 object to the 
+        default metadata flush and eviction algorithm.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The <code>H5O/H5Fenable/disable_mdc_flushes()</code> and associated 
+        <code>H5Xflush()</code> functions can be used to control the flushing 
+        of entries from a file’s metadata cache. 
+        <p>
+        This function allows an object or cache’s 
+        dirty metadata entries to be flushed from the cache by 
+        the usual cache eviction/flush policy.
+        </p>
+        <p>
+        Metadata cache entries can be controlled at both the individual 
+        HDF5 object level (datasets, groups, committed datatypes) and 
+        the entire metadata cache level. 
+   </dd>
+    <br />
+
+<dt><strong>Note:</strong></dt>
+    <dd>HDF5 objects include datasets, groups, and committed datatypes.  
+        Only <code>hid_t</code> identifiers that represent these objects 
+        can be passed to the function.
+
+        <p>Passing in a <code>hid_t</code> identifier that represents any 
+        other HDF5 entity is considered an error. </p>
+
+        <p>It is an error to pass an HDF5 file identifier (obtained from 
+        <code>H5Fopen()</code> or <code>H5Fcreate()</code>) to this function. 
+        Use <code>H5Fenable_mdc_flushes</code> instead. </p>
+
+        <p>Using this function on an object that has not had flushes disabled 
+        is considered an error.  The state of an object can be determined with 
+        <code>H5Oare_flushes_disabled()</code>.</p>
+
+        <p>Individual objects can be returned to the default flush algorithm 
+        with this function after <code>H5Fdisable_mdc_flushes()</code> has 
+        been used to globally prevent flushes. </p>
+
+        <p>An object will be returned to the default flush algorithm when it 
+        is closed. </p>
+
+        <p>All objects will be returned to the default flush algorithm when 
+        the file is closed. </p>
+
+        <p>An object’s entries will not necessarily be flushed as a 
+        result of calling this function. </p>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> object_id   
+            </code></td>
+        <td width="85%">IN: Identifier of the object that will have flushes 
+            re-enabled.
+            <br />
+            <i>See the above notes for restrictions.</i></td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+              <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+              <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+              C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5O/H5Oflush.htm b/html/RM/H5O/H5Oflush.htm
new file mode 100644
index 0000000..6fb9016
--- /dev/null
+++ b/html/RM/H5O/H5Oflush.htm
@@ -0,0 +1,132 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Oflush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Object-Flush">H5Oflush</a></dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Oflush(<em>hid_t</em> object_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Flushes all buffers associated with an HDF5 object to disk.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Oflush</code> causes all buffers associated with an
+        object to be immediately flushed to disk without removing the
+        data from the cache.  
+        </dd><br />
+    <dd><code>object_id</code> can be any named object associated with an 
+        HDF5 file including a dataset, a group, or a committed datatype.
+    </dd></dt><br />
+
+<dt><strong>Note:</strong>
+    <dd>HDF5 does not possess full control over buffering.
+        <code>H5Oflush</code> flushes the internal HDF5 buffers and then 
+        asks the operating system (the OS) to flush the system buffers 
+        for the open files.  After that, the OS is responsible for 
+        ensuring that the data is actually flushed to disk.
+    </dd></dt><br />
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="bottom" width="15%">
+              <code><em>hid_t</em> object_id</code>   
+              </td>
+          <td valign="bottom" width="85%">IN: Identifier of the object 
+              to be flushed.</td></tr>
+        </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
diff --git a/html/RM/H5O/H5Orefresh.htm b/html/RM/H5O/H5Orefresh.htm
new file mode 100644
index 0000000..5985552
--- /dev/null
+++ b/html/RM/H5O/H5Orefresh.htm
@@ -0,0 +1,132 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Orefresh" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Object-Refresh">H5Orefresh</a></dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Orefresh(<em>hid_t</em> object_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Refreshes all buffers associated with an HDF5 object.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Orefresh</code> causes all buffers associated with an
+        object to be cleared and immediately re-loaded with updated 
+        contents from disk.
+    </dd><br />
+    <dd>This function essentially closes the object, evicts all metadata 
+        associated with it from the cache, and then re-opens the object. 
+        The reopened object is automatically re-registered with the same 
+        identifier.
+    </dd><br />
+    <dd><code>object_id</code> can be any named object associated 
+        with an HDF5 file including a dataset, a group, or a committed 
+        datatype.
+    </dd></dt><br />
+
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="bottom" width="15%">
+              <code><em>hid_t</em> object_id</code>   
+              </td>
+          <td valign="bottom" width="85%">IN: Identifier of the object 
+              to be refreshed.</td></tr>
+        </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_all_coll_metadata_ops.htm b/html/RM/H5P/H5Pget_all_coll_metadata_ops.htm
new file mode 100644
index 0000000..4840f2f
--- /dev/null
+++ b/html/RM/H5P/H5Pget_all_coll_metadata_ops.htm
@@ -0,0 +1,154 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_all_coll_metadata_ops" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetAllCollMetadataOps">H5Pget_all_coll_metadata_ops</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pget_all_coll_metadata_ops(
+              <em>hid_t</em> accpl_id,
+              <em>hbool_t</em> *is_collective
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>
+    <dd>Retrieves metadata read mode setting.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_all_coll_metadata_ops</code> retrieves 
+        the collective metadata read setting from the access property list
+        <code>accpl_id</code> into <code>is_collective</code>. 
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top" width="15%"><code><em>hid_t</em> accpl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: File, group, dataset, datatype, link,
+               or attribute access property list identifier</td>
+        </tr><tr>
+            <td valign="top"><code><em>hbool_t</em> *is_collective</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: Pointer to a buffer containing the
+                Boolean value indicating whether 
+                metadata reads are collective (<code>TRUE</code>) 
+                or independent (<code>FALSE</code>)
+                <br />
+                <i>Default mode: Independent (</i><code>FALSE</code><i>)
+                </i></td>
+        </tr>
+        </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_all_coll_metadata_ops_f
+    <dd>
+
+        <?php include("H5P/h5pget_all_coll_metadata_ops_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href=
+              "H5Pset_coll_metadata_write.htm">H5Pset_coll_metadata_write</a></li>
+          <li><a href=
+              "H5Pget_coll_metadata_write.htm">H5Pget_coll_metadata_write</a></li>
+        </ul>
+    </td><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href="H5Pset_all_coll_metadata_ops.htm">H5Pset_all_coll_metadata_ops</a></li>
+<!--
+          <li><a href="H5Pget_all_coll_metadata_ops.htm">H5Pget_all_coll_metadata_ops</a></li>
+-->
+        </ul>
+    </td></tr>
+    <tr><td colspan="2" align="left">
+          
+        <ul>
+          <li>“<a href="MetadataRead_NoAccesPList.html">Functions
+              with No Access Property List Parameter that May Generate 
+              Metadata Reads</a>”</li>
+        </ul>
+    </td></tr>
+    </table>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function and Fortran wrapper introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_append_flush.htm b/html/RM/H5P/H5Pget_append_flush.htm
new file mode 100644
index 0000000..c174f36
--- /dev/null
+++ b/html/RM/H5P/H5Pget_append_flush.htm
@@ -0,0 +1,222 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_append_flush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetAppendFlush">H5Pget_append_flush</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pget_append_flush (
+              <em>hid_t</em> dapl_id,  
+              <em>int</em> ndims, 
+              <em>hsize_t</em> boundary[], 
+              <em>H5D_append_cb_t</em>  *func, 
+              <em>void</em> **user_data
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>  
+    <dd>Retrieves the values of the append property that is set up in the 
+        dataset access property list. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd><code>H5Pget_append_flush</code> obtains the following information 
+    from the dataset access property list <code>dapl_id</code>: 
+    <dir>
+    <table>
+      <tr valign="top" align="left">
+          <td><code>boundary[]   </code> </td>
+          <td>The sizes set up in the access property list that are used 
+              to determine when a dataset dimension size hits the boundary.  
+              Only at most <code>ndims</code> boundary sizes are retrieved, 
+              and <code>ndims</code> will not exceed the corresponding 
+              value that is set in the property list.</td>
+      </tr><tr valign="top" align="left">
+          <td><code>func</code> </td>
+          <td>The user-defined callback function to invoke when a
+              dataset’s appended dimension size reaches a boundary.</td>
+      </tr><tr valign="top" align="left">
+          <td><code>user_data</code> </td>
+          <td>The user-defined input data for the callback function.</td>
+      </tr>
+    </table>
+    </dir>
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> dapl_id</code></td>
+        <td>IN: Dataset access property list identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>int</em> ndims</code></td>
+        <td>IN: The number of elements for 
+            <code>boundary</code>.</td></tr>
+      <tr valign="top">
+        <td><code><em>hsize_t</em> *boundary[]</code></td>
+        <td>IN: The dimension sizes used to determine the 
+            boundary.</td></tr>
+      <tr valign="top">
+        <td><code><em>H5D_append_cb_t</em> *func   </code></td>
+        <td>IN: The user-defined callback function.</td></tr>
+      <tr valign="top">
+        <td><code><em>void</em> **user_data</code></td>
+        <td>IN: The user-defined input data.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt> 
+    <dd>The example below illustrates the usage of this public routine to 
+        obtain the append values that are set up in the dataset access 
+        property list. 
+
+        <dir><pre>
+hid_t file_id;
+hid_t dapl_id, dataset_id, dapl;
+hsize_t dims[2] = {0, 100};
+hsize_t max_dims[2] = {H5S_UNLIMITED, 100};
+hsize_t boundary_dims[2] = {5, 0};
+int counter;
+hsize_t ret_boundary[1];
+H5D_append_flush_cb_t ret_cb;
+void *ret_udata;
+
+/* Open the file */
+file_id = H5Fopen(FILE, H5F_ACC_RDWR|H5F_ACC_SWMR_WRITE, H5P_DEFAULT);
+
+/* Create a copy of the dataset access property list */
+dapl_id = H5Pcreate(H5P_DATASET_ACCESS);
+
+/* Set up the append property values */
+/* boundary_dims[0]=5: to invoke callback and flush every 5 lines */
+/* boundary_dims[1]=0: no boundary is set for the non-extendible dimension */
+/* append_cb: callback function to invoke when hitting boundary (see below) */
+/* counter: user data to pass along to the callback function */
+H5Pset_append_flush(dapl_id, 2, boundary_dims, append_cb, &counter);
+
+/* DATASET is a 2-dimensional chunked dataset with dataspace: 
+   dims[] and max_dims[] */
+dataset_id = H5Dopen2(file_id, �dataset�, dapl_id);
+
+/* Get the dataset access property list for DATASET */
+dapl = H5Dget_access_plist(dataset_id);
+
+/* Retrieve the append property values for the dataset */
+/* Only 1 boundary size is retrieved: ret_boundary[0] is 5 */
+/* ret_cb will point to append_cb() */
+/* ret_udata will point to counter */
+H5Pget_append_flush(dapl, 1, ret_boundary, &ret_cb, &ret_udata);
+:
+:
+:
+
+/* The callback function */
+static herr_t
+append_cb(hid_t dset_id, hsize_t *cur_dims, void *_udata)
+{
+    unsigned *count = (unsigned *)_udata;
+    ++(*count++);
+    return 0;
+} /* append_cb() */
+</pre>
+    </dir>
+    </dd>
+    <br />
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+              <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+              <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+              C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5P/H5Pget_coll_metadata_write.htm b/html/RM/H5P/H5Pget_coll_metadata_write.htm
new file mode 100644
index 0000000..1c75880
--- /dev/null
+++ b/html/RM/H5P/H5Pget_coll_metadata_write.htm
@@ -0,0 +1,143 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_coll_metadata_write" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetCollMetadataWrite">H5Pget_coll_metadata_write</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pget_coll_metadata_write(
+              <em>hid_t</em> fapl_id,
+              <em>hbool_t</em> *is_collective
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves metadata write mode setting.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_coll_metadata_write</code> retrieves the 
+        collective metadata write setting from the file access property 
+        into <code>is_collective</code>.
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top" width="15%"><code><em>hid_t</em> fapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: File access propery list identifier</td>
+        </tr><tr>
+            <td valign="top"><code><em>hbool_t</em> *is_collective</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: Boolean value indicating whether 
+                metadata writes are collective (<code>TRUE</code>) 
+                or independent (<code>FALSE</code>)
+                <br />
+                <i>Default mode: Independent (</i><code>FALSE</code><i>)
+                </i></td>
+        </tr>
+        </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_coll_metadata_write_f
+    <dd>
+
+        <?php include("H5P/h5pget_coll_metadata_write_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href=
+              "H5Pset_coll_metadata_write.htm">H5Pset_coll_metadata_write</a></li>
+<!--
+          <li><a href=
+              "H5Pget_coll_metadata_write.htm">H5Pget_coll_metadata_write</a></li>
+-->
+        </ul>
+    </td><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href="H5Pset_all_coll_metadata_ops.htm">H5Pset_all_coll_metadata_ops</a></li>
+          <li><a href="H5Pget_all_coll_metadata_ops.htm">H5Pget_all_coll_metadata_ops</a></li>
+        </ul>
+    </td></tr>
+    </table>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function and Fortran wrapper introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_file_space.htm b/html/RM/H5P/H5Pget_file_space.htm
index 52e66fd..0d3ca79 100644
--- a/html/RM/H5P/H5Pget_file_space.htm
+++ b/html/RM/H5P/H5Pget_file_space.htm
@@ -1,33 +1,36 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.                                               *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "H5Pget_file_space" -->
 <hr>
 <dl>
 
   <dt><div align=right><font color=999999 size=-1><i>
-      Last modified: 19 April 2012
+      Last modified: 9 February 2016
       </i></font></div>
 
-  <dt><strong>Name:</strong> <a name="Property-GetFileSpace">H5Pget_file_space</a>
+  <dt><strong>Name:</strong> 
+      <a name="Property-GetFileSpace">H5Pget_file_space</a>
 
   <dt><strong>Signature:</strong>
     <dd><em>herr_t </em><code>H5Pget_file_space</code>(
@@ -39,13 +42,13 @@
   <p>
   <dt><strong>Purpose:</strong>
     <dd>Retrieves the file space management strategy and/or
-	free-space section threshold for an HDF5 file.
+        free-space section threshold for an HDF5 file.
 
   <p>
   <dt><strong>Motivation:</strong>
     <dd><code>H5Pget_file_space</code> 
-      provides the means for applications to manage an HDF5 file’s 
-      file space to meet specific needs.
+      provides the means for applications to manage an HDF5 file’s file
+      space to meet specific needs.
 
   <p>
   <dt><strong>Description:</strong>
@@ -64,7 +67,9 @@
       this routine will retrieve the existing free-space section threshold 
       used by the library’s free space managers for the file and store it 
       in <code>threshold</code>.
-      Any pointer parameters which are passed as NULL are not queried. 
+      <p>
+      Any pointer parameters which are passed as <code>NULL</code> 
+      are not queried. 
 
   <p>
   <dt><strong>Parameters:</strong>
@@ -77,23 +82,27 @@
             </td></tr>
 
       <tr valign="top">
-        <td><em>H5F_file_space_type_t *</em><code>strategy</code>
-        </td><td>    </td>
+        <td colspan="3"><em>H5F_file_space_type_t</em> *<code>strategy</code>
+            </td></tr>
+      <tr valign="top">
+        <td> </td><td> </td>
         <td>IN/OUT: The file space management strategy currently in use 
             for the file.
-<!--
             <p>
-            The <code><em>H5F_file_space_type_t</em></code> 
-            <small>ENUM</small> is fully described in 
-            <a href="../examples/H5F_file_space_type_t.html">
-            <code>H5F_file_space_type_t.html</code></a>.
+            Valid values for <code>strategy</code> are described in the 
+            <code>strategy</code> parameter description in the
+<!-- FOR docNewFeatures ONLY                                -->
+            <a href="H5Pset_file_space.htm">
+<!-- FOR FINAL RM INTEGRATION
+            <a href="#Property-SetFileSpace">
 -->
+            <code>H5Pset_file_space</code></a> entry.
             </td></tr>
 
       <tr valign="top">
-        <td><em>hsize_t *</em><code>threshold</code>
+        <td><em>hsize_t *</em><code>threshold</code>
             </td><td> </td>
-        <td>IN/OUT: The free-space section threshold currently in use.
+        <td>IN/OUT: The current free-space section threshold.
             </td></tr>
     </table>
 
@@ -107,33 +116,37 @@
   <dt><strong>Failure Modes:</strong>
     <dd>This routine will fail when either of the following is true:
         <ul>
-            <li>The library fails to retrieve the file creation property list 
-                <de>fcpl_id</de>.
+            <li>The library fails to retrieve the file creation property 
+                list associated with <code>fcpl_id</code>.
             <li>The library fails to retrieve the strategy and/or threshold 
-                in the file creation property list <de>fcpl_id</de>.
+                in the file creation property list associated with 
+                <code>fcpl_id</code>.
         </ul>
 
   <p>
   <dt><strong>Example Usage:</strong>
 
-    <dd>The first example retrieves the file space management handling strategy 
-        in use for the file associated with <code>fcpl</code> 
+    <dd>The first example retrieves the file space management handling 
+        strategy in use for the file associated with <code>fcpl</code> 
         in the parameter <code>strategy</code>.
-	It also retrieves the free-space section threshold in use for the file 
-	in the parameter <code>threshold</code>. 
+        It also retrieves the free-space section threshold in use for 
+        the file in the parameter <code>threshold</code>. 
+
 <dir><pre>
 H5Pget_file_space(fcpl, &strategy, &threshold);
 </pre></dir>
     <p>
 
     <dd>The second example retrieves the file space management strategy for 
-	the file associated with <code>fcpl</code> in the parameter 
+        the file associated with <code>fcpl</code> in the parameter 
         <code>strategy</code>.
-	Since the second parameter is null, this routine does not retrieve the 
-	free-space section threshold in use for the file.
+        Since the second parameter is null, this routine does not retrieve 
+        the free-space section threshold in use for the file.
+
 <dir><pre>
 H5Pset_file_space(fcpl, &strategy, NULL);
 </pre></dir>
+  <p>
 
 
 <!--__ *** FORTRAN90 INTERFACE  **********************************  -->
@@ -143,29 +156,77 @@ H5Pset_file_space(fcpl, &strategy, NULL);
 <!--__ See the file h5fortran_f_insert.htm for a template and       -->
 <!--__ instructions.                                                -->
 <!--__ ***********************************************************  -->
+  <p>
 
 
   <p>
   <dt><strong>See Also:</strong>
-    <dd><a href="../RM/RM_H5P.html#Property-SetFileSpace">
+
+<!-- FOR FINAL RM INTEGRATION
+
+    <dd><a href="RM_H5P.html#Property-SetFileSpace">
         <code>H5Pset_file_space</code></a>
+        <br />
+        <a href="RM_H5P.html#Property-GetFileSpace">
+        <code>H5Pget_file_space</code></a>
         <p>
 
-<!--
-        <a href="../html/RM/H5function.html#H5F_file_space_type_t">
-        <code>H5F_file_space_type_t</code></a>
+        <a href="RM_H5F.html#File-GetFreeSections">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetFreespace">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetInfo">
+        <code>H5Fget_info</code></a>
         <p>
--->
 
-        <a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
+        <a href="Tools.html#h5repack"><code>h5repack</code></a>
+        <br />
+        <a href="Tools.html#h5dump"><code>h5dump</code></a>
+        <br />
+        <a href="Tools.html#h5stat"><code>h5stat</code></a>
+        <p>
+
+        <a href="../?????/FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+END FINAL RM INTEGRATION -->
+
+<!-- FOR docNewFeatures ONLY                                -->
+
+    <dd><a href="H5Pset_file_space.htm">
+        <code>H5Pset_file_space</code></a>
+<!--
+        <br />
+        <a href="H5Pget_file_space.htm">
+        <code>H5Pget_file_space</code></a>
+-->
         <p>
-        <a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
+
+        <a href="H5Fget_free_sections.htm">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+        <a href="H5Fget_freespace.htm">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="H5Fget_info.htm">
+        <code>H5Fget_info</code></a>
         <p>
-        <a href="../RM/Tools.html#Tools-Stat"><code>h5stat</code></a>
+
+        <a href="h5repack.htm"><code>h5repack</code></a>
+        <br />
+        <a href="h5dump.htm"><code>h5dump</code></a>
+        <br />
+        <a href="h5stat.htm"><code>h5stat</code></a>
         <p>
-        <a href="../Advanced/FileSpaceManagement/FileSpaceManagement.pdf">
-           <cite>HDF5 File Space Management</cite></a>
 
+        <a href="FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+<!-- END docNewFeatures ONLY                                -->
+
+    </dd></dt>
 
   <p>
   <dt><strong>History:</strong>
@@ -181,6 +242,16 @@ H5Pset_file_space(fcpl, &strategy, NULL);
           <td valign="top">
             C function introduced in this release.</td>
         </tr>
+
+<!--__ ***********************************************************  -->
+<!--__ If adding a new C functions, include the following 5 lines,  -->
+<!--__ replacing '*.**.**' with the appropriate release number,     -->
+<!--__ but otherwise without modification.                          -->
+<!--__ ***********************************************************  -->
+<!--__ If adding a new Fortran subroutine, include the following    -->
+<!--__ 5 lines, replacing '*.**.**' with the appropriate release    -->
+<!--__ number, but otherwise without modification.                  -->
+<!--__ ***********************************************************  -->
 <!--
         <tr>
           <td valign="top">*.**.**</td>
@@ -188,8 +259,13 @@ H5Pset_file_space(fcpl, &strategy, NULL);
             Fortran90 subroutine introduced in this release.</td>
         </tr>
 -->
-        </table>
 
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 3 lines; they close the "History:"    -->
+<!--__ table and the function entry.                                -->
+<!--__ ***********************************************************  -->
+        </tr>
+        </table>
 </dl>
 
 
diff --git a/html/RM/H5P/H5Pget_layout.htm b/html/RM/H5P/H5Pget_layout.htm
index 827f84c..cd78085 100644
--- a/html/RM/H5P/H5Pget_layout.htm
+++ b/html/RM/H5P/H5Pget_layout.htm
@@ -22,11 +22,22 @@
 <!-- HEADER RIGHT "H5Pget_layout" -->
 <hr>
 <dl>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+      Last modified: 18 March 2016
+      </i></font></div>
+
   <dt><strong>Name:</strong> <a name="Property-GetLayout">H5Pget_layout</a>
+
   <dt><strong>Signature:</strong>
-    <dd><em>H5D_layout_t</em> <code>H5Pget_layout</code>(<em>hid_t</em> <code>plist</code>)
+    <dd><em>H5D_layout_t</em> 
+            <code>H5Pget_layout</code>(<em>hid_t</em> <code>plist</code>)
+
+  <p />
   <dt><strong>Purpose:</strong>
     <dd>Returns the layout of the raw data for a dataset.
+
+  <p />
   <dt><strong>Description:</strong>
     <dd><code>H5Pget_layout</code> returns the layout of the raw data for 
         a dataset.  This function is only valid for dataset creation 
@@ -34,34 +45,44 @@
         <p>
         Note that a compact storage layout may affect writing data to
         the dataset with parallel applications.  See note in
-	<a href="RM_H5D.html#Dataset-Write">H5Dwrite</a>
+        <a href="RM_H5D.html#Dataset-Write"><code>H5Dwrite</code></a>
         documentation for details.
-	
+
+  <p />
   <dt><strong>Parameters:</strong>
-    <ul><table>
+    <dd><table>
         <tr>
-		    <td valign="top"><em>hid_t</em> <code>plist    </code></td>
-            <td valign="top">IN: Identifier for property list to query.</td></tr>
-    </table></ul>
+            <td valign="top">
+                <em>hid_t</em> <code>plist   </code></td>
+            <td valign="top">IN: Identifier for property list to 
+                query.</td></tr>
+    </table></dd>
+
+  <p />
   <dt><strong>Returns:</strong>
     <dd>Returns the layout type (a non-negative value)  
         of a dataset creation property list if successful.  
-	Valid return values are:
+        Valid return values are:
             <ul> <dl>
-                <dt>H5D_COMPACT 
+                <dt><code>H5D_COMPACT</code>
                     <dd>Raw data is stored in the object header in the file.
-                <dt>H5D_CONTIGUOUS
+                <dt><code>H5D_CONTIGUOUS</code>
                     <dd>Raw data is stored separately from the object header in 
                         one contiguous chunk in the file.
-                <dt>H5D_CHUNKED
+                <dt><code>H5D_CHUNKED</code>
                     <dd>Raw data is stored separately from the object header in 
                         chunks in separate locations in the file.
-            </dl> </ul>	
-	<p>
+                <dt><code>H5D_VIRTUAL</code>
+                    <dd>Raw data is drawn from multiple datasets in 
+                        different files.
+            </dl> </ul>
+        <p>
         Otherwise, returns a negative value indicating failure.
+
+  <p />
   <dt><strong>Fortran90 Interface:</strong> h5pget_layout_f
     <dd>
-	<pre>
+        <pre>
 SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr)
   IMPLICIT NONE
   INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
@@ -70,17 +91,35 @@ SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr)
                                        !    H5D_COMPACT_F
                                        !    H5D_CONTIGUOUS_F
                                        !    H5D_CHUNKED_F
+                                       !    H5D_VIRTUAL_F
   INTEGER, INTENT(OUT) :: hdferr       ! Error code
                                        ! 0 on success and -1 on failure
 END SUBROUTINE h5pget_layout_f 
-	</pre>		
-		
-		<!--<dt><strong>Non-C API(s):</strong>
-    	<dd>
-        
-        <img src="Graphics/Java.gif"> 
-        <img src="Graphics/C++.gif">
-        -->
+        </pre>
+
+<dt><strong>See Also:</strong></dt>
+    <dd>Virtual datasets:   <a href="H5Pset_virtual.htm">H5Pset_virtual</a>
+    </dd>
+    <br />
+
+  <p />
+  <dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        <code>H5D_VIRTUAL</code> and <code>H5D_VIRTUAL_F</code> 
+        added in this release.</td>
+    </tr>
+    </table>
+    </dd>
+
 </dl>
 
 
diff --git a/html/RM/H5P/H5Pget_mdc_log_options.htm b/html/RM/H5P/H5Pget_mdc_log_options.htm
new file mode 100644
index 0000000..5510c37
--- /dev/null
+++ b/html/RM/H5P/H5Pget_mdc_log_options.htm
@@ -0,0 +1,155 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_mdc_log_options" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetMdcLogOptions">H5Pget_mdc_log_options</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pget_mdc_log_options(
+              <em>hid_t</em> fapl_id, 
+              <em>hbool_t</em> *is_enabled, 
+              <em>char</em> *location, 
+              <em>size_t</em> *location_size, 
+              <em>hbool_t</em> *start_on_access
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Gets metadata cache logging options.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The metadata cache is a central part of the HDF5 library 
+    through which all <em>file metadata</em> reads and writes take 
+    place. File metadata is normally invisible to the user and is used 
+    by the library for purposes such as locating and indexing data. 
+    File metadata should not be confused with <em>user metadata</em>, 
+    which consists of attributes created by users and attached to 
+    HDF5 objects such as datasets via H5A API calls. 
+    
+    <p>Due to the complexity of the cache, a trace/logging feature has 
+    been created that can be used by HDF5 developers for debugging and 
+    performance analysis. The functions that control this functionality 
+    will normally be of use to a very limited number of developers 
+    outside of The HDF Group. The functions have been documented to help 
+    users create logs that can be sent with bug reports.</p>
+    
+    <p>Control of the log functionality is straightforward. Logging is 
+    enabled via the <code>H5Pset_mdc_log_options()</code> function, 
+    which will modify the file access property list used to open or create 
+    a file. This function has a flag that determines whether logging 
+    begins at file open or starts in a paused state. Log messages can 
+    then be controlled via the <code>H5Fstart/stop_logging()</code> 
+    functions. <code>H5Pget_mdc_log_options()</code> can be used to 
+    examine a file access property list, and 
+    <code>H5Fget_mdc_logging_status()</code> will return the current 
+    state of the logging flags.</p>
+    
+    <p>The log format is described in the 
+    <a href="Design-MetadataCache-Logging-THG20140224-v4.pdf">
+    <em>Metadata Cache Logging</em></a> document.</p></dd>
+    <br />
+
+<dt><strong>Notes:</strong></dt>
+    <dd>The <code>location_size</code> string must be allocated by the 
+    caller. The appropriate size can be determined by calling the 
+    function with <code>location_size</code> set to NULL which will 
+    return the buffer size in bytes via the 
+    <code>location_size</code> pointer.</dd>
+    <br />
+
+
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> fapl_id</code> </td>
+        <td width="85%">IN: File access property list identifier.</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *is_enabled</code> </td>
+        <td>OUT: Whether logging is enabled.</td></tr>
+      <tr valign="top">
+        <td><code><em>char</em> *location</code> </td>
+        <td>OUT: Location of log in UTF-8/ASCII (file path/name)
+        (On Windows, this must be ASCII).</td></tr>
+      <tr valign="top">
+        <td><code><em>size_t</em> *location_size</code> </td>
+        <td>OUT: Size in bytes of the location string.</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *start_on_access  </code> </td>
+        <td>OUT: Whether the logging begins as soon as the file 
+            is opened or created.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful. 
+    Otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Pset_mdc_log_options.htm">H5Pset_mdc_log_options</a></li>
+      <li><a href="H5Fstart_mdc_logging.htm">H5Fstart_mdc_logging</a></li>
+      <li><a href="H5Fstop_mdc_logging.htm">H5Fstop_mdc_logging</a></li>
+      <li><a href="H5Pget_mdc_logging_status.htm">H5Pget_mdc_logging_status</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_mdc_logging_status.htm b/html/RM/H5P/H5Pget_mdc_logging_status.htm
new file mode 100644
index 0000000..5248a9a
--- /dev/null
+++ b/html/RM/H5P/H5Pget_mdc_logging_status.htm
@@ -0,0 +1,144 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_mdc_logging_status" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-H5Pget_mdc_logging_status">H5Pget_mdc_logging_status</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Fget_mdc_logging_status(
+              <em>hid_t</em> file_id, 
+              <em>hbool_t</em> *is_enabled, 
+              <em>hbool_t</em> *is_currently_logging
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Gets the current metadata cache logging status.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The metadata cache is a central part of the HDF5 library 
+    through which all <em>file metadata</em> reads and writes take 
+    place. File metadata is normally invisible to the user and is used 
+    by the library for purposes such as locating and indexing data. 
+    File metadata should not be confused with <em>user metadata</em>, 
+    which consists of attributes created by users and attached to 
+    HDF5 objects such as datasets via H5A API calls. 
+    
+    <p>Due to the complexity of the cache, a trace/logging feature has 
+    been created that can be used by HDF5 developers for debugging and 
+    performance analysis. The functions that control this functionality 
+    will normally be of use to a very limited number of developers 
+    outside of The HDF Group. The functions have been documented to help 
+    users create logs that can be sent with bug reports.</p>
+    
+    <p>Control of the log functionality is straightforward. Logging is 
+    enabled via the <code>H5Pset_mdc_log_options()</code> function, 
+    which will modify the file access property list used to open or create 
+    a file. This function has a flag that determines whether logging 
+    begins at file open or starts in a paused state. Log messages can 
+    then be controlled via the <code>H5Fstart/stop_logging()</code> 
+    functions. <code>H5Pget_mdc_log_options()</code> can be used to 
+    examine a file access property list, and 
+    <code>H5Fget_mdc_logging_status()</code> will return the current 
+    state of the logging flags.</p>
+    
+    <p>The log format is described in the 
+    <a href="Design-MetadataCache-Logging-THG20140224-v4.pdf">
+    <em>Metadata Cache Logging</em></a> document.</p></dd>
+    <br />
+    
+<dt><strong>Notes:</strong></dt>
+    <dd>Unlike <code>H5Fstart/stop_mdc_logging()</code>, this function 
+    can be called on any open file identifier.</dd>
+    <br />
+
+
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> file_id</code> </td>
+        <td width="80%">IN: Identifier of an open HDF5 file.</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *is_enabled</code> </td>
+        <td>OUT: Whether logging is enabled.</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> *is_currently_logging  </code> </td>
+        <td>OUT: Whether events are currently 
+            being logged.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful. 
+    Otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Pset_mdc_log_options.htm">H5Pset_mdc_log_options</a></li>
+      <li><a href="H5Pget_mdc_log_options.htm">H5Pget_mdc_log_options</a></li>
+      <li><a href="H5Fstart_mdc_logging.htm">H5Fstart_mdc_logging</a></li>
+      <li><a href="H5Fstop_mdc_logging.htm">H5Fstop_mdc_logging</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_metadata_read_attempts.htm b/html/RM/H5P/H5Pget_metadata_read_attempts.htm
new file mode 100644
index 0000000..4cc2279
--- /dev/null
+++ b/html/RM/H5P/H5Pget_metadata_read_attempts.htm
@@ -0,0 +1,293 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_metadata_read_attempts" -->
+<hr>
+<dl>
+
+  <dt><div align="right"><font color="999999" size="-1"><i>
+      Last modified: 28 February 2014
+      </i></font></div></dt>
+  <br />
+
+  <dt><strong>Name:</strong><a name= 
+    "Property-GetMetadataReadAttempts">H5Pget_metadata_read_attempts</a>
+    </dt>
+    <br />
+
+  <dt><strong>Signature:</strong>
+    <dd><code><em>herr_t </em> H5Pget_metadata_read_attempts(
+              <em>hid_t </em> plist_id,
+              <em>unsigned</em> *attempts
+        )</code>
+    </dd></dt><br />
+
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the number of read attempts from a file access 
+        property list.
+    </dd></dt><br />
+
+  <dt><strong>Motivation:</strong>
+    <dd>See the description in <code>H5Pset_metadata_read_attempts</code>.
+    </dd></dt><br />
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_metadata_read_attempts</code> retrieves the number 
+    of read attempts that is set in the file access property list 
+    <code>plist_id</code>.
+    
+    <p>For a default file access property list, the value retrieved will 
+    depend on whether the user sets the number of attempts via 
+    <code>H5Pset_metadata_read_attempts</code>:</p>
+    <ul>
+      <li>If the number of attempts is set to N, the value returned 
+      will be N.</li>
+      <li>If the number of attempts is not set, the value returned will 
+      be the default for non-SWMR access (1). SWMR is short for 
+      single-writer/multiple-reader. </li>
+    </ul>
+      
+    <p>For the file access property list of a specified HDF5 file, 
+    the value retrieved will depend on how the file is opened and 
+    whether the user sets the number of read attempts via 
+    <code>H5Pset_metadata_read_attempts</code>:</p>
+      
+    <ul>
+      <li>For a file opened with SWMR access:
+          <ul>
+          <li>If the number of attempts is set to N, the value returned will 
+          be N.</li>
+          <li>If the number of attempts is not set, the value returned will 
+          be the default for SWMR access (100).</li>
+          </ul>
+      </li>
+      <li>For a file opened without SWMR access, the value retrieved will 
+          always be the default for non-SWMR access (1). The value set via 
+          <code>H5Pset_metadata_read_attempts</code> does not have any 
+          effect on non-SWMR access.</li>
+    </ul>
+    </dd></dt><br />
+
+  <dt><strong>Parameters:</strong>
+    <dd>
+    <table>
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> plist_id</code> 
+            </td>
+        <td>IN: Identifier for a file access property list.
+            </td></tr>
+      <tr valign="top">
+        <td><code><em>unsigned</em> *attempts  </code> 
+            </td>
+        <td>OUT: The number of read attempts.
+            </td></tr>
+    </table></dd></dt><br />
+
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd></dt><br />
+  
+  <dt><strong>Failure Modes:</strong>
+    <dd> When the input property list is not a file access property list.
+    <p>When the library is unable to retrieve the number of read attempts 
+    from the file access property list.</p>
+    </dd></dt><br />
+
+  <dt><strong>Example Usage:</strong>
+    <dd>The first example illustrates the two cases for retrieving the 
+    number of read attempts from a default file access property list.
+
+    <dir><pre>
+    /* Get a copy of file access property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    /* Retrieve the # of read attempts from the file access property list */
+    H5Pget_metadata_read_attempts(fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 1 (default for non-SWMR access).
+     */
+
+    /* Set the # of read attempts to 20 */
+    H5Pset_metadata_read_attempts(fapl, 20);
+
+    /* Retrieve the # of read attempts from the file access property list */
+    H5Pget_metadata_read_attempts(fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 20 as set.
+     */
+
+    /* Close the property list */	    
+    H5Pclose(fapl);
+</pre></dir></dd>
+    
+    <dd>The second example illustrates the two cases for retrieving the 
+    number of read attempts from the file access property list of a file 
+    opened with SWMR acccess.
+
+    <dir><pre>
+    /* Open the file with SWMR access and default file access property list */
+    fid = H5Fopen(FILE, (H5F_ACC_RDONLY | H5F_ACC_SWMR_READ), H5P_DEFAULT);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 100 (default for SWMR access).
+     */
+
+    /* Close the property list */	    
+    H5Pclose(file_fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+
+    /* Create a copy of file access property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    /* Set the # of read attempts */
+    H5Pset_metadata_read_attempts(fapl, 20);
+
+    /* Open the file with SWMR access and the non-default file access property list */
+    fid = H5Fopen(FILE, (H5F_ACC_RDONLY | H5F_ACC_SWMR_READ), fapl);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 20.
+     */
+
+    /* Close the property lists */	    
+    H5Pclose(file_fapl);
+    H5Pclose(fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+</pre></dir></dd>
+
+
+    <dd>The third example illustrates the two cases for retrieving the number 
+    of read attempts from the file access property list of a file opened 
+    with non-SWMR acccess.
+    <dir><pre>
+    /* Open the file with non-SWMR access and default file access property list */
+    fid = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 1 (default for non-SWMR access).
+     */
+
+    /* Close the property list */	    
+    H5Pclose(file_fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+
+    /* Create a copy of file access property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    /* Set the # of read attempts */
+    H5Pset_metadata_read_attempts(fapl, 20);
+
+    /* Open the file with non-SWMR access and the non-default file access property list */
+    fid = H5Fopen(FILE, H5F_ACC_RDONLY, fapl);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /*
+     *  The value returned in "attempts" will be 1 (default for non-SWMR access).
+     */
+
+    /* Close the property lists */	    
+    H5Pclose(file_fapl);
+    H5Pclose(fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+</pre></dir></dd></dt><br />
+  
+
+<!--__ *** FORTRAN90 INTERFACE  **********************************  -->
+<!--__ When the Fortran90 interface is complete, replace this       -->
+<!--__ section with the Fortran90 subroutine description.           -->
+<!--__                                                              -->
+<!--__ See the file h5fortran_f_insert.htm for a template and       -->
+<!--__ instructions.                                                -->
+<!--__ ***********************************************************  -->
+
+  <dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+  <dt><strong>See Also:</strong></dt>
+    <dd>
+    <li><a href="#Property-SetMetadataReadAttempts">
+        <code>H5Pset_metadata_read_attempts</code></a></li>
+    <li><a href="#File-GetMetadataReadRetriesInfo">
+        <code>H5Fget_metadata_read_retries_info</code></a></li>
+    </dd>
+    <br />
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 9 lines; they set up the table.       -->
+<!--__ ***********************************************************  -->
+
+  <dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_object_flush_cb.htm b/html/RM/H5P/H5Pget_object_flush_cb.htm
new file mode 100644
index 0000000..dafd89f
--- /dev/null
+++ b/html/RM/H5P/H5Pget_object_flush_cb.htm
@@ -0,0 +1,186 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_object_flush_cb" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 February 2014
+    </i></font></div></dt>
+    <br />
+
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetObjectFlushCb">H5Pget_object_flush_cb </a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pget_object_flush_cb (
+              <em>hid_t</em> fapl_id,  
+              <em>H5F_flush_cb_t</em> *func, 
+              <em>void</em> **user_data
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>  
+    <dd>Retrieves the object flush property values from the file access 
+    property list. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd><code>H5Pget_object_flush_cb</code> gets the user-defined callback 
+    function that is set in the file access property list <code>fapl_id</code> 
+    and stored in the parameter <code>func</code>. The callback is invoked 
+    whenever an object flush occurs in the file.  This routine also obtains 
+    the user-defined input data that is passed along to the callback function 
+    in the parameter <code>user_data</code>.
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td><code><em>hid_t</em> fapl_id</code></td>
+        <td>IN: Identifier for a file access property 
+            list.</td></tr>
+      <tr valign="top">
+        <td><code><em>H5F_flush_cb_t</em> *func  </code></td>
+        <td>IN: The user-defined callback function.</td></tr>
+      <tr valign="top">
+        <td><code><em>void</em> **user_data</code></td>
+        <td>IN: The user-defined input data for the callback function.
+            </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt> 
+    <dd>The example below illustrates the usage of this routine to obtain the 
+        object flush property values. 
+
+        <dir><pre>
+hid_t fapl_id;
+unsigned counter;
+H5F_object_flush_t *ret_cb;
+unsigned *ret_counter;
+
+/* Create a copy of the file access property list */
+fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+
+/* Set up the object flush property values */
+/* flush_cb: callback function to invoke when an object flushes (see below) */
+/* counter: user data to pass along to the callback function */
+H5Pset_object_flush_cb(fapl_id, flush_cb, &counter);
+
+/* Open the file */
+file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+/* Get the file access property list for the file */
+fapl = H5Fget_access_plist(file_id);
+
+/* Retrieve the object flush property values for the file */
+H5Pget_object_flush_cb(fapl, &ret_cb, &ret_counter);
+/* ret_cb will point to flush_cb() */
+/* ret_counter will point to counter */
+:
+:
+:
+
+/* The callback function for the object flush property */
+static herr_t
+flush_cb(hid_t obj_id, void *_udata)
+{
+    unsigned *flush_ct = (unsigned*)_udata;
+    ++(*flush_ct);
+    return 0;
+}
+</pre>
+    </dir>
+    </dd>
+    <br />
+
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+            <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+              <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+              <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+              C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5P/H5Pget_virtual_count.htm b/html/RM/H5P/H5Pget_virtual_count.htm
new file mode 100644
index 0000000..087a129
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_count.htm
@@ -0,0 +1,156 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_count" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualCount">H5Pget_virtual_count</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pget_virtual_count(
+        <em>hid_t</em> dcpl_id,
+        <em>size_t *</em>count
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Gets the number of mappings for the virtual dataset.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_count</code> gets the number of mappings for 
+        a virtual dataset that has the creation property list specified by 
+        <code>dcpl_id</code>.
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> 
+                dcpl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                virtual dataset creation property list. </td>
+        </tr><tr>
+            <td valign="top"><code><em>size_t *</em>count</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: The number of mappings.</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_count_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_count_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+<!--
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+-->
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_dsetname.htm b/html/RM/H5P/H5Pget_virtual_dsetname.htm
new file mode 100644
index 0000000..1e0c128
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_dsetname.htm
@@ -0,0 +1,195 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_dsetname" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualDsetname">H5Pget_virtual_dsetname</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>ssize_t</em> H5Pget_virtual_dsetname(
+        <em>hid_t</em> dcpl_id,
+        <em>size_t</em> index,
+        <em>char *</em>name,
+        <em>size_t</em> size
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Gets the name of a source dataset used in the mapping.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_dsetname</code> takes the dataset creation 
+        property list for the virtual dataset, <code>dcpl_id</code>, 
+        the mapping index, <code>index</code>, 
+        the size of the dataset name for a source dataset, <code>size</code>,
+        and retrieves the name of the source dataset used in the mapping. 
+        <p>
+        Up to <code>size</code> characters of the dataset name are returned 
+        in <code>name</code>; additional characters, if any, 
+        are not returned to the user application. 
+        </p>
+        <p>
+        If the length of the dataset name, which determines the required value 
+        of <code>size</code>, is unknown, a preliminary call to 
+        <code>H5Pget_virtual_dsetname</code> with the last two parameters 
+        set to <code>NULL</code> and zero respectively can be made. 
+        The return value of this call will be the size in bytes of the 
+        dataset name. That value, plus 1 for a <code>NULL</code> 
+        terminator, must then be assigned to <code>size</code> 
+        for a second <code>H5Pget_virtual_dsetname</code> call, 
+        which will retrieve the actual dataset name. 
+        </p>
+
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> dcpl_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                virtual dataset creation property list. </td>
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> index</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Mapping index.
+                <br />
+                The value of <code>index</code> is 0 (zero) or greater 
+                and less than <code><i>count</i></code>  
+                (<code>0 ≤ index < <i>count</i></code>), 
+                where <code><i>count</i></code> is the number of mappings 
+                returned by <code>H5Pget_virtual_count</code>.</td>
+        </tr><tr>
+            <td valign="top"><code><em>char *</em>name</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: A buffer containing the name of the 
+                source dataset.
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> size</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The size, in bytes, of the name buffer. 
+                <br />
+                Must be the size of the dataset name in bytes 
+                plus 1 for a <code>NULL</code> terminator.
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns the length of the dataset name if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_dsetname_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_dsetname_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+<!--
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+-->
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_filename.htm b/html/RM/H5P/H5Pget_virtual_filename.htm
new file mode 100644
index 0000000..30fbce1
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_filename.htm
@@ -0,0 +1,197 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_filename" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualFilename">H5Pget_virtual_filename</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>ssize_t</em> H5Pget_virtual_filename(
+        <em>hid_t</em> dcpl_id,
+        <em>size_t</em> index,
+        <em>char *</em>name,
+        <em>size_t</em> size
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Gets the filename of a source dataset used in the mapping.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_filename</code> takes the dataset creation 
+        property list for the virtual dataset, <code>dcpl_id</code>, 
+        the mapping index, <code>index</code>, 
+        the size of the filename for a source dataset, <code>size</code>,
+        and retrieves the name of the file for a source dataset 
+        used in the mapping. 
+        <p>
+        Up to <code>size</code> characters of the filename are returned 
+        in <code>name</code>; additional characters, if any, 
+        are not returned to the user application. 
+        </p>
+        <p>
+        If the length of the filename, which determines the required value 
+        of <code>size</code>, is unknown, a preliminary call to 
+        <code>H5Pget_virtual_filename</code> with the last two parameters 
+        set to <code>NULL</code> and zero respectively can be made. 
+        The return value of this call will be the size in bytes of the 
+        filename. That value, plus 1 for a <code>NULL</code> 
+        terminator, must then be assigned to <code>size</code> 
+        for a second <code>H5Pget_virtual_filename</code> call, 
+        which will retrieve the actual filename. 
+        </p>
+
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> dcpl_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                virtual dataset creation property list. </td>
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> index</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Mapping index.
+                <br />
+                The value of <code>index</code> is 0 (zero) or greater 
+                and less than <code><i>count</i></code>  
+                (<code>0 ≤ index < <i>count</i></code>), 
+                where <code><i>count</i></code> is the number of mappings 
+                returned by <code>H5Pget_virtual_count</code>.</td>
+        </tr><tr>
+            <td valign="top"><code><em>char *</em>name</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: A buffer containing the name of the file 
+                containing the source dataset.
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> size</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The size, in bytes, of the name buffer. 
+                <br />
+                Must be the size of the filename in bytes 
+                plus 1 for a <code>NULL</code> terminator.
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns the length of the filename if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_filename_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_filename_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+<!--
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+-->
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_printf_gap.htm b/html/RM/H5P/H5Pget_virtual_printf_gap.htm
new file mode 100644
index 0000000..8ab97b1
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_printf_gap.htm
@@ -0,0 +1,169 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_printf_gap" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualPrintfGap">H5Pget_virtual_printf_gap</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pget_virtual_printf_gap(
+        <em>hid_t</em> dapl_id,
+        <em>hsize_t</em> *gap_size
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>
+    Returns the maximum number of missing source files and/or datasets 
+    with the printf-style names when getting the extent for an unlimited 
+    virtual dataset.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_printf_gap</code> returns the maximum number 
+        of missing printf-style files and/or datasets for determining 
+        the extent of an unlimited virtual dataaset, <code>gap_size</code>,
+        using the access property list for the virtual dataset, 
+        <code>dapl_id</code>. 
+        <p />
+        The default library value for <code>gap_size</code> 
+        is <code>0</code> (zero).
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top"><code><em>hid_t</em> 
+                dapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: Dataset access property list identifier 
+                for the virtual dataset</td>
+        </tr><tr>
+            <td valign="top"><code><em>hsize_t</em> *gap_size</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: Maximum number of the files and/or 
+                datasets allowed to be missing for determining the 
+                extent of an unlimited virtual dataset with 
+                printf-style mappings.
+                <br />
+                <i>(Default: <code>0</code>)</i></td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_printf_gap_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_printf_gap_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+<!--
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+-->
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_srcspace.htm b/html/RM/H5P/H5Pget_virtual_srcspace.htm
new file mode 100644
index 0000000..ded6a2c
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_srcspace.htm
@@ -0,0 +1,165 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_srcspace" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualSrcspace">H5Pget_virtual_srcspace</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>hid_t</em> H5Pget_virtual_srcspace(
+        <em>hid_t</em> dcpl_id,
+        <em>size_t</em> index
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Gets a dataspace identifier for the selection 
+        within the source dataset used in the mapping.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_srcspace</code> takes the dataset creation 
+        property list for the virtual dataset, <code>dcpl_id</code>, 
+        and the mapping index, <code>index</code>, 
+        and returns a dataspace identifier for the selection within 
+        the source dataset used in the mapping. 
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> dcpl_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                virtual dataset creation property list. </td>
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> index</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Mapping index.
+                       <br />
+                       The value of <code>index</code> is 0 (zero) or greater 
+                       and less than <code><i>count</i></code>  
+                       (<code>0 ≤ index < <i>count</i></code>), 
+                       where <code><i>count</i></code> is the number of mappings 
+                       returned by <code>H5Pget_virtual_count</code>.</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid dataspace identifier if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_srcspace_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_srcspace_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+<!--
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+-->
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_view.htm b/html/RM/H5P/H5Pget_virtual_view.htm
new file mode 100644
index 0000000..0390660
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_view.htm
@@ -0,0 +1,167 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_view" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualView">H5Pget_virtual_view</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pget_virtual_view(
+        <em>hid_</em> dapl_id,
+        <em>H5D_vds_view_t</em> *view
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the view of a virtual dataset accessed with 
+         <code>dapl_id</code>.
+         </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_view</code> takes the virtual dataset
+        access property list, <code>dapl_id</code>, 
+        and retrieves the flag, <code>view</code>, 
+        set by the <code>H5Pset_virtual_view</code> call. 
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table >
+        <tr>
+            <td valign="top"><code><em>hid_t</em> 
+                dapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: Dataset access property list identifier 
+                for the virtual dataset</td>
+        </tr><tr>
+            <td valign="top"><code><em>H5D_vds_view_t</em> *view</code></td>
+            <td><code> </code></td>
+            <td valign="top">OUT: The flag specifying the view of the 
+                virtual dataset.
+                <br />
+                Valid values are:
+                <br />
+                <code>    H5D_VDS_FIRST_MISSING</code>
+                <br />
+                <code>    H5D_VDS_LAST_AVAILABLE</code>
+
+                </td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_view_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_view_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+<!--
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+-->
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pget_virtual_vspace.htm b/html/RM/H5P/H5Pget_virtual_vspace.htm
new file mode 100644
index 0000000..6b20d8c
--- /dev/null
+++ b/html/RM/H5P/H5Pget_virtual_vspace.htm
@@ -0,0 +1,165 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_virtual_vspace" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-GetVirtualVspace">H5Pget_virtual_vspace</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>hid_t</em> H5Pget_virtual_vspace(
+        <em>hid_t</em> dcpl_id,
+        <em>size_t</em> index
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Gets a dataspace identifier for the selection within 
+        the virtual dataset used in the mapping.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pget_virtual_vspace</code> takes the dataset creation 
+        property list for the virtual dataset, <code>dcpl_id</code>, 
+        and the mapping index, <code>index</code>, 
+        and returns a dataspace identifier for the selection within 
+        the virtual dataset used in the mapping. 
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> dcpl_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                virtual dataset creation property list. </td>
+        </tr><tr>
+            <td valign="top"><code><em>size_t</em> index</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Mapping index.
+                <br />
+                The value of <code>index</code> is 0 (zero) or greater 
+                and less than <code><i>count</i></code>  
+                (<code>0 ≤ index < <i>count</i></code>), 
+                where <code><i>count</i></code> is the number of mappings 
+                returned by <code>H5Pget_virtual_count</code>.</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid dataspace identifier if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pget_virtual_vspace_f
+    <dd>
+
+        <?php include("H5P/h5pget_virtual_vspace_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+<!--
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+-->
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_all_coll_metadata_ops.htm b/html/RM/H5P/H5Pset_all_coll_metadata_ops.htm
new file mode 100644
index 0000000..db0f1ec
--- /dev/null
+++ b/html/RM/H5P/H5Pset_all_coll_metadata_ops.htm
@@ -0,0 +1,219 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_coll_metadata_read" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetAllCollMetadataOps">H5Pset_all_coll_metadata_ops</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_all_coll_metadata_ops(
+              <em>hid_t</em> accpl_id,
+              <em>hbool_t</em> is_collective
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Sets metadata I/O mode for read operations to collective 
+        or independent (default).
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pset_all_coll_metadata_ops</code> sets the metadata I/O mode
+        for read operations in the access property list <code>accpl</code>.  
+        </p>
+        <p>
+        When engaging in parallel I/O, all metadata write operations 
+        must be collective.
+        If <code>is_collective</code> is <code>TRUE</code>, this property 
+        specifies that the HDF5 Library will perform all metadata read 
+        operations collectively;
+        if <code>is_collective</code> is <code>FALSE</code>, such operations 
+        may be performed independently. 
+        </p>
+        <p>
+        Users must be aware that several HDF5 operations can potentially issue 
+        metadata reads.  These include opening a dataset, datatype, or group; 
+        reading an attribute; or issuing a <i>get info</i> call such as
+        getting information for a group with <code>H5Gget_info</code>.
+        Collective I/O requirements must be kept in mind when issuing such calls 
+        in the context of parallel I/O.
+        </p>
+        <p>
+        If this property is set to true on a file access property list 
+        that is used in creating or opening a file, then the HDF5 Library 
+        will assume that all metadata read operations issued on that 
+        file identifier will be issued collectively from all ranks 
+        irrespective of the individual setting of a particular operation. 
+        If this assumption is not adhered to, corruption will be introduced 
+        in the metadata cache and HDF5’s behavior will be undefined.
+        </p>
+        <p>
+        Alternatively, a user may wish to avoid setting this property globally 
+        on the file access property list, and individually set it on 
+        particular object access property lists 
+        (dataset, group, link, datatype, attribute access property lists) 
+        for certain operations. This will indicate that only the operations 
+        issued with such an access property list will be called collectively 
+        and other operations may potentially be called independently. 
+        There are, however, several HDF5 operations that can issue 
+        metadata reads but have no property list in their function signatures 
+        to allow passing the collective requirement property. 
+        For those operations, the only option is to set the 
+        global collective requirement property on the file access property list;
+        otherwise the metadata reads that can be triggered from those 
+        operations will be done independently by each process.
+        </p>
+        <p>
+        Functions that do not accommodate an access property list
+        but that might issue metadata reads are listed in
+        “<a href="MetadataRead_NoAccesPList.html">Functions
+        with No Access Property List Parameter that May Generate Metadata
+        Reads</a>.”
+        </p>
+    </dd></dt>
+
+<dt><strong>Warning:</strong>
+    <dd>As noted above, corruption will be introduced into the metadata cache 
+        and HDF5 Library behavior will be undefined when both of the following 
+        conditions exist:
+        <ul>
+            <li>A file is created or opened with a file access property list 
+                in which the collective metadata I/O property is set to 
+                <code>TRUE</code>.
+            <li>Any function is called that triggers 
+                an independent metadata read while
+                the file remains open with that file access property list.
+        </ul>
+        <p>
+        An approach that avoids this corruption risk is described above.
+        </p>
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top" width="15%"><code><em>hid_t</em> accpl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: File, group, dataset, datatype, link,
+               or attribute access property list identifier</td>
+        </tr><tr>
+            <td valign="top"><code><em>hbool_t</em> is_collective</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Boolean value indicating whether 
+                metadata reads are collective (<code>TRUE</code>) 
+                or independent (<code>FALSE</code>)
+                <br />
+                <i>Default mode: Independent (</i><code>FALSE</code><i>)
+                </i></td>
+        </tr>
+        </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pset_all_coll_metadata_ops_f
+    <dd>
+
+        <?php include("H5P/h5pset_all_coll_metadata_ops_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href=
+              "H5Pset_coll_metadata_write.htm">H5Pset_coll_metadata_write</a></li>
+          <li><a href=
+              "H5Pget_coll_metadata_write.htm">H5Pget_coll_metadata_write</a></li>
+        </ul>
+    </td><td width="50%"align="left" valign="top">
+        <ul>
+<!--
+          <li><a href="H5Pset_all_coll_metadata_ops.htm">H5Pset_all_coll_metadata_ops</a></li>
+-->
+          <li><a href="H5Pget_all_coll_metadata_ops.htm">H5Pget_all_coll_metadata_ops</a></li>
+        </ul>
+    </td></tr>
+    <tr><td colspan="2" align="left">
+          
+        <ul>
+          <li>“<a href="MetadataRead_NoAccesPList.html">Functions
+              with No Access Property List Parameter that May Generate 
+              Metadata Reads</a>”</li>
+        </ul>
+    </td></tr>
+    </table>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function and Fortran wrapper introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_append_flush.htm b/html/RM/H5P/H5Pset_append_flush.htm
new file mode 100644
index 0000000..5f07158
--- /dev/null
+++ b/html/RM/H5P/H5Pset_append_flush.htm
@@ -0,0 +1,271 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_append_flush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 7 January 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetAppendFlush">H5Pset_append_flush</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pset_append_flush (
+              <em>hid_t</em> dapl_id, 
+              <em>int</em> ndims, 
+              <em>const hsize_t</em> boundary[], 
+              <em>H5D_append_cb_t</em>  func, 
+              <em>void</em> *user_data
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>  
+    <dd>Sets two actions to perform when the size of a dataset’s 
+        dimension being appended reaches a specified boundary. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd><code>H5Pset_append_flush</code> sets the following two actions to 
+        perform for a dataset associated with the dataset access property 
+        list <code>dapl_id</code>: 
+        <p>
+        <ul>
+            <li>Call the callback function <code>func</code> set in the 
+                property list</li>
+            <li>Flush the dataset associated with the dataset access 
+                property list</li>
+        </ul>
+        </p>
+        <p>
+        When a user is appending data to a dataset via <code>H5DOappend</code> 
+        and the dataset’s newly extended dimension size hits a specified 
+        boundary, the library will first perform action #1 listed above.  
+        Upon return from the callback function, the library will then perform 
+        the above action #2 and return to the user.  If no boundary is hit 
+        or set, the two actions above are not invoked.</p>
+        <p>
+        The specified boundary is indicated by the parameter 
+        <code>boundary</code>. 
+        It is a 1-dimensional array with <code>ndims</code> elements, 
+        which should be the same as the rank of the dataset’s dataspace.  
+        While appending to a dataset along a particular dimension index via 
+        <code>H5DOappend</code>, the library determines a boundary is reached 
+        when the resulting dimension size is divisible by 
+        <code>boundary[index]</code>. 
+        A zero value for <code>boundary[index]</code> indicates no 
+        boundary is set for that dimension index.</p>
+        <p>
+        The setting of this property will apply only for a chunked dataset 
+        with an extendible dataspace. A dataspace is extendible when it is 
+        defined with either one of the following: </p>
+        <ul>
+          <li>A dataspace with fixed current and maximum dimension sizes</li>
+          <li>A dataspace with at least one unlimited dimension for its 
+              maximum dimension size</li>
+        </ul>
+
+        <p>
+        When creating or opening a chunked dataset, the library will check 
+        whether the boundary as specified in the access property list is set 
+        up properly. The library will fail the dataset create or open if the
+        following conditions are true: </p>
+        <ul>
+          <li><code>ndims</code>, the number of elements for 
+              <code>boundary</code>, is not the same as the rank of the 
+              dataset’s dataspace.</li> 
+          <li>A non-zero boundary value is specified for a non-extendible 
+              dimension.</li>
+        </ul>
+
+        <p>
+        The callback function <code>func</code> must conform to the
+        following prototype:</p> 
+        <ul>
+            <li><code>typedef <em>herr_t</em> (H5D_append_cb_t)(<em>hid_t</em> 
+                dataset_id, <em>hsize_t</em> *cur_dims, <em>void</em> 
+                *user_data) </code>
+        </ul>
+        <p>
+        The parameters of the callback function, per the above prototype, 
+        are defined as follows:</p>
+        <ul>
+            <li><code>dataset_id</code> is the dataset identifier.</li>
+            <li><code>cur_dims</code> is the dataset’s current 
+                dimension sizes when a boundary is hit.</li>
+            <li><code>user_data</code> is the user-defined input data.</li>
+        </ul>
+    </dd>
+    <br />
+
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd><table width="100%">
+        <tr valign="top">
+          <td width="20%"><code><em>hid_t</em> dapl_id</code></td>
+          <td>IN: Dataset access property list identifier.</td></tr>
+        <tr valign="top">
+          <td><code><em>int</em> ndims</code></td>
+          <td>IN: The number of elements for boundary.</td></tr>
+        <tr valign="top">
+          <td><code><em>hsize_t</em> *boundary</code></td>
+          <td>IN: The dimension sizes used to determine the boundary.
+              </td></tr>
+        <tr valign="top">
+          <td><code><em>H5D_append_cb_t</em> func   </code></td>
+          <td>IN: The user-defined callback function.</td></tr>
+        <tr valign="top">
+          <td><code><em>void</em> *user_data</code></td>
+          <td>IN: The user-defined input data.</td></tr>
+        </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; otherwise returns a 
+    negative value.</dd>
+    <br />
+
+<dt><strong>Example Usage:</strong></dt> 
+    <dd>The example below illustrates the usage of this public routine to 
+        manage flush behavior while appending to a dataset. Note also the 
+        use of <a href="H5DOappend.htm"><code>H5DOappend</code></a>.
+        <dir><pre>
+hsize_t dims[2] = {0, 100};
+hsize_t max_dims[2] = {H5S_UNLIMITED, 100};
+hsize_t boundary_dims[2] = {5, 0};
+unsigned counter;
+void *buf;
+hid_t file_id;
+hid_t dataset_id, dapl_id, type;
+
+/* Open the file */
+file_id = H5Fopen(FILE, H5F_ACC_RDWR|H5F_ACC_SWMR_WRITE, H5P_DEFAULT);
+
+/* Create a copy of the dataset access property list */
+dapl_id = H5Pcreate(H5P_DATASET_ACCESS);
+
+/* Set up the append property values */
+/* boundary_dims[0]=5: to invoke callback and flush every 5 lines */
+/* boundary_dims[1]=0: no boundary is set for the non-extendible dimension */
+/* append_cb: callback function to invoke when hitting boundary (see below) */
+/* counter: user data to pass along to the callback function */
+H5Pset_append_flush(dapl_id, 2, boundary_dims, append_cb, &counter);
+
+/* DATASET is a 2-dimensional chunked dataset with dataspace: 
+   dims[] and max_dims[] */
+dataset_id = H5Dopen2(file_id, �dataset�, dapl_id);
+
+/* Get the dataset�s datatype */
+type = H5Dget_type(dataset_id);
+
+/* Append 50 lines along the unlimited dimension (index = 0) to the dataset */
+for(n = 0; n < 50; n++) {
+
+    /* Append 1 line to the dataset */  
+    /* Whenever hitting the specified boundary i.e., every 5 lines, 
+       the library will invoke append_cb() and then flush the dataset. */ 
+    H5DOappend(dataset_id, H5P_DEFAULT, 0, 1, type, buf);
+}
+:
+:
+:
+/* counter will be equal to 10 */
+:
+:
+:
+
+/* The callback function */
+static herr_t
+append_cb(hid_t dset_id, hsize_t *cur_dims, void *_udata)
+{
+    unsigned *count = (unsigned *)_udata;
+    ++(*count++);
+    return 0;
+} /* append_cb() */
+</pre>
+    </dir>
+    </dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pset_object_flush_cb.htm">H5Pset_object_flush_cb</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5P/H5Pset_coll_metadata_write.htm b/html/RM/H5P/H5Pset_coll_metadata_write.htm
new file mode 100644
index 0000000..d69ab57
--- /dev/null
+++ b/html/RM/H5P/H5Pset_coll_metadata_write.htm
@@ -0,0 +1,156 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_coll_metadata_write" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetCollMetadataWrite">H5Pset_coll_metadata_write</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_coll_metadata_write(
+              <em>hid_t</em> fapl_id,
+              <em>hbool_t</em> is_collective
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Sets metadata write mode to collective or independent (default).
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pset_coll_metadata_write</code> tells the HDF5 Library 
+        whether to perform metadata writes collectively (<code>TRUE</code>) 
+        or independently (<code>FALSE</code>). 
+        </p>
+        <p>
+        If collective access is selected, then on a flush of the metadata 
+        cache, all processes will divide the metadata cache entries to be 
+        flushed evenly among themselves and issue a single MPI-IO collective 
+        write operation. This is the preferred method when the size of the 
+        metadata created by the application is large. 
+        </p>
+        <p>
+        If independent access is selected, the library uses the default method 
+        for doing metadata I/O either from process zero or independently from 
+        each process. 
+        </p>
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top" width="15%"><code><em>hid_t</em> fapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: File access propery list identifier</td>
+        </tr><tr>
+            <td valign="top"><code><em>hbool_t</em> is_collective</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Boolean value indicating whether 
+                metadata writes are collective (<code>TRUE</code>) 
+                or independent (<code>FALSE</code>)
+                <br />
+                <i>Default mode: Independent (</i><code>FALSE</code><i>)
+                </i></td>
+        </tr>
+        </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pset_coll_metadata_write_f
+    <dd>
+
+        <?php include("H5P/h5pset_coll_metadata_write_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+        <ul>
+<!--
+          <li><a href=
+              "H5Pset_coll_metadata_write.htm">H5Pset_coll_metadata_write</a></li>
+-->
+          <li><a href=
+              "H5Pget_coll_metadata_write.htm">H5Pget_coll_metadata_write</a></li>
+        </ul>
+    </td><td width="50%"align="left" valign="top">
+        <ul>
+          <li><a href="H5Pset_all_coll_metadata_ops.htm">H5Pset_all_coll_metadata_ops</a></li>
+          <li><a href="H5Pget_all_coll_metadata_ops.htm">H5Pget_all_coll_metadata_ops</a></li>
+        </ul>
+    </td></tr>
+    </table>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function and Fortran wrapper introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_file_space.htm b/html/RM/H5P/H5Pset_file_space.htm
index 67fdcdd..646571f 100644
--- a/html/RM/H5P/H5Pset_file_space.htm
+++ b/html/RM/H5P/H5Pset_file_space.htm
@@ -1,33 +1,36 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.                                               *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "H5Pset_file_space" -->
 <hr>
 <dl>
 
   <dt><div align=right><font color=999999 size=-1><i>
-      Last modified: 19 April 2012
+      Last modified: 10 February 2016
       </i></font></div>
 
-  <dt><strong>Name:</strong> <a name="Property-SetFileSpace">H5Pset_file_space</a>
+  <dt><strong>Name:</strong> 
+      <a name="Property-SetFileSpace">H5Pset_file_space</a>
 
   <dt><strong>Signature:</strong>
     <dd><em>herr_t </em><code>H5Pset_file_space</code>(
@@ -39,7 +42,7 @@
   <p>
   <dt><strong>Purpose:</strong>
     <dd>Sets the file space management strategy and/or
-        free-space section threshold for an HDF5 file.
+	free-space section threshold for an HDF5 file.
 
   <p>
   <dt><strong>Motivation:</strong>
@@ -73,69 +76,73 @@
   <p>
   <dt><strong>Parameters:</strong>
     <dd>
-    <table>
+    <table border="0">
       <tr valign="top">
-        <td><em>hid_t </em><code>fcpl_id</code>
-            </td><td>    </td>
+        <td colspan="3"><em>hid_t </em><code>fcpl_id</code>
+            </td>
+        </tr><tr>
+        <td colspan="2"><code>      </code></td>
         <td>IN: The file creation property list identifier.
             </td></tr>
 
       <tr valign="top">
         <td colspan="3"><em>H5F_file_space_type_t</em> <code>strategy</code>
-        </td></tr>
-        <tr><td> </td><td>    </td>
+        </td>
+      </tr><tr>
+        <td colspan="2">    </td>
         <td>IN: The strategy for file space management.
             <p>
             Valid values are as follows:
             <table border="0">
               <tr valign="top">
-                <td colspan="2">
-                    <code>H5F_FILE_SPACE_ALL_PERSIST    </code>
-                </td></tr>
-                <tr><td> </td>
+                <td colspan="2"><code>H5F_FILE_SPACE_ALL_PERSIST</code></td>
+                </tr><tr>
+                <td><code>      </code></td>
                 <td>With this strategy, the free-space managers track the
-                    free space that results from the manipulation of HDF5 
-                    objects in the HDF5 file.  The free space information 
-                    is saved when the file is closed, and reloaded when the 
-                    file is reopened.
+                    free space that results from the manipulation of 
+                    HDF5 objects in the HDF5 file.  
+                    The free space information is saved when the
+                    file is closed, and reloaded when the file is reopened.
                     <br>
                     When space is needed for file metadata or raw data, 
-                    the HDF5 library first requests space from the library’s 
-                    free-space managers. If the request is not satisfied, 
-                    the library requests space from the aggregators. 
-                    If the request is still not satisfied, 
+                    the HDF5 library first requests space from the 
+                    library's free-space managers. If the request is 
+                    not satisfied, the library requests space from the 
+                    aggregators. If the request is still not satisfied, 
                     the library requests space from the virtual file driver. 
-                    That is, the library will use all of the mechanisms for 
-                    allocating space.
+                    That is, the library will use all of the mechanisms 
+                    for allocating space.
                 </td>
               </tr>
 
               <tr valign="top">
-                <td><code>H5F_FILE_SPACE_ALL   </code></td>
-                <td>This is the library’s default file space management 
-                    strategy. 
-                    With this strategy, the free-space managers track the 
-                    free space that results from the manipulation of HDF5 
-                    objects in the HDF5 file.
-                    The free space information is NOT saved when the file is 
-                    closed and the free space that exists upon file closing 
-                    becomes unaccounted space in the file.
+                <td colspan="2"><code>H5F_FILE_SPACE_ALL    </code> 
+                      <i>(Default file space management strategy)</i>
+                      </td>
+                </tr><tr>
+                <td><code> </code></td>
+                <td>With this strategy, the free-space managers track the 
+                    free space that results from the manipulation of 
+                    HDF5 objects in the HDF5 file.  
+                    The free space information is NOT saved when the file 
+                    is closed and the free space that exists upon 
+                    file closing becomes unaccounted space in the file.
                     <br>
                     Like the previous strategy, the library will try all of 
-                    the mechanisms for allocating space.  
-                    When space is needed for file metadata or raw data, 
-                    the library first requests space from the free-space
-                    managers.  If the request is not satisfied, the library 
-                    requests space from the aggregators.  If the request is 
-                    still not satisfied, the library requests space from the 
+                    the mechanisms for allocating space.  When space is 
+                    needed for file metadata or raw data, the library first 
+                    requests space from the free-space managers.  
+                    If the request is not satisfied, the library requests
+                    space from the aggregators.  If the request is still 
+                    not satisfied, the library requests space from the 
                     virtual file driver.
                 </td>
               </tr>
 
               <tr valign="top">
-                <td colspan="2"><code>H5F_FILE_SPACE_AGGR_VFD</code>
-                </td></tr>
-                <tr><td> </td>
+                <td colspan="2"><code>H5F_FILE_SPACE_AGGR_VFD</code></td>
+                </tr><tr>
+                <td><code> </code></td>
                 <td>With this strategy, the library does not track free space 
                     that results from the manipulation of HDF5 obejcts in the 
                     HDF5 file and the free space becomes unaccounted space in 
@@ -149,44 +156,45 @@
               </tr>
 
               <tr valign="top">
-                <td><code>H5F_FILE_SPACE_VFD</code></td>
+                <td colspan="2"><code>H5F_FILE_SPACE_VFD</code></td>
+                </tr><tr>
+                <td><code> </code></td>
                 <td>With this strategy, the library does not track free space 
-                    that results from the manipulation of HDF5 obejcts in the 
-                    HDF5 file and the free space becomes unaccounted space 
+                    that results from the manipulation of HDF5 obejcts in 
+                    the HDF5 file and the free space becomes unaccounted space 
                     in the file.
                     <br>
                     When space is needed for file metadata or raw data,
                     the library requests space from the virtual file driver. 
                 </td>
               </tr>
+              <tr valign="top">
+                <td colspan="2">
+                    Passing a value of zero (<code>0</code>) indicates that 
+                    the value of <code>strategy</code> is not to be modified.
+                </td>
+              </tr>
 
             </table>
-<!--
-            <p>
-            The <code><em>H5F_file_space_type_t</em></code> 
-            <small>ENUM</small> is fully described in 
-            <a href="../examples/H5F_file_space_type_t.html">
-            <code>H5F_file_space_type_t.html</code></a>.
+
             </td></tr>
--->
 
       <tr valign="top">
-        <td><em>hsize_t </em><code>threshold</code>
-            </td><td> </td>
-        <td>IN: The free-space section threshold, in bytes.
-            Can be any non-negative integer value.
-            <br>
-            A value of <code>0</code> (zero) specifies to retain the current
-            setting.
+        <td colspan="3"><em>hsize_t </em><code>threshold</code>
+            </td>
+        </tr><tr>
+        <td colspan="2"> </td>
+        <td>IN: The free-space section threshold.
+	    The library default is 1, which is to track all free-space sections.
             <p>
-            <i>Default:</i> <code>1</code> (one). 
-            Track all free-space sections of 1 byte or larger; 
-            in other words, track all free-space sections.
+            Passing a value of zero (<code>0</code>) indicates that 
+            the value of <code>threshold</code> is not to be modified.
             </td></tr>
     </table>
 
   <p>
   <dt><strong>Returns:</strong>
+
     <dd>Returns a non-negative value if successful;
         otherwise returns a negative value.
 
@@ -196,30 +204,35 @@
         <ul>
             <li><code>strategy</code> is not one of the valid values listed 
                 above.
-            <li>The library fails to retrieve the file creation property list 
-                <code>fcpl_id</code>.
+            <li>The library fails to retrieve the file creation property 
+                list associated with <code>fcpl_id</code>.
             <li>The library fails to set the strategy and/or threshold 
-                in the file creation property list <code>fcpl_id</code>.
+                in the file creation property list associated with 
+                <code>fcpl_id</code>.
         </ul>
 
   <p>
   <dt><strong>Example Usage:</strong>
 
-    <dd>The first example sets the file space management strategy for the 
-        file associated with <code>fcpl</code> to 
+    <dd>The first example sets the file space management strategy for 
+	the file associated with <code>fcpl</code> to 
         <code>H5F_FILE_SPACE_ALL_PERSIST</code>.
-        It also sets the free-space section threshold to <code>10</code>, 
-        which means that the library’s free-space managers will track only 
-        free-space sections whose size is >= 10 for the file.
+	It also sets the free-space section threshold to <code>10</code>, 
+	which means that the library's free-space managers will track 
+	only free-space sections whose size is greater than or equal to 10 
+        for the file.
+
 <dir><pre>
 H5Pset_file_space(fcpl, H5F_FILE_SPACE_ALL_PERSIST, (hsize_t)10);
 </pre></dir>
     <p>
 
-    <dd>The second example sets the file space management strategy for the
-        file associated with <code>fcpl</code> to 
-        <code>H5F_FILE_SPACE_VFD</code>.  It does not change the free-space 
-        section threshold in use for the file.
+    <dd>The second example sets the file space management strategy for 
+	the file associated with <code>fcpl</code> to 
+        <code>H5F_FILE_SPACE_VFD</code>.
+	It does not change the free-space section threshold in use for 
+        the file.
+
 <dir><pre>
 H5Pset_file_space(fcpl, H5F_FILE_SPACE_VFD, (hsize_t)0);
 </pre></dir>
@@ -233,28 +246,78 @@ H5Pset_file_space(fcpl, H5F_FILE_SPACE_VFD, (hsize_t)0);
 <!--__ See the file h5fortran_f_insert.htm for a template and       -->
 <!--__ instructions.                                                -->
 <!--__ ***********************************************************  -->
+  <p>
 
 
   <p>
   <dt><strong>See Also:</strong>
-    <dd><a href="../RM/RM_H5P.html#Property-GetFileSpace">
+
+<!-- FOR FINAL RM INTEGRATION
+
+    <dd><a href="RM_H5P.html#Property-SetFileSpace">
+        <code>H5Pset_file_space</code></a>
+        <br />
+        <a href="RM_H5P.html#Property-GetFileSpace">
         <code>H5Pget_file_space</code></a>
         <p>
 
-<!--
-        <a href="../html/RM/H5function.html#H5F_file_space_type_t">
-        <code>H5F_file_space_type_t</code></a>
+        <a href="RM_H5F.html#File-GetFreeSections">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetFreespace">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="RM_H5F.html#File-GetInfo">
+        <code>H5Fget_info</code></a>
         <p>
--->
 
-        <a href="../RM/Tools.html#Tools-Repack"><code>h5repack</code></a>
+        <a href="Tools.html#h5repack"><code>h5repack</code></a>
+        <br />
+        <a href="Tools.html#h5dump"><code>h5dump</code></a>
+        <br />
+        <a href="Tools.html#h5stat"><code>h5stat</code></a>
         <p>
-        <a href="../RM/Tools.html#Tools-Dump"><code>h5dump</code></a>
+
+        <a href="../?????/FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+END FINAL RM INTEGRATION -->
+
+<!-- FOR docNewFeatures ONLY                                -->
+
+    <dd>
+<!--
+        <a href="H5Pset_file_space.htm">
+        <code>H5Pset_file_space</code></a>
+        <br />
+-->
+        <a href="H5Pget_file_space.htm">
+        <code>H5Pget_file_space</code></a>
         <p>
-        <a href="../RM/Tools.html#Tools-Stat"><code>h5stat</code></a>
+
+        <a href="H5Fget_free_sections.htm">
+        <code>H5Fget_free_sections</code></a>
+        <br />
+        <a href="H5Fget_freespace.htm">
+        <code>H5Fget_freespace</code></a>
+        <br />
+        <a href="H5Fget_info.htm">
+        <code>H5Fget_info</code></a>
+        <p>
+
+        <a href="h5repack.htm"><code>h5repack</code></a>
+        <br />
+        <a href="h5dump.htm"><code>h5dump</code></a>
+        <br />
+        <a href="h5stat.htm"><code>h5stat</code></a>
         <p>
-        <a href="../Advanced/FileSpaceManagement/FileSpaceManagement.pdf">
-           <cite>HDF5 File Space Management</cite></a>
+
+        <a href="FileSpaceManagement.pdf"><cite>HDF5 
+        Guide to File Space Management</cite></a>
+
+<!-- END docNewFeatures ONLY                                -->
+
+    </dd></dt>
 
   <p>
   <dt><strong>History:</strong>
@@ -270,6 +333,16 @@ H5Pset_file_space(fcpl, H5F_FILE_SPACE_VFD, (hsize_t)0);
           <td valign="top">
             C function introduced in this release.</td>
         </tr>
+
+<!--__ ***********************************************************  -->
+<!--__ If adding a new C functions, include the following 5 lines,  -->
+<!--__ replacing '*.**.**' with the appropriate release number,     -->
+<!--__ but otherwise without modification.                          -->
+<!--__ ***********************************************************  -->
+<!--__ If adding a new Fortran subroutine, include the following    -->
+<!--__ 5 lines, replacing '*.**.**' with the appropriate release    -->
+<!--__ number, but otherwise without modification.                  -->
+<!--__ ***********************************************************  -->
 <!--
         <tr>
           <td valign="top">*.**.**</td>
@@ -277,8 +350,13 @@ H5Pset_file_space(fcpl, H5F_FILE_SPACE_VFD, (hsize_t)0);
             Fortran90 subroutine introduced in this release.</td>
         </tr>
 -->
-        </table>
 
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 3 lines; they close the "History:"    -->
+<!--__ table and the function entry.                                -->
+<!--__ ***********************************************************  -->
+        </tr>
+        </table>
 </dl>
 
 
diff --git a/html/RM/H5P/H5Pset_layout.htm b/html/RM/H5P/H5Pset_layout.htm
index 877d268..7836330 100644
--- a/html/RM/H5P/H5Pset_layout.htm
+++ b/html/RM/H5P/H5Pset_layout.htm
@@ -24,10 +24,11 @@
 <dl>
 
   <dt><div align=right><font color=999999 size=-1><i>
-      Last modified: 11 May 2011
+      Last modified: 16 March 2016
       </i></font></div>
 
   <dt><strong>Name:</strong> <a name="Property-SetLayout">H5Pset_layout</a>
+
   <dt><strong>Signature:</strong>
     <dd><em>herr_t </em><code>H5Pset_layout</code>(
                    <em>hid_t</em> <code>plist</code>,
@@ -44,40 +45,42 @@
         raw data for a dataset.  
         This function is only valid for dataset creation property lists.
         <p>
-	Valid values for <code>layout</code> are:
+        Valid values for <code>layout</code> are:
         <dir>
         <dl>
-            <dt>H5D_COMPACT  
+            <dt><code>H5D_COMPACT</code>  
                 <dd>Store raw data in the dataset object header in file.
                     This should only be used for datasets with small
                     amounts of raw data.  
                     The raw data size limit is 64K (65520 bytes).
                     Attempting to create a dataset with raw data 
                     larger than this limit will cause the
-                    <a href="RM_H5D.html#Dataset-Create">H5Dcreate</a>
+                    <a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a>
                     call to fail.
-            <dt>H5D_CONTIGUOUS
+            <dt><code>H5D_CONTIGUOUS</code>
                 <dd>Store raw data separately from the object header in one
                     large chunk in the file.
-            <dt>H5D_CHUNKED
+            <dt><code>H5D_CHUNKED</code>
                 <dd>Store raw data separately from the object header as 
                     chunks of data in separate locations in the file.
+            <dt><code>H5D_VIRTUAL</code>
+                <dd>Draw raw data from multiple datasets in different files.
         </dl>
         </dir>
         <p>
         Note that a compact storage layout may affect writing data to
         the dataset with parallel applications.  See note in
-	<a href="RM_H5D.html#Dataset-Write">H5Dwrite</a>
+        <a href="RM_H5D.html#Dataset-Write"><code>H5Dwrite</code></a>
         documentation for details.
 
   <p />
   <dt><strong>Parameters:</strong>
     <dd><table>
         <tr>
-		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top"><em>hid_t</em> <code>plist</code></td>
             <td valign="top">IN: Identifier of property list to query.</td></tr>
         <tr>
-		    <td valign="top"><em>H5D_layout_t</em> <code>layout    </code></td>
+            <td valign="top"><em>H5D_layout_t</em> <code>layout    </code></td>
             <td valign="top">IN: Type of storage layout for raw data.</td></tr>
     </table></dd>
 
@@ -89,7 +92,7 @@
   <p />
   <dt><strong>Fortran90 Interface:</strong> h5pset_layout_f
     <dd>
-	<pre>
+    <pre>
 SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr)
   IMPLICIT NONE
   INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
@@ -98,17 +101,34 @@ SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr)
                                        !    H5D_COMPACT_F
                                        !    H5D_CONTIGUOUS_F
                                        !    H5D_CHUNKED_F
+                                       !    H5D_VIRTUAL_F
   INTEGER, INTENT(OUT) :: hdferr       ! Error code
                                        ! 0 on success and -1 on failure
 END SUBROUTINE h5pset_layout_f
-	</pre>		
-		
-		<!--<dt><strong>Non-C API(s):</strong>
-    	<dd>
-        
-        <img src="Graphics/Java.gif"> 
-        <img src="Graphics/C++.gif">
-        -->
+    </pre>
+
+<dt><strong>See Also:</strong></dt>
+    <dd>Virtual datasets:   <a href="H5Pset_virtual.htm">H5Pset_virtual</a>
+    </dd>
+    <br />
+
+  <p />
+  <dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        <code>H5D_VIRTUAL</code> added in this release.</td>
+    </tr>
+    </table>
+    </dd>
+
 </dl>
 
 
diff --git a/html/RM/H5P/H5Pset_mdc_log_options.htm b/html/RM/H5P/H5Pset_mdc_log_options.htm
new file mode 100644
index 0000000..77aad05
--- /dev/null
+++ b/html/RM/H5P/H5Pset_mdc_log_options.htm
@@ -0,0 +1,166 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_mdc_log_options" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 7 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetMdcLogOptions">H5Pset_mdc_log_options</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pset_mdc_log_options(
+              <em>hid_t</em> fapl_id, 
+              <em>hbool_t</em> is_enabled, 
+              <em>char</em> *location, 
+              <em>hbool_t</em> start_on_access
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>
+    <dd>Sets metadata cache logging options.</dd>
+    <br />
+
+<dt><strong>Description:</strong></dt>
+    <dd>The metadata cache is a central part of the HDF5 library 
+    through which all <em>file metadata</em> reads and writes take 
+    place. File metadata is normally invisible to the user and is used 
+    by the library for purposes such as locating and indexing data. 
+    File metadata should not be confused with <em>user metadata</em>, 
+    which consists of attributes created by users and attached to 
+    HDF5 objects such as datasets via H5A API calls. 
+    
+    <p>Due to the complexity of the cache, a trace/logging feature has 
+    been created that can be used by HDF5 developers for debugging and 
+    performance analysis. The functions that control this functionality 
+    will normally be of use to a very limited number of developers 
+    outside of The HDF Group. The functions have been documented to help 
+    users create logs that can be sent with bug reports.</p>
+    
+    <p>Control of the log functionality is straightforward. Logging is 
+    enabled via the <code>H5Pset_mdc_log_options()</code> function, 
+    which will modify the file access property list used to open or create 
+    a file. This function has a flag that determines whether logging 
+    begins at file open or starts in a paused state. Log messages can 
+    then be controlled via the <code>H5Fstart/stop_logging()</code> 
+    functions. <code>H5Pget_mdc_log_options()</code> can be used to 
+    examine a file access property list, and 
+    <code>H5Fget_mdc_logging_status()</code> will return the current 
+    state of the logging flags.</p>
+    
+    <p>The log format is described in the 
+    <a href="Design-MetadataCache-Logging-THG20140224-v4.pdf">
+    <em>Metadata Cache Logging</em></a> document.</p></dd>
+    <br />
+
+<dt><strong>Notes:</strong></dt>
+    <dd>Logging is disabled by default.
+    
+    <p>When enabled and currently logging, the overhead of the logging 
+    feature will almost certainly be significant.</p>
+    
+    <p>The log file is currently manipulated using the C standard 
+    library’s buffered I/O calls (for example, fprintf) regardless 
+    of the virtual file driver (VFD) used. Log events are flushed 
+    immediately after the write call.</p>
+    
+    <p>On Windows, the location parameter must be an ASCII string since 
+    the Windows standard C library’s I/O functions cannot handle 
+    UTF-8 file names. </p>
+    
+    <p>The log file will be created when the HDF5 file is opened or 
+    created regardless of the value of the <code>start_on_access</code> 
+    parameter. The log file will stay open as long as the HDF5 file is open.
+    </p></dd>
+    <br />
+
+
+
+<dt><strong>Parameters:</strong></dt>
+    <dd>
+    <table width="100%">
+      <tr valign="top">
+        <td width="15%"><code><em>hid_t</em> fapl_id</code> </td>
+        <td width="85%">IN: File access property list identifier.
+            </td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> is_enabled</code> </td>
+        <td>IN: Whether logging is enabled.</td></tr>
+      <tr valign="top">
+        <td><code><em>char</em> *location</code> </td>
+        <td>IN: Location of log in UTF-8/ASCII (file path/name)
+            (On Windows, this must be ASCII).</td></tr>
+      <tr valign="top">
+        <td><code><em>hbool_t</em> start_on_access  </code> 
+            </td>
+        <td>IN: Whether the logging will begin as soon as the file 
+            is opened or created.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt>
+    <dd>Returns a non-negative value if successful. 
+    Otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Pget_mdc_log_options.htm">H5Pget_mdc_log_options</a></li>
+      <li><a href="H5Fstart_mdc_logging.htm">H5Fstart_mdc_logging</a></li>
+      <li><a href="H5Fstop_mdc_logging.htm">H5Fstop_mdc_logging</a></li>
+      <li><a href="H5Pget_mdc_logging_status.htm">H5Pget_mdc_logging_status</a></li>
+    </ul>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_metadata_read_attempts.htm b/html/RM/H5P/H5Pset_metadata_read_attempts.htm
new file mode 100644
index 0000000..c7d7918
--- /dev/null
+++ b/html/RM/H5P/H5Pset_metadata_read_attempts.htm
@@ -0,0 +1,231 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_metadata_read_attempts" -->
+<hr>
+<dl>
+
+  <dt><div align="right"><font color="999999" size="-1"><i>
+      Last modified: 8 December 2015
+      </i></font></div></dt>
+  <br />
+
+  <dt><strong>Name:</strong><a name=
+      "Property-SetMetadataReadAttempts">H5Pset_metadata_read_attempts</a>
+      </dt>
+      <br />
+
+  <dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_metadata_read_attempts(
+        <em>hid_t</em> plist_id, 
+        <em>unsigned</em> attempts
+        )</code>
+    </dd></dt><br />
+
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the number of read attempts in a file access property list.
+    </dd></dt><br />
+  
+  <dt><strong>Motivation:</strong>
+    <dd>On a system that is not atomic, the library might possibly read 
+    inconsistent metadata with checksum when performing 
+    single-writer/multiple-reader (SWMR) operations 
+    for an HDF5 file. Upon encountering such situations, the library 
+    will try reading the metadata again to obtain consistent data. 
+    This routine provides the means to set the number of 
+    read attempts other than the library default.
+    </dd></dt><br />
+  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_metadata_read_attempts</code> sets the number of 
+    reads that the library will try when reading checksummed metadata 
+    in an HDF5 file opened with SWMR access. When reading such metadata, 
+    the library will compare the checksum computed for the metadata 
+    just read with the checksum stored within the piece of checksum.
+    When performing SWMR operations on a file, the checksum check might 
+    fail when the library reads data on a system that is not atomic.
+    To remedy such situations, the library will repeatedly read the 
+    piece of metadata until the check passes or finally fails the read 
+    when the allowed number of attempts is reached.
+    
+    <p>The number of read attempts used by the library will depend on 
+    how the file is opened and whether the user sets the number of read 
+    attempts via this routine:</p>
+    
+    <ul>
+    <li>For a file opened with SWMR access:
+      <ul>
+      <li>If the user sets the number of attempts to N, the library will 
+      use N.</li>
+      <li>If the user does not set the number of attempts, the library 
+      will use the default for SWMR access (100).</li>
+      </ul>
+    </li>
+    <li>For a file opened with non-SWMR access, the library will always 
+    use the default for non-SWMR access (1). The value set via this 
+    routine does not have any effect during non-SWMR access.</li>
+    </ul>
+    </dd></dt><br />
+       
+  <dt><strong>Parameters:</strong>
+    <dd>
+    <table>
+      <tr valign="top">
+        <td width="20%"><code><em>hid_t</em> plist_id</code>
+            </td>
+        <td>IN: Identifier for a file access property list.
+            </td></tr>
+      <tr valign="top">
+        <td><code><em>unsigned</em> attempts  </code> 
+            </td>
+        <td>IN: The number of read attempts.
+            <br />
+            Must be a value greater than 0.
+	    </td></tr>
+    </table></dd></dt><br />
+
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd></dt><br />
+    <p>
+
+  <dt><strong>Failure Modes:</strong>
+    <dd>When the user sets the number of read attempts to 0.
+    <p>When the input property list is not a file access property list.</p>
+    <p>When the library is unable to set the number of read attempts in 
+    the file access property list.</p>
+    </dd></dt><br />
+
+  <dt><strong>Example Usage:</strong>
+    <dd>The first example illustrates the case in setting the number of 
+    read attempts for a file opened with SWMR access.
+    <dir><pre>
+    /* Create a copy of file access property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    /* Set the # of read attempts */
+    H5Pset_metadata_read_attempts(fapl, 20);
+
+    /* Open the file with SWMR access and the non-default file access property list */
+    fid = H5Fopen(FILE, (H5F_ACC_RDONLY | H5F_ACC_SWMR_READ), fapl);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /* 
+     *	The value returned in "attempts" will be 20.
+     *  The library will use 20 as the number of read attempts
+     *  when reading checksummed metadata in the file 
+     */
+
+    /* Close the property list */
+    H5Pclose(fapl);
+    H5Pclose(file_fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+</pre></dir></dd>
+    
+
+    <dd>The second example illustrates the case in setting the number of 
+    read attempts for a file opened with non-SWMR access. The value set 
+    in the file access property list does not have any effect.
+    <dir><pre>
+    /* Create a copy of file access property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    /* Set the # of read attempts */
+    H5Pset_metadata_read_attempts(fapl, 20);
+
+    /* Open the file with SWMR access and the non-default file access property list */
+    fid = H5Fopen(FILE, H5F_ACC_RDONLY, fapl);
+
+    /* Get the file's file access roperty list */
+    file_fapl = H5Fget_access_plist(fid);
+
+    /* Retrieve the # of read attempts from the file's file access property list */
+    H5Pget_metadata_read_attempts(file_fapl, &attempts);
+
+    /* 
+     *	The value returned in "attempts" will be 1 (default for non-SWMR access).
+     *  The library will use 1 as the number of read attempts
+     *  when reading checksummed metadata in the file 
+     */
+
+    /* Close the property lists */
+    H5Pclose(fapl);
+    H5Pclose(file_fapl);
+
+    /* Close the file */
+    H5Fclose(fid);
+</pre></dir></dd></dt><br />
+    
+
+<!--__ *** FORTRAN90 INTERFACE  **********************************  -->
+<!--__ When the Fortran90 interface is complete, replace this       -->
+<!--__ section with the Fortran90 subroutine description.           -->
+<!--__                                                              -->
+<!--__ See the file h5fortran_f_insert.htm for a template and       -->
+<!--__ instructions.                                                -->
+<!--__ ***********************************************************  -->
+  
+  <dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+  
+  <dt><strong>See Also:</strong>
+    <dd>
+    <li><a href="#Property-GetMetadataReadAttempts">
+        <code>H5Pget_metadata_read_attempts</code></a></li>
+    <li><a href="#File-GetMetadataReadRetriesInfo">
+        <code>H5Fget_metadata_read_retries_info</code></a></li>
+    </dd>
+    <br />
+
+<!--__ ***********************************************************  -->
+<!--__ Do not modify the next 9 lines; they set up the table.       -->
+<!--__ ***********************************************************  -->
+
+  <dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_object_flush_cb.htm b/html/RM/H5P/H5Pset_object_flush_cb.htm
new file mode 100644
index 0000000..386ec93
--- /dev/null
+++ b/html/RM/H5P/H5Pset_object_flush_cb.htm
@@ -0,0 +1,208 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_object_flush_cb" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetObjectFlushCb">H5Pset_object_flush_cb</a></dt>
+    <br />
+
+<dt><strong>Signature:</strong></dt>
+    <dd><code><em>herr_t</em> H5Pset_object_flush_cb (
+              <em>hid_t</em> fapl_id,  
+              <em>H5F_flush_cb_t</em> func, 
+              <em>void</em> *user_data
+        )</code></dd>
+    <br />
+
+<dt><strong>Purpose:</strong></dt>  
+    <dd>Sets a callback function to invoke when an object flush occurs 
+        in the file. </dd>
+    <br />
+
+<dt><strong>Description:</strong></dt> 
+    <dd><code>H5Pset_object_flush_cb</code> sets the callback function to 
+        invoke in the file access property list <code>fapl_id</code> 
+        whenever an object flush occurs in the file. Library objects are 
+        group, dataset, and committed datatype.  
+        <p>
+        The callback function <code>func</code> must conform to the prototype 
+        defined below:</p>
+        <ul>
+            <li><code>typedef <em>herr_t</em>  
+                (*H5F_flush_cb_t)(<em>hid_t</em> object_id, 
+                <em>void</em> *user_data) </code>
+        </ul>
+        <p>
+        The parameters of the callback function, per the above prototyps,
+        are defined as follows:</p>
+        <ul>
+            <li><code>object_id</code> is the identifier of the object 
+                which has just been flushed.</li>
+            <li><code>user_data</code> is the user-defined input data 
+                for the callback function.</li>
+        </ul>
+
+    </dd>
+    <br />
+
+<dt><strong>Parameters:</strong></dt> 
+    <dd><table width="100%">
+        <tr valign="top">
+          <td width="20%"><code><em>hid_t</em> fapl_id</code></td>
+          <td>IN: Identifier for a file access property list.</td></tr>
+        <tr valign="top">
+          <td><code><em>H5F_flush_cb_t</em> func   </code></td>
+          <td>IN: The user-defined callback function.</td></tr>
+        <tr valign="top">
+          <td><code><em>void</em> *user_data</code></td>
+          <td>IN: The user-defined input data for the callback 
+              function.</td></tr>
+        </table>
+    </dd>
+    <br />
+
+<dt><strong>Returns:</strong></dt> 
+    <dd>Returns a non-negative value if successful; 
+    otherwise returns a negative value.</dd>
+    <br />
+
+
+
+<dt><strong>Example Usage:</strong></dt> 
+    <dd>
+    The example below illustrates the usage of this routine to set the 
+    callback function to invoke when an object flush occurs. 
+    <dir>
+    <pre>
+hid_t file_id, fapl_id;
+hid_t dataset_id, dapl_id;
+unsigned counter;
+
+/* Create a copy of the file access property list *
+fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+
+/* Set up the object flush property values */
+/* flush_cb: callback function to invoke when an object flushes (see below) */
+/* counter: user data to pass along to the callback function */
+H5Pset_object_flush_cb(fapl_id, flush_cb, &counter);
+
+/* Open the file */
+file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+/* Create a group */
+gid = H5Gcreate2(fid, �group�, H5P_DEFAULT, H5P_DEFAULT_H5P_DEFAULT);
+
+/* Open a dataset */ 
+dataset_id = H5Dopen2(file_id, DATASET, H5P_DEFAULT);
+
+/* The flush will invoke flush_cb() with counter */
+H5Dflush(dataset_id);
+/* counter will be equal to 1 */
+:
+:
+:
+/* The flush will invoke flush_cb() with counter */
+H5Gflush(gid);
+/* counter will be equal to 2 */
+:
+:
+:
+
+/* The callback function for object flush property */
+static herr_t
+flush_cb(hid_t obj_id, void *_udata)
+{
+    unsigned *flush_ct = (unsigned*)_udata;
+    ++(*flush_ct);
+    return 0;
+}
+</pre>
+    </dir>
+    </dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOappend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+              <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+              <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+              C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/H5P/H5Pset_virtual.htm b/html/RM/H5P/H5Pset_virtual.htm
new file mode 100644
index 0000000..77f4251
--- /dev/null
+++ b/html/RM/H5P/H5Pset_virtual.htm
@@ -0,0 +1,224 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_virtual" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetVirtual">H5Pset_virtual</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_virtual(
+        <em>hid_t</em> dcpl_id,
+        <em>hid_t</em> vspace_id,
+        <em>const char *</em>src_file_name,
+        <em>const char *</em>src_dset_name,
+        <em>hid_t</em> src_space_id
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Sets the mapping between virtual and source datasets.</dt>
+    </dd>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pset_virtual</code> maps elements of the virtual dataset (VDS)
+        described by the virtual dataspace identifier <code>vspace_id</code> 
+        to the elements of the source dataset described by the 
+        source dataset dataspace identifier <code>src_space_id</code>. 
+        The source dataset is identified by the name of the file where it is 
+        located, <code>src_file_name</code>, and the name of the dataset, 
+        <code>src_dset_name</code>.
+    </dd></dt>
+    <br />
+
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top"><code><em>hid_t</em> dcpl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the 
+                dataset creation property list that will be used when creating 
+                the virtual dataset.</td>
+        </tr><tr>
+            <td valign="top"><code><em>hid_t</em> 
+                vspace_id</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The dataspace identifier 
+                with the selection within the virtual dataset applied, 
+                possibly an unlimited selection.</td>
+        </tr><tr>
+            <td valign="top"><code><em>const char *</em>src_file_name</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The name of the HDF5 file 
+                where the source dataset is located. 
+                The file might not exist yet. 
+                The name can be specified using a C-style <code>printf</code> 
+                statement as described below.</td>
+        </tr><tr>
+            <td valign="top"><code><em>const char *</em>src_dset_name</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The path to the HDF5 dataset 
+                in the file specified by <code>src_file_name</code>. 
+                The dataset might not exist yet. The dataset name can be 
+                specified using a C-style <code>printf</code> statement 
+                as described below.</td>
+        </tr><tr>
+            <td valign="top"><code><em>hid_t</em> 
+                src_space_id</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: The source dataset’s 
+                dataspace identifier with a selection applied, 
+                possibly an unlimited selection</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>C-style <code>printf</code> Formatting Statements:</strong>
+    <dd>C-style printf formatting allows a pattern to be specified in the name 
+        of a source file or dataset.  Strings for the file and dataset names 
+        are treated as literals except for the following substitutions:
+
+        <p>
+        <dir>
+        <table width="100%">
+        <tr>
+            <td valign="top"><code><em>"%%"</em></code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">Replaced with a single <code>"%"</code> 
+                (percent) character.</td>
+        </tr><tr>
+            <td valign="top"><code><em>"%<d>b"</em></code></td>
+            <td><code> </code></td>
+            <td valign="top">Where <code><em>"<d></em></code> 
+                is the virtual dataset dimension axis (0-based) 
+                and "<code><em>b</em></code>" indicates that the block count 
+                of the selection in that dimension should be used. 
+                The full expression (for example, "<code><em>%0b</em></code>") 
+                is replaced with a single numeric value when the mapping is
+                evaluated at VDS access time. Example code for many source 
+                and virtual dataset mappings is available in the 
+                “Examples of Source to Virtual Dataset Mapping” 
+                chapter in “RFC: HDF5 Virtual Dataset” 
+                (see [1]).
+                </td>
+        </tr>
+        </table>
+        </dir>
+        </p>
+         
+        <p>
+        If the <code>printf</code> form is used for the source file 
+        or dataset names, the selection in the source dataset’s dataspace 
+        must be fixed-size; 
+        for more information see [1].
+        </p>
+
+    </dd></dt>
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pset_virtual_f
+    <dd>
+
+        <?php include("H5P/h5pset_virtual_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+<!--
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+-->
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_virtual_printf_gap.htm b/html/RM/H5P/H5Pset_virtual_printf_gap.htm
new file mode 100644
index 0000000..17286d6
--- /dev/null
+++ b/html/RM/H5P/H5Pset_virtual_printf_gap.htm
@@ -0,0 +1,187 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_virtual_printf_gap" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetVirtualPrintfGap">H5Pset_virtual_printf_gap</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_virtual_printf_gap(
+        <em>hid_t</em> dapl_id,
+        <em>hsize_t</em> gap_size
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>
+    Sets the maximum number of missing source files and/or datasets 
+    with the printf-style names when getting the extent of an
+    unlimited virtual dataset.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pset_virtual_printf_gap</code> sets the access property 
+        list for the virtual dataset, <code>dapl_id</code>, 
+        to instruct the library to stop looking for the mapped data 
+        stored in the files and/or datasets with the printf-style names 
+        after not finding <code>gap_size</code> files and/or datasets. 
+        The found source files and datasets will determine the extent 
+        of the unlimited virtual dataset with the printf-style mappings.
+        <p />
+        Consider the following examples where the regularly spaced 
+        blocks of a virtual dataset are mapped to datasets with the 
+        names <code>d-1</code>, <code>d-2</code>, <code>d-3</code>, ..., 
+        <code>d-N</code>, ... :
+        <ul>
+            <li>If the dataset <code>d-2</code> is missing 
+                and <code>gap_size</code> is set to <code>0</code>, 
+                then the virtual dataset will contain only data found 
+                in <code>d-1</code>.
+                </li>
+            <li>If <code>d-2</code> and <code>d-3</code> are missing and 
+                <code>gap_size</code> is set to <code>2</code>, 
+                then the virtual dataset will contain the data from 
+                <code>d-1</code>, <code>d-3</code>, ..., <code>d-N</code>, 
+                ... .  The blocks that are mapped to <code>d-2</code> 
+                and <code>d-3</code> will be filled according to the 
+                virtual dataset’s fill value setting.
+                </li>
+        </ul>
+    </dd></dt>
+    <br />
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top"><code><em>hid_t</em> 
+                dapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: Dataset access property list identifier 
+                for the virtual dataset</td>
+        </tr><tr>
+            <td valign="top"><code><em>hsize_t</em> gap_size</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Maximum number of files and/or datasets 
+                allowed to be missing for determining the extent of an 
+                unlimited virtual dataset with printf-style mappings
+                <br />
+                <i>(Default value: <code>0</code>)</i></td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pset_virtual_printf_gap_f
+    <dd>
+
+        <?php include("H5P/h5pset_virtual_printf_gap_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+<!--
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+-->
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/H5Pset_virtual_view.htm b/html/RM/H5P/H5Pset_virtual_view.htm
new file mode 100644
index 0000000..428ea5d
--- /dev/null
+++ b/html/RM/H5P/H5Pset_virtual_view.htm
@@ -0,0 +1,185 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_virtual" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Property-SetVirtualView">H5Pset_virtual_view</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Pset_virtual_view(
+        <em>hid_t</em> dapl_id,
+        <em>H5D_vds_view_t</em> view
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Sets the view of the virtual dataset (VDS) 
+        to include or exclude missing mapped elements.
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Pset_virtual_view</code> takes the access property list 
+        for the virtual dataset, <code>dapl_id</code>, 
+        and the flag, <code>view</code>, and sets the VDS view according to 
+        the flag value. 
+        <p />
+        If <code>view</code> is set to <code>H5D_VDS_FIRST_MISSING</code>,
+        the view includes all data before the first missing mapped data.
+        This setting provides a view containing only the continuous data
+        starting with the dataset’s first data element.  
+        Any break in continuity terminates the view.
+        <p />
+        If <code>view</code> is set to <code>H5D_VDS_LAST_AVAILABLE</code>,
+        the view includes all available mapped data.
+        <p />
+        Missing mapped data is filled with the fill value set in the 
+        VDS creation property list.  
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td valign="top"><code><em>hid_t</em> dapl_id</code></td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: Identifier of the virtual dataset access 
+                property list.</td>
+        </tr><tr>
+            <td valign="top"><code><em>H5D_vds_view_t </em>view</code></td>
+            <td><code> </code></td>
+            <td valign="top">IN: Flag specifying the extent of the data 
+                to be included in the view.  
+                <br />
+                Valid values are:
+                <table width="100%">
+                    <tr align="left">
+                        <td colspan="2" valign="top">
+                            <code>H5D_VDS_FIRST_MISSING</code> </td>
+                        </tr><tr>
+                        <td><code>    </code></td>
+                        <td valign="top">View includes all data before 
+                            the first missing mapped data.
+                        </tr>
+                    <tr align="left">
+                        <td colspan="2" valign="top">
+                            <code>H5D_VDS_LAST_AVAILABLE</code> </td>
+                        </tr><tr>
+                        <td><code> </code></td>
+                        <td valign="top">View includes all available mapped data.
+                        </tr>
+                </table>
+                </td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5pset_virtual_view_f
+    <dd>
+
+        <?php include("H5P/h5pset_virtual_view_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd>
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+<!--
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+-->
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5P/h5pget_all_coll_metadata_ops_f.htm b/html/RM/H5P/h5pget_all_coll_metadata_ops_f.htm
new file mode 100644
index 0000000..3abbe78
--- /dev/null
+++ b/html/RM/H5P/h5pget_all_coll_metadata_ops_f.htm
@@ -0,0 +1,19 @@
+<a name="H5P2fh5pget5fall5fcoll5fmetadata5fops5ff"></a>
+<a name="robo198"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_all_coll_metadata_ops_f(plist_id, is_collective, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(OUT)          :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  plist_id        - File access property list identifier.
+</pre>
+
+<strong>Output:</strong>
+<pre>  is_collective   - Collective access setting.
+  hdferr          - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_coll_metadata_write_f.htm b/html/RM/H5P/h5pget_coll_metadata_write_f.htm
new file mode 100644
index 0000000..18993ac
--- /dev/null
+++ b/html/RM/H5P/h5pget_coll_metadata_write_f.htm
@@ -0,0 +1,19 @@
+<a name="H5P2fh5pget5fcoll5fmetadata5fwrite5ff"></a>
+<a name="robo211"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_coll_metadata_write_f(plist_id, is_collective, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(OUT)          :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  plist_id        - File access property list identifier.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  is_collective   - Collective access setting.
+  hdferr          - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_count_f.htm b/html/RM/H5P/h5pget_virtual_count_f.htm
new file mode 100644
index 0000000..0796710
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_count_f.htm
@@ -0,0 +1,19 @@
+<a name="H5P2fh5pget5fvirtual5fcount5ff"></a>
+<a name="robo258"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_count_f(dcpl_id, count, hdferr)
+    INTEGER(HID_T), INTENT(IN)   :: dcpl_id
+    INTEGER(SIZE_T), INTENT(OUT) :: count
+    INTEGER, INTENT(OUT)         :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id - The identifier of the virtual dataset creation property list. 
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  count   - The number of mappings.
+  hdferr  - Returns 0 if successful and -1 if fails
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_dsetname_f.htm b/html/RM/H5P/h5pget_virtual_dsetname_f.htm
new file mode 100644
index 0000000..6422004
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_dsetname_f.htm
@@ -0,0 +1,29 @@
+<a name="H5P2fh5pget5fvirtual5fdsetname5ff"></a>
+<a name="robo259"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_dsetname_f(dcpl_id, index, name, hdferr, name_len)
+    INTEGER(HID_T)  , INTENT(IN)  :: dcpl_id
+    INTEGER(SIZE_T) , INTENT(IN)  :: index
+    CHARACTER(LEN=*), INTENT(OUT) :: name
+    INTEGER, INTENT(OUT)          :: hdferr
+    INTEGER(SIZE_T), OPTIONAL     :: name_len
+</pre>
+
+<strong>Optional parameters:</strong>
+<pre>  name_len - The size of name needed to hold the source dataset name. (OUT)
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id - The identifier of the virtual dataset creation property list.
+  index   - Mapping index.
+            The value of index is 0 (zero) or greater and less than count 
+            (0 ≤ index < count), where count is the number of mappings 
+            returned by h5pget_virtual_count.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  name   - A buffer containing the name of the source dataset.
+  hdferr - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_filename_f.htm b/html/RM/H5P/h5pget_virtual_filename_f.htm
new file mode 100644
index 0000000..eecaf6a
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_filename_f.htm
@@ -0,0 +1,30 @@
+<a name="H5P2fh5pget5fvirtual5ffilename5ff"></a>
+<a name="robo260"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_filename_f(dcpl_id, index, name, hdferr, name_len)
+    INTEGER(HID_T)  , INTENT(IN)  :: dcpl_id
+    INTEGER(SIZE_T) , INTENT(IN)  :: index
+    CHARACTER(LEN=*), INTENT(OUT) :: name
+    INTEGER, INTENT(OUT)          :: hdferr
+    INTEGER(SIZE_T), OPTIONAL     :: name_len
+</pre>
+
+<strong>Optional parameters:</strong>
+<pre>  name_len - The size of name needed to hold the filename. (OUT)
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id - The identifier of the virtual dataset creation property list.
+  index   - Mapping index.
+            The value of index is 0 (zero) or greater and less than count 
+            (0 ≤ index < count), where count is the number of mappings 
+            returned by h5pget_virtual_count.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  name   - A buffer containing the name of the file containing the 
+           source dataset.
+  hdferr - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_printf_gap_f.htm b/html/RM/H5P/h5pget_virtual_printf_gap_f.htm
new file mode 100644
index 0000000..14295aa
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_printf_gap_f.htm
@@ -0,0 +1,21 @@
+<a name="H5P2fh5pget5fvirtual5fprintf5fgap5ff"></a>
+<a name="robo261"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_printf_gap_f(dapl_id, gap_size, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: dapl_id
+    INTEGER(HSIZE_T), INTENT(OUT) :: gap_size
+    INTEGER         , INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dapl_id    - Dataset access property list identifier for the virtual dataset
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  gap_size - Maximum number of the files and/or datasets allowed to 
+             be missing for determining the extent of an unlimited virtual 
+             dataset with printf-style mappings. 
+  hdferr   - Returns 0 if successful and -1 if fails
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_srcspace_f.htm b/html/RM/H5P/h5pget_virtual_srcspace_f.htm
new file mode 100644
index 0000000..66e9686
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_srcspace_f.htm
@@ -0,0 +1,24 @@
+<a name="H5P2fh5pget5fvirtual5fsrcspace5ff"></a>
+<a name="robo262"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_srcspace_f(dcpl_id, index, ds_id, hdferr)
+    INTEGER(HID_T) , INTENT(IN)  :: dcpl_id
+    INTEGER(SIZE_T), INTENT(IN)  :: index
+    INTEGER(HID_T) , INTENT(OUT) :: ds_id
+    INTEGER, INTENT(OUT)         :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id - The identifier of the virtual dataset creation property list.
+  index   - Mapping index.
+            The value of index is 0 (zero) or greater and less than count 
+            (0 ≤ index < count), where count is the number of mappings 
+            returned by h5pget_virtual_count.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  ds_id  - dataspace identifier
+  hdferr - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_view_f.htm b/html/RM/H5P/h5pget_virtual_view_f.htm
new file mode 100644
index 0000000..0c5aff0
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_view_f.htm
@@ -0,0 +1,22 @@
+<a name="H5P2fh5pget5fvirtual5fview5ff"></a>
+<a name="robo263"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_view_f(dapl_id, view, hdferr)
+    INTEGER(HID_T), INTENT(IN)  :: dapl_id
+    INTEGER       , INTENT(INOUT) :: view
+    INTEGER       , INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dapl_id - Dataset access property list identifier for the virtual dataset
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  view - The flag specifying the view of the virtual dataset.
+         Valid values are:
+             H5D_VDS_FIRST_MISSING_F
+             H5D_VDS_LAST_AVAILABLE_F
+  hdferr - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pget_virtual_vspace_f.htm b/html/RM/H5P/h5pget_virtual_vspace_f.htm
new file mode 100644
index 0000000..26c728f
--- /dev/null
+++ b/html/RM/H5P/h5pget_virtual_vspace_f.htm
@@ -0,0 +1,23 @@
+<a name="H5P2fh5pget5fvirtual5fvspace5ff"></a>
+<a name="robo264"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pget_virtual_vspace_f(dcpl_id, index, ds_id, hdferr)
+    INTEGER(HID_T) , INTENT(IN)  :: dcpl_id
+    INTEGER(SIZE_T), INTENT(IN)  :: index
+    INTEGER(HID_T) , INTENT(OUT) :: ds_id
+    INTEGER, INTENT(OUT)         :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id - The identifier of the virtual dataset creation property list.
+  index   - Mapping index.
+            The value of index is 0 (zero) or greater and less than count 
+            (0 ≤ index < count), where count is the number of mappings 
+            returned by h5pget_virtual_count.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pset_all_coll_metadata_ops_f.htm b/html/RM/H5P/h5pset_all_coll_metadata_ops_f.htm
new file mode 100644
index 0000000..f4885f2
--- /dev/null
+++ b/html/RM/H5P/h5pset_all_coll_metadata_ops_f.htm
@@ -0,0 +1,19 @@
+<a name="H5P2fh5pset5fall5fcoll5fmetadata5fops5ff"></a>
+<a name="robo274"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pset_all_coll_metadata_ops_f(plist_id, is_collective, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(IN)           :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  plist_id       - File access property list identifier.
+  is_collective  - Indicates if metadata writes are collective or not.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr         - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pset_coll_metadata_write_f.htm b/html/RM/H5P/h5pset_coll_metadata_write_f.htm
new file mode 100644
index 0000000..9b50b38
--- /dev/null
+++ b/html/RM/H5P/h5pset_coll_metadata_write_f.htm
@@ -0,0 +1,19 @@
+<a name="H5P2fh5pset5fcoll5fmetadata5fwrite5ff"></a>
+<a name="robo284"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pset_coll_metadata_write_f(plist_id, is_collective, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: plist_id
+    LOGICAL, INTENT(IN)           :: is_collective
+    INTEGER, INTENT(OUT)          :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  fapl_id        - File access property list identifier.
+  is_collective  - Indicates if metadata writes are collective or not.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr         - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pset_virtual_f.htm b/html/RM/H5P/h5pset_virtual_f.htm
new file mode 100644
index 0000000..c781445
--- /dev/null
+++ b/html/RM/H5P/h5pset_virtual_f.htm
@@ -0,0 +1,30 @@
+<a name="H5P2fh5pset5fvirtual5ff"></a>
+<a name="robo332"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pset_virtual_f(dcpl_id, vspace_id, src_file_name, 
+                              src_dset_name, src_space_id, hdferr)
+    INTEGER(HID_T), INTENT(IN)   :: dcpl_id
+    INTEGER(HID_T), INTENT(IN)   :: vspace_id
+    CHARACTER(LEN=*), INTENT(IN) :: src_file_name
+    CHARACTER(LEN=*), INTENT(IN) :: src_dset_name
+    INTEGER(HID_T), INTENT(IN)   :: src_space_id
+    INTEGER, INTENT(OUT)         :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dcpl_id       - The identifier of the dataset creation property list that 
+                  will be used when creating the virtual dataset.
+  vspace_id     - The dataspace identifier with the selection within the virtual 
+                  dataset applied, possibly an unlimited selection.
+  src_file_name - The name of the HDF5 file where the source dataset is located.
+  src_dset_name - The path to the HDF5 dataset in the file specified by 
+                  src_file_name.
+  src_space_id  - The source dataset's dataspace identifier with a selection 
+                  applied, possibly an unlimited selection
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr  - Returns 0 if successful and -1 if fails
+</pre>
+
diff --git a/html/RM/H5P/h5pset_virtual_printf_gap_f.htm b/html/RM/H5P/h5pset_virtual_printf_gap_f.htm
new file mode 100644
index 0000000..dd3bd97
--- /dev/null
+++ b/html/RM/H5P/h5pset_virtual_printf_gap_f.htm
@@ -0,0 +1,21 @@
+<a name="H5P2fh5pset5fvirtual5fprintf5fgap5ff"></a>
+<a name="robo333"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pset_virtual_printf_gap_f(dapl_id, gap_size, hdferr)
+    INTEGER(HID_T)  , INTENT(IN)  :: dapl_id
+    INTEGER(HSIZE_T), INTENT(IN)  :: gap_size
+    INTEGER         , INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dapl_id  - Dataset access property list identifier for the virtual dataset.
+  gap_size - Maximum number of files and/or datasets allowed to be missing 
+             for determining the extent of an unlimited virtual dataset 
+             with printf-style mappings.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr   - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5P/h5pset_virtual_view_f.htm b/html/RM/H5P/h5pset_virtual_view_f.htm
new file mode 100644
index 0000000..c531fed
--- /dev/null
+++ b/html/RM/H5P/h5pset_virtual_view_f.htm
@@ -0,0 +1,22 @@
+<a name="H5P2fh5pset5fvirtual5fview5ff"></a>
+<a name="robo334"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5pset_virtual_view_f(dapl_id, view, hdferr)
+    INTEGER(HID_T), INTENT(IN)  :: dapl_id
+    INTEGER       , INTENT(IN)  :: view
+    INTEGER       , INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  dapl_id - Identifier of the virtual dataset access property list.
+  view    - Flag specifying the extent of the data to be included in the view.
+            Valid values are:
+               H5D_VDS_FIRST_MISSING_F
+               H5D_VDS_LAST_AVAILABLE_F
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  hdferr   - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5R/H5Rdereference.htm b/html/RM/H5R/H5Rdereference.htm
index e23d3a8..98eab2b 100644
--- a/html/RM/H5R/H5Rdereference.htm
+++ b/html/RM/H5R/H5Rdereference.htm
@@ -23,68 +23,92 @@
 <hr>
 <dl>
 
-  <dt><div align=right><font color=999999 size=-1><i>
-  Last modified: 14 October 2014</i></font></div></dt>
+<dt><div align=right><font color=999999 size=-1><i>
+    Last modified: 3 March 2016
+    </i></font></div>
 
-<dt><strong>Name:</strong> <a name="Reference-Dereference">H5Rdereference</a>
-</dt>
-<br />
+<dt><strong>Name:</strong> <a name="Reference-Dereference">H5Rdereference</a>
 <dt><strong>Signature:</strong>
     <dd><em>hid_t</em> <code>H5Rdereference</code>(
-        <em>hid_t</em> <code>obj_id</code>,
-        <em>H5R_type_t</em> <code>ref_type</code>,
-        <em>void *</em><code>ref</code>
+    <em>hid_t</em> <code>loc_id</code>,
+    <em>H5R_type_t</em> <code>ref_type</code>,
+    <em>void *</em><code>ref</code>
+    )
+    <p>
+    <dd><em>hid_t</em> <code>H5Rdereference</code>(
+    <em>hid_t</em> <code>loc_id</code>,
+    <em>hid_t</em> <code>oapl_id</code>,
+    <em>H5R_type_t</em> <code>ref_type</code>,
+    <em>void *</em><code>ref</code>
     )
-
 <p>
 <dt><strong>Purpose:</strong>
     <dd>Opens the HDF5 object referenced.
-
 <p>
 <dt><strong>Description:</strong>
-    <dd>Given a reference, <code>ref</code>, to an object or a region 
-        in an object, <code>H5Rdereference</code> opens that object and 
-        returns an identifier.
-        <p>
-        The parameter <code>obj_id</code> must be a valid identifier for 
-        an object in the HDF5 file containing the referenced object,
-        including the file identifier.
-        <p>
-        The parameter <code>ref_type</code> specifies the reference type
-        of the reference <code>ref</code>. 
-        <code>ref_type</code> may contain either of the following values:
-        <ul>
-        <li><code>H5R_OBJECT</code>  (<code>0</code>)
-        <li><code>H5R_DATASET_REGION</code>  (<code>1</code>)
-        </ul>
-
-        <p>The object opened with this function should be closed when 
-        it is no longer needed so that resource leaks will not develop. 
-        Use the appropriate close function such as <code>H5Oclose</code> 
-        or <code>H5Dclose</code> for datasets.</p>
-
-<p>
-<dt><strong>Parameters:</strong>
-    <dd><table>
-        <tr>
-            <td valign="top"><em>hid_t</em> <code>obj_id</code></td>
-            <td valign="top">IN: Valid identifier for the file containing 
-            the referenced object or any object in that file.</td></tr>
-        <tr>
-            <td valign="top"><em>H5R_type_t</em> <code>ref_type    </code></td>
-            <td valign="top">IN: The reference type of <code>ref</code>.</td></tr>
-        <tr>
-            <td valign="top"><em>void *</em><code>ref</code></td>
-            <td valign="top">IN: Reference to open.</td></tr>
-    </table></dd>
-
-<p>
-<dt><strong>Returns:</strong>
-    <dd>Returns identifier of referenced object if successful;
-        otherwise returns a negative value.
-
-<p>
+    <dd><code>H5Rdereference</code> is a macro that is mapped to either
+      <a href="#Reference-Dereference1"><code>H5Rdereference1</code></a> or
+      <a href="#Reference-Dereference2"><code>H5Rdereference2</code></a>,
+      depending on the needs of the application.
+      <p>
+      Such macros are provided to facilitate application compatibility.
+      Their use and mappings are fully described in 
+      “<a href="APICompatMacros.html">API Compatibility Macros 
+      in HDF5</a>”; 
+      we urge you to read that document closely.
+      <p>
+      When both the HDF5 Library and the application are built and 
+      installed with no specific compatibility flags, 
+      <code>H5Rdereference</code> is mapped to the most recent version of
+      the function, currently 
+      <a href="#Reference-Dereference2"><code>H5Rdereference2</code></a>.
+      If the library and/or application is compiled for Release 1.6 or 1.8
+      emulation, <code>H5Rdereference</code> will be mapped to 
+      <a href="#Reference-Dereference1"><code>H5Rdereference1</code></a>.
+      Function-specific flags are available to override these settings 
+      on a function-by-function basis when the application is compiled. 
+      <p>
+      Specific compile-time compatibility flags and the resulting 
+      mappings are as follows:
+
+      <dir>
+      <table border=0 cellpadding=4>
+        <tr valign=top align=left> 
+          <th>Compatibility setting</th>
+          <th><code>H5Rdereference</code> mapping</th>
+        </tr><tr valign=top align=left>
+          <td colspan=2><hr><u><a href="APICompatMacros.html#GlobalSettings">Global settings</a></u></td>
+        </tr><tr valign=top align=left>
+          <td>No compatibility flag</td>
+          <td><code>H5Rdereference2</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Enable deprecated symbols</td>
+          <td><code>H5Rdereference2</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Disable deprecated symbols</td>
+          <td><code>H5Rdereference2</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Emulate Release 1.6 interface<code>    </code></td>
+          <td><code>H5Rdereference1</code> </td>
+        </tr><tr valign=top align=left>
+          <td>Emulate Release 1.8 interface<code> </code></td>
+          <td><code>H5Rdereference1</code> </td>
+        </tr><tr valign=top align=left>
+          <td colspan=2><hr><u><a href="APICompatMacros.html#FunctionLevelSettings">Function-level macros</a></u></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5Rdereference_vers = 2</code></td>
+          <td><code>H5Rdereference2</code></td>
+        </tr><tr valign=top align=left>
+          <td><code>H5Rdereference_vers = 1</code></td>
+          <td><code>H5Rdereference1</code></td>
+        </tr>
+      </table>
+      </dir>
+      
+<!-- NEW PAGE -->
+  <p>
 <dt><strong>Fortran90 Interface:</strong> h5rdereference_f
+    <dd>
 
     <dd>
     <p><strong>To dereference an object:</strong> 
@@ -98,20 +122,14 @@
 
         <?php include("H5R/h5rdereference_region_f_F90.htm"); ?>
 
-<p>
+  <p>
 <dt><strong>Fortran2003 Interface:</strong> h5rdereference_f
     <dd>
 
         <?php include("H5R/h5rdereference_f_F03.htm"); ?>
 
-
-  <br />
-  <dt><strong>See Also:</a></strong></dt>
-    <dd>
-    <a href="http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">
-    “Using Identifiers”</a></dd>
-
-<br />
+<!-- NEW PAGE -->
+  <p>
 <dt><strong>History:</strong>
     <dd><table width="90%">
         <tr>
@@ -120,13 +138,14 @@
           <td valign="top" align="left">
             <strong>Change</strong></td></tr>
         <tr>
-          <td valign="top">1.8.8</td>
-          <td valign="top">
-            Fortran updated to Fortran2003.</td></tr>
-        <tr>
-          <td valign="top">1.8.0</td>
-          <td valign="top">
-            C function introduced in this release.</td></tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">The C function 
+            <code>H5Rdereference</code> renamed to <code>H5Rdereference1</code> 
+            and deprecated in this release.
+            <br>
+            The C macro <code>H5Rdereference</code> 
+            and the C function <code>H5Rdereference2</code>
+            introduced in this release.</td></tr>
     </table>
 </dl>
 
diff --git a/html/RM/H5R/H5Rdereference1.htm b/html/RM/H5R/H5Rdereference1.htm
new file mode 100644
index 0000000..1aad424
--- /dev/null
+++ b/html/RM/H5R/H5Rdereference1.htm
@@ -0,0 +1,149 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rdereference1" -->
+<hr>
+<dl>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+  Last modified: 4 March 2016</i></font></div></dt>
+
+<dt><strong>Name:</strong> <a name="Reference-Dereference1">H5Rdereference1</a>
+</dt>
+<br />
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Rdereference1</code>(
+        <em>hid_t</em> <code>obj_id</code>,
+        <em>H5R_type_t</em> <code>ref_type</code>,
+        <em>void *</em><code>ref</code>
+    )
+
+<p>
+<dt><strong>Purpose:</strong>
+    <dd>Opens the HDF5 object referenced.
+
+<p>
+<dt><strong>Notice:</Strong>
+  <dd><i>This function has been renamed from <code>H5Rdereference</code>
+      and is deprecated in favor of the macro
+      <a href="RM_H5R.html#Reference-Dereference"><code>H5Rdereference</code></a>
+      or the function 
+      <a href="RM_H5R.html#Reference-Dereference2"><code>H5Rdereference2</code></a>.</i>
+
+<p>
+<dt><strong>Description:</strong>
+    <dd>Given a reference, <code>ref</code>, to an object or a region 
+        in an object, <code>H5Rdereference1</code> opens that object and 
+        returns an identifier.
+        <p>
+        The parameter <code>obj_id</code> must be a valid identifier for 
+        an object in the HDF5 file containing the referenced object,
+        including the file identifier.
+        <p>
+        The parameter <code>ref_type</code> specifies the reference type
+        of the reference <code>ref</code>. 
+        <code>ref_type</code> may contain either of the following values:
+        <ul>
+        <li><code>H5R_OBJECT</code>  (<code>0</code>)
+        <li><code>H5R_DATASET_REGION</code>  (<code>1</code>)
+        </ul>
+
+        <p>The object opened with this function should be closed when 
+        it is no longer needed so that resource leaks will not develop. 
+        Use the appropriate close function such as <code>H5Oclose</code> 
+        or <code>H5Dclose</code> for datasets.</p>
+
+<p>
+<dt><strong>Parameters:</strong>
+    <dd><table>
+        <tr>
+            <td valign="top"><em>hid_t</em> <code>obj_id</code></td>
+            <td valign="top">IN: Valid identifier for the file containing 
+            the referenced object or any object in that file.</td></tr>
+        <tr>
+            <td valign="top"><em>H5R_type_t</em> <code>ref_type    </code></td>
+            <td valign="top">IN: The reference type of <code>ref</code>.</td></tr>
+        <tr>
+            <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">IN: Reference to open.</td></tr>
+    </table></dd>
+
+<p>
+<dt><strong>Returns:</strong>
+    <dd>Returns identifier of referenced object if successful;
+        otherwise returns a negative value.
+
+<p>
+<dt><strong>Fortran90 Interface:</strong> h5rdereference_f
+
+    <dd>
+    <p><strong>To dereference an object:</strong> 
+    <br>
+
+        <?php include("H5R/h5rdereference_object_f_F90.htm"); ?>
+
+<!-- NEW PAGE -->
+    <p><strong>To dereference a region:</strong>	
+    <br>
+
+        <?php include("H5R/h5rdereference_region_f_F90.htm"); ?>
+
+<p>
+<dt><strong>Fortran2003 Interface:</strong> h5rdereference_f
+    <dd>
+
+        <?php include("H5R/h5rdereference_f_F03.htm"); ?>
+
+
+<br />
+<dt><strong>See Also:</a></strong></dt>
+    <dd>
+    “<a href=
+    "http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">Using 
+    Identifiers</a>”</dd>
+
+
+<br />
+<dt><strong>History:</strong>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function <code>H5Rdereference</code> renamed to
+            <code>H5Rdereference1</code> 
+            and deprecated in this release.</td></tr>
+        <tr>
+          <td valign="top">1.8.8</td>
+          <td valign="top">
+            Fortran updated to Fortran2003.</td></tr>
+        <tr>
+          <td valign="top">1.8.0</td>
+          <td valign="top">
+            C function introduced in this release.</td></tr>
+    </table>
+</dl>
+
+
diff --git a/html/RM/H5R/H5Rdereference2.htm b/html/RM/H5R/H5Rdereference2.htm
new file mode 100644
index 0000000..1729ef0
--- /dev/null
+++ b/html/RM/H5R/H5Rdereference2.htm
@@ -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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rdereference2" -->
+<hr>
+<dl>
+
+  <dt><div align=right><font color=999999 size=-1><i>
+  Last modified: 25 February 2016</i></font></div></dt>
+
+<dt><strong>Name:</strong> <a name="Reference-Dereference2">H5Rdereference2</a>
+</dt>
+<br />
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Rdereference2</code>(
+        <em>hid_t</em> <code>obj_id</code>,
+        <em>hid_t</em> <code>oapl_id</code>,
+        <em>H5R_type_t</em> <code>ref_type</code>,
+        <em>void *</em><code>ref</code>
+    )
+
+<p>
+<dt><strong>Purpose:</strong>
+    <dd>Opens the HDF5 object referenced.
+
+<p>
+<dt><strong>Description:</strong>
+    <dd>Given a reference, <code>ref</code>, to an object or a region 
+        in an object, <code>H5Rdereference2</code> opens that object and 
+        returns an identifier.
+        <p>
+        The parameter <code>obj_id</code> must be a valid identifier 
+        for the HDF5 file containing the referenced object or 
+        for any object in that HDF5 file.
+        <p>
+        The parameter <code>oapl_id</code> is an
+        object access property list identifier 
+        for the referenced object. 
+        The access property list must be of the same type as the 
+        object being referenced, 
+        that is a group, dataset, or datatype property list.
+        <p>
+        The parameter <code>ref_type</code> specifies the reference type
+        of the reference <code>ref</code>. 
+        <code>ref_type</code> may contain either of the following values:
+        <ul>
+        <li><code>H5R_OBJECT</code>  (<code>0</code>)
+        <li><code>H5R_DATASET_REGION</code>  (<code>1</code>)
+        </ul>
+
+        <p>The object opened with this function should be closed when 
+        it is no longer needed so that resource leaks will not develop. 
+        Use the appropriate close function such as <code>H5Oclose</code> 
+        or <code>H5Dclose</code> for datasets.</p>
+
+<p>
+<dt><strong>Parameters:</strong>
+    <dd><table>
+        <tr>
+            <td valign="top"><em>hid_t</em> <code>obj_id</code></td>
+            <td valign="top">IN: Valid identifier for the file containing 
+            the referenced object or any object in that file.</td></tr>
+        <tr>
+            <td valign="top"><em>hid_t</em> <code>oapl_id</code></td>
+            <td valign="top">IN: Valid object access property list identifier 
+            for a property list to be used with the referenced object.
+            </td></tr>
+        <tr>
+            <td valign="top"><em>H5R_type_t</em> <code>ref_type    </code></td>
+            <td valign="top">IN: The reference type of <code>ref</code>.</td></tr>
+        <tr>
+            <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">IN: Reference to open.</td></tr>
+    </table></dd>
+
+<p>
+<dt><strong>Returns:</strong>
+    <dd>Returns identifier of referenced object if successful;
+        otherwise returns a negative value.
+
+<p>
+<dt><strong>Fortran90 Interface:</strong> h5rdereference_f
+
+    <dd>
+    <p><strong>To dereference an object:</strong> 
+    <br>
+
+        <?php include("H5R/h5rdereference_object_f_F90.htm"); ?>
+
+<!-- NEW PAGE -->
+    <p><strong>To dereference a region:</strong>	
+    <br>
+
+        <?php include("H5R/h5rdereference_region_f_F90.htm"); ?>
+
+<p>
+<dt><strong>Fortran2003 Interface:</strong> h5rdereference_f
+    <dd>
+
+        <?php include("H5R/h5rdereference_f_F03.htm"); ?>
+
+
+<br />
+<dt><strong>See Also:</a></strong></dt>
+    <dd>
+    “<a href=
+    "http://www.hdfgroup.org/HDF5/doc/Advanced/UsingIdentifiers/index.html">Using 
+    Identifiers</a>”</dd>
+
+
+<br />
+<dt><strong>History:</strong>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            C function <code>H5Rdereference2</code> 
+            introduced in this release.</td></tr>
+    </table>
+</dl>
+
+
diff --git a/html/RM/H5S/H5Sget_regular_hyperslab.htm b/html/RM/H5S/H5Sget_regular_hyperslab.htm
new file mode 100644
index 0000000..c81fd63
--- /dev/null
+++ b/html/RM/H5S/H5Sget_regular_hyperslab.htm
@@ -0,0 +1,195 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_regular_hyperslab" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Dataspace-GetRegularHyperslab">H5Sget_regular_hyperslab</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Sget_regular_hyperslab(
+        <em>hid_t</em> space_id,
+        <em>hsize_t</em> start[],
+        <em>hsize_t</em> stride[],
+        <em>hsize_t</em> count[],
+        <em>hsize_t</em> block[]
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves a regular hyperslab selection.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_regular_hyperslab</code> takes the 
+        dataspace identifier, <code>space_id</code>, and retrieves the values 
+        of <code>start</code>, <code>stride</code>, <code>count</code>, 
+        and <code>block</code> for the regular hyperslab selection.
+        <p>
+        A regular hyperslab selection is a hyperslab selection described 
+        by setting the <code>offset</code>, <code>stride</code>, 
+        <code>count</code>, and <code>block</code> parameters to the 
+        <code>H5Sselect_hyperslab</code> call. 
+        If several calls to <code>H5Sselect_hyperslab</code> are needed, 
+        the hyperslab selection is irregular. 
+        </p>
+        <p>
+        See <code>H5Sselect_hyperslab</code> for descriptions of
+        <code>offset</code>, <code>stride</code>, <code>count</code>, 
+        and <code>block</code>.
+        </p>
+    </dd></dt>
+
+<dt><strong>Note:</strong>
+    <dd>If a hyperslab selection is originally regular, then becomes 
+        irregular through selection operations, and then becomes 
+        regular again, the final regular selection may be equivalent 
+        but not identical to the original regular selection.
+    </dd></dt>
+    <br />
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> space_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the dataspace.</td>
+        </tr><tr>
+            <td width="5%" valign="top"><code><em>hsize_t</em> start[]</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">OUT: Offset of the start of the regular hyperslab.</td>
+        </tr><tr>
+            <td width="5%" valign="top"><code><em>hsize_t</em> stride[]</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">OUT: Stride of the regular hyperslab.</td>
+        </tr><tr>
+            <td width="5%" valign="top"><code><em>hsize_t</em> count[]</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">OUT: Number of blocks in the regular hyperslab.</td>
+        </tr><tr>
+            <td width="5%" valign="top"><code><em>hsize_t</em> block[]</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">OUT: Size of a block in the regular hyperslab.</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5sget_regular_hyperslab_f
+    <dd>
+
+        <?php include("H5S/h5sget_regular_hyperslab_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a>
+        <br />
+        <a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+        <br /> 
+        <br />
+        Virtual datasets:   <a href="H5Pset_virtual.htm">H5Pset_virtual</a>
+<!--
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+-->
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+<!--
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+-->
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5S/H5Sis_regular_hyperslab.htm b/html/RM/H5S/H5Sis_regular_hyperslab.htm
new file mode 100644
index 0000000..97f1bca
--- /dev/null
+++ b/html/RM/H5S/H5Sis_regular_hyperslab.htm
@@ -0,0 +1,166 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sis_regular_hyperslab" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 18 March 2016
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> 
+    <a name="Dataspace-IsRegularHyperslab">H5Sis_regular_hyperslab</a>
+    </dt>
+    <br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>htri_t</em> H5Sis_regular_hyperslab(
+        <em>hid_t</em> space_id
+        )</code>
+    </dd></dt>
+    <br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether a hyperslab selection is regular.
+    </dd></dt>
+    <br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Sis_regular_hyperslab</code> takes the 
+        dataspace identifier, <code>space_id</code>, 
+        and queries the type of the hyperslab selection.
+        <p>
+        A regular hyperslab selection is a hyperslab selection described by 
+        setting the offset, stride, count, and block parameters for a single
+        <code>H5Sselect_hyperslab</code> call. 
+        If several calls to <code>H5Sselect_hyperslab</code> are needed, 
+        then the hyperslab selection is irregular. 
+        </p>
+    </dd></dt>
+
+<!--
+<dt><strong>Note:</strong>
+    <dd>
+    </dd></dt>
+    <br />
+-->
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+            <td width="5%" valign="top"><code><em>hid_t</em> space_id</code>
+                </td>
+            <td width="5%"><code> </code></td>
+            <td valign="top">IN: The identifier of the dataspace.</td>
+        </tr>
+    </table></dd>
+    </dt>
+    <br />
+    
+<dt><strong>Returns:</strong>
+    <dd>Returns <code>TRUE</code> or <code>FALSE</code> for 
+        hyperslab selection if successful.
+        <br />
+        Returns <code>FAIL</code> on error or when querying other 
+        selection types such as point selection.</dd>
+    </dt>
+    <br />
+
+<dt><strong>Fortran Interface:</strong> h5sis_regular_hyperslab_f
+    <dd>
+
+        <?php include("H5S/h5sis_regular_hyperslab_f.htm"); ?>
+
+        </dd>
+    </dt>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <dd><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a>
+        <br />
+        <a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+        <br /> 
+        <br />
+        Virtual datasets:   <a href="H5Pset_virtual.htm">H5Pset_virtual</a>
+<!--
+    <table width="100%" border="0">
+    <tr><td width="50%"align="left" valign="top">
+          <li>“<a href="../NewFeaturesVirtualDatasetDocs.html">Virtual Dataset Overview</a>”</li>
+          <li>“<a href="UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”
+              <br /> </li>
+-->
+<!--
+          <li>“<a href="/HDF5/doc/Advanced/UsingVirtualDatasets/index.html">Using HDF5 Virtual Datasets</a>”</li>
+-->
+<!--
+           <br />
+          <b>Supporting functions:</b>
+          <li><a href="H5Pset_layout.htm">H5Pset_layout</a></li>
+          <li><a href="H5Pget_layout.htm">H5Pget_layout</a></li>
+          <li><a href="H5Sis_regular_hyperslab.htm">H5Sis_regular_hyperslab</a></li>
+          <li><a href="H5Sget_regular_hyperslab.htm">H5Sget_regular_hyperslab</a></li>
+          <li><a href="/HDF5/doc/RM/RM_H5S.html#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a></li>
+    </td><td width="50%"align="left" valign="top">
+          <b>VDS functions:</b>
+          <li><a href="H5Pset_virtual.htm">H5Pset_virtual</a></li>
+          <li><a href="H5Pget_virtual_count.htm">H5Pget_virtual_count</a></li>
+          <li><a href="H5Pget_virtual_vspace.htm">H5Pget_virtual_vspace</a></li>
+          <li><a href="H5Pget_virtual_srcspace.htm">H5Pget_virtual_srcspace</a></li>
+          <li><a href="H5Pget_virtual_filename.htm">H5Pget_virtual_filename</a></li>
+          <li><a href="H5Pget_virtual_dsetname.htm">H5Pget_virtual_dsetname</a></li>
+          <li><a href="H5Pset_virtual_printf_gap.htm">H5Pset_virtual_printf_gap</a></li>
+          <li><a href="H5Pget_virtual_printf_gap.htm">H5Pget_virtual_printf_gap</a></li>
+          <li><a href="H5Pset_virtual_view.htm">H5Pset_virtual_view</a></li>
+          <li><a href="H5Pget_virtual_view.htm">H5Pget_virtual_view</a>
+    </td></tr>
+    </table>
+-->
+    </dd>
+    <br />
+
+<dt><strong>History:</strong></dt>
+    <dd>
+    <table width="90%">
+    <tr>
+        <td valign="top" align="left" width="10%">
+        <strong>Release</strong>    </td>
+        <td valign="top" align="left">
+        <strong>Change</strong></td>
+    </tr><tr>
+        <td valign="top">1.10.0</td>
+        <td valign="top">
+        C function introduced with this release.</td>
+    </tr>
+    </table>
+    </dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5S/h5sget_regular_hyperslab_f.htm b/html/RM/H5S/h5sget_regular_hyperslab_f.htm
new file mode 100644
index 0000000..cf95999
--- /dev/null
+++ b/html/RM/H5S/h5sget_regular_hyperslab_f.htm
@@ -0,0 +1,26 @@
+<a name="H5S2fh5sget5fregular5fhyperslab5ff"></a>
+<a name="robo357"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5sget_regular_hyperslab_f(space_id, start, stride, count, 
+                                        block, hdferr)
+    INTEGER(HID_T), INTENT(IN) ::  space_id
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  start
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  stride
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  count
+    INTEGER(HSIZE_T), INTENT(OUT), DIMENSION(*), TARGET ::  block
+    INTEGER, INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  space_id - The identifier of the dataspace.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  start    - Offset of the start of the regular hyperslab.
+  stride   - Stride of the regular hyperslab.
+  count    - Number of blocks in the regular hyperslab.
+  block    - Size of a block in the regular hyperslab.
+  hdferr   - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5S/h5sis_regular_hyperslab_f.htm b/html/RM/H5S/h5sis_regular_hyperslab_f.htm
new file mode 100644
index 0000000..c39c8bd
--- /dev/null
+++ b/html/RM/H5S/h5sis_regular_hyperslab_f.htm
@@ -0,0 +1,19 @@
+<a name="H5S2fh5sis5fregular5fhyperslab5ff"></a>
+<a name="robo369"></a>
+
+<strong>Signature:</strong>
+<pre>  SUBROUTINE h5sis_regular_hyperslab_f(space_id, IsRegular, hdferr)
+    INTEGER(HID_T), INTENT(IN) ::  space_id
+    LOGICAL :: IsRegular
+    INTEGER, INTENT(OUT) :: hdferr
+</pre>
+
+<strong>Inputs:</strong>
+<pre>  space_id  - The identifier of the dataspace.
+</pre>
+
+<strong>Outputs:</strong>
+<pre>  IsRegular - TRUE or FALSE for hyperslab selection if successful.
+  hdferr    - Returns 0 if successful and -1 if fails.
+</pre>
+
diff --git a/html/RM/H5T/H5Tflush.htm b/html/RM/H5T/H5Tflush.htm
new file mode 100644
index 0000000..9d94513
--- /dev/null
+++ b/html/RM/H5T/H5Tflush.htm
@@ -0,0 +1,128 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tflush" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 26 February 2014
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Datatype-Flush">H5Tflush</a></dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Tflush(<em>hid_t</em> dtype_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Flushes all buffers associated with a committed datatype to disk.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Tflush</code> causes all buffers associated with a
+        committed datatype to be immediately flushed to disk without 
+        removing the data from the cache.  
+    </dd></dt><br />
+
+<dt><strong>Note:</strong>
+    <dd>HDF5 does not possess full control over buffering.
+        <code>H5Tflush</code> flushes the internal HDF5 buffers and then 
+        asks the operating system (the OS) to flush the system buffers 
+        for the open files.  After that, the OS is responsible for ensuring 
+        that the data is actually flushed to disk.
+    </dd></dt><br />
+    
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="top" width="15%"><code><em>hid_t</em> dtype_id  </code> </td>
+          <td valign="top" width="85%">IN: Identifier of the 
+              committed datatype to be flushed.</td></tr>
+    </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+    </dd><br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Trefresh.htm">H5Trefresh</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/H5T/H5Trefresh.htm b/html/RM/H5T/H5Trefresh.htm
new file mode 100644
index 0000000..3ff99ea
--- /dev/null
+++ b/html/RM/H5T/H5Trefresh.htm
@@ -0,0 +1,126 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Trefresh" -->
+
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 7 December 2015
+    </i></font></div></dt>
+    <br />
+
+<dt><strong>Name:</strong> <a name="Datatype-Refresh">H5Trefresh</a></dt><br />
+
+<dt><strong>Signature:</strong>
+    <dd><code><em>herr_t</em> H5Trefresh(<em>hid_t</em> dtype_id)</code>
+    </dd></dt><br />
+
+<dt><strong>Purpose:</strong>
+    <dd>Refreshes all buffers associated with a committed datatype.
+    </dd></dt><br />
+
+<dt><strong>Description:</strong>
+    <dd><code>H5Trefresh</code> causes all buffers associated with a
+        committed datatype to be cleared and immediately re-loaded with
+        updated contents from disk.
+        </dd><br />
+        <dd>This function essentially closes the datatype, evicts all 
+        metadata associated with it from the cache, and then re-opens 
+        the datatype. The reopened datatype is automatically re-registered 
+        with the same identifier.
+        </dd></dt><br />
+
+<dt><strong>Parameters:</strong>
+    <dd><table width="100%">
+        <tr>
+          <td valign="top" width="15%">
+              <code><em>hid_t</em> dtype_id  </code> </td>
+          <td valign="top" width="85%">IN: Identifier of the 
+              committed datatype to be refreshed.</td></tr>
+    </table></dd>
+    </dt><br />
+
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.</dd>
+    <br />
+
+<dt><strong>Fortran Interface:</strong></dt>
+    <dd>None</dd>
+    <br />
+
+<dt><strong>See Also:</strong></dt>
+    <ul>
+      <li><a href="H5Dflush.htm">H5Dflush</a></li>
+      <li><a href="H5Drefresh.htm">H5Drefresh</a></li>
+      <li><a href="H5Gflush.htm">H5Gflush</a></li>
+      <li><a href="H5Grefresh.htm">H5Grefresh</a></li>
+      <li><a href="H5Oflush.htm">H5Oflush</a></li>
+      <li><a href="H5Orefresh.htm">H5Orefresh</a></li>
+      <li><a href="H5Tflush.htm">H5Tflush</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Fstart_swmr_write.htm">H5Fstart_swmr_write</a></li>
+      <li><a href="H5DOAppend.htm">H5DOappend</a></li>
+      <li><a href="H5Pset_append_flush.htm">H5Pset_append_flush</a></li>
+      <li><a href="H5Pget_append_flush.htm">H5Pget_append_flush</a></li>
+      <li><a href="H5Pget_object_flush_cb.htm">H5Pget_object_flush_cb</a></li>
+    </ul>
+    <br />
+
+    <ul>
+      <li><a href="H5Odisable_mdc_flushes.htm">H5Odisable_mdc_flushes</a></li>
+      <li><a href="H5Oenable_mdc_flushes.htm">H5Oenable_mdc_flushes</a></li>
+      <li><a href="H5Oare_mdc_flushes_disabled.htm">H5Oare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fdisable_mdc_flushes.htm">H5Fdisable_mdc_flushes</a></li>
+      <li><a href="H5Fenable_mdc_flushes.htm">H5Fenable_mdc_flushes</a></li>
+      <li><a href="H5Fare_mdc_flushes_disabled.htm">H5Fare_mdc_flushes_disabled</a></li>
+      <li><a href="H5Fget_mdc_flush_disabled_obj_ids.htm">H5Fget_mdc_flush_disabled_obj_ids</a></li>
+    </ul>
+    <br />
+
+
+<dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+          <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+          <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+          C function introduced with this release. </td></tr>
+        </table></dd>
+
+</dl>
+<br />
+<br />
+<br />
+
+
+
diff --git a/html/RM/RM_H5D.html b/html/RM/RM_H5D.html
index f0c261d..d965751 100644
--- a/html/RM/RM_H5D.html
+++ b/html/RM/RM_H5D.html
@@ -90,6 +90,8 @@ In the
 
 These functions create and manipulate dataset objects, 
 and set and retrieve their constant or persistent properties.
+<br>
+In the following lists, italic type indicates a configurable macro.
 
 <p>
 <strong>The C Interfaces:</strong>
@@ -97,11 +99,11 @@ and set and retrieve their constant or persistent properties.
 <table border=0>
 <tr><td valign=top>
 <ul>
-    <li><a href="#Dataset-Create">H5Dcreate</a>
+    <li><a href="#Dataset-Create"><i>H5Dcreate</i></a>
     <li><a href="#Dataset-Create1">H5Dcreate1</a> *
     <li><a href="#Dataset-Create2">H5Dcreate2</a>
     <li><a href="#Dataset-CreateAnon">H5Dcreate_anon</a>
-    <li><a href="#Dataset-Open">H5Dopen</a>
+    <li><a href="#Dataset-Open"><i>H5Dopen</i></a>
     <li><a href="#Dataset-Open1">H5Dopen1</a> *
     <li><a href="#Dataset-Open2">H5Dopen2</a>
     <li><a href="#Dataset-Close">H5Dclose</a>
@@ -151,7 +153,7 @@ and set and retrieve their constant or persistent properties.
     <td valign="top">
 	<ul>
       <li><a href="#Dataset-Close">H5Dclose</a>
-      <li><a href="#Dataset-Create">H5Dcreate</a>
+      <li><a href="#Dataset-Create"><i>H5Dcreate</i></a>
       <li><a href="#Dataset-Create1">H5Dcreate1</a> *
       <li><a href="#Dataset-Create2">H5Dcreate2</a>
       <li><a href="#Dataset-CreateAnon">H5Dcreate_anon</a>
@@ -180,7 +182,7 @@ and set and retrieve their constant or persistent properties.
     
     <td valign="top">
 	<ul>
-      <li><a href="#Dataset-Open">H5Dopen</a>
+      <li><a href="#Dataset-Open"><i>H5Dopen</i></a>
       <li><a href="#Dataset-Open1">H5Dopen1</a> *
       <li><a href="#Dataset-Open2">H5Dopen2</a>
       <li><a href="#Dataset-Read">H5Dread</a>
@@ -337,7 +339,7 @@ In the
 
 <SCRIPT LANGUAGE="JAVASCRIPT">
 <!--
-document.writeln("Last modified: 9 October 2014");
+document.writeln("Last modified: 2 March 2016");
 -->
 </SCRIPT>
 
diff --git a/html/RM/RM_H5F.html b/html/RM/RM_H5F.html
index f607939..e187ba1 100644
--- a/html/RM/RM_H5F.html
+++ b/html/RM/RM_H5F.html
@@ -92,6 +92,8 @@ In the
 These functions are designed to provide file-level access to HDF5 files.
 Further manipulation of objects inside a file is performed through one of APIs
 documented below.
+<br>
+In the following lists, italic type indicates a configurable macro.
 
 <p>
 <strong>The C Interfaces:</strong>
@@ -108,14 +110,16 @@ documented below.
     <li><a href="#File-IsHDF5">H5Fis_hdf5</a>
     <li><a href="#File-Mount">H5Fmount</a>
     <li><a href="#File-Unmount">H5Funmount</a>
+    <li><a href="#File-GetVfdHandle">H5Fget_vfd_handle</a>
 </ul>
 </td><td>      </td><td valign=top>
 <ul>
-    <li><a href="#File-GetVfdHandle">H5Fget_vfd_handle</a>
     <li><a href="#File-GetFilesize">H5Fget_filesize</a>
     <li><a href="#File-GetCreatePlist">H5Fget_create_plist</a>
     <li><a href="#File-GetAccessPlist">H5Fget_access_plist</a>
-    <li><a href="#File-GetInfo">H5Fget_info</a>
+    <li><a href="#File-GetInfo"><i>H5Fget_info</i></a>
+    <li><a href="#File-GetInfo1">H5Fget_info1</a> *
+    <li><a href="#File-GetInfo2">H5Fget_info2</a>
     <li><a href="#File-GetIntent">H5Fget_intent</a>
     <li><a href="#File-GetName">H5Fget_name</a>
     <li><a href="#File-GetObjCount">H5Fget_obj_count</a>
@@ -135,6 +139,9 @@ documented below.
     <li><a href="#File-GetMpiAtomicity">H5Fget_mpi_atomicity</a>
 </ul>
 </td></tr>
+<tr><td align=right colspan=5>
+    * <i>Use of this function is deprecated in Release 1.8.0.</i>
+</td></tr>
 </table>
 <br>
 
@@ -153,6 +160,7 @@ documented below.
       <li><a href="#File-GetFileImage">H5Fget_file_image</a>
       <li><a href="#File-GetFilesize">H5Fget_filesize</a>
       <li><a href="#File-GetFreeSections">H5Fget_free_sections</a>
+      <li><a href="#File-GetFreespace">H5Fget_freespace</a> 
     </ul>      
     </td>
     
@@ -160,8 +168,9 @@ documented below.
     
     <td valign="top">
     <ul>
-      <li><a href="#File-GetFreespace">H5Fget_freespace</a> 
-      <li><a href="#File-GetInfo">H5Fget_info</a>
+      <li><a href="#File-GetInfo"><i>H5Fget_info</i></a>
+      <li><a href="#File-GetInfo1">H5Fget_info1</a> *
+      <li><a href="#File-GetInfo2">H5Fget_info2</a>
       <li><a href="#File-GetIntent">H5Fget_intent</a>
       <li><a href="#File-GetMdcConfig">H5Fget_mdc_config</a>
       <li><a href="#File-GetMdcHitRate">H5Fget_mdc_hit_rate</a>
@@ -169,7 +178,6 @@ documented below.
       <li><a href="#File-GetMpiAtomicity">H5Fget_mpi_atomicity</a>
       <li><a href="#File-GetName">H5Fget_name</a>
       <li><a href="#File-GetObjCount">H5Fget_obj_count</a>
-      <li><a href="#File-GetObjIDs">H5Fget_obj_ids</a>
     </ul>
     </td>
     
@@ -177,6 +185,7 @@ documented below.
     
     <td valign="top">
     <ul>
+      <li><a href="#File-GetObjIDs">H5Fget_obj_ids</a>
       <li><a href="#File-GetVfdHandle">H5Fget_vfd_handle</a>
       <li><a href="#File-IsHDF5">H5Fis_hdf5</a>
       <li><a href="#File-Mount">H5Fmount</a>
@@ -207,10 +216,10 @@ as the corresponding C function.
     <li><a href="#File-Reopen">h5freopen_f</a>
     <li><a href="#File-Close">h5fclose_f</a>
     <li><a href="#File-Flush">h5fflush_f</a>
-    <li><a href="#File-IsHDF5">h5fis_hdf5_f</a>
 </ul>
 </td><td>      </td><td valign=top>
 <ul>
+    <li><a href="#File-IsHDF5">h5fis_hdf5_f</a>
     <li><a href="#File-Mount">h5fmount_f</a>
     <li><a href="#File-Unmount">h5funmount_f</a>
 <!--    <li><a href="#File-GetVfdHandle">h5fget_vfd_handle_f</a>            -->
@@ -220,10 +229,10 @@ as the corresponding C function.
 <!--<li><a href="#File-GetInfo">H5Fget_info</a>                             -->
 <!--<li><a href="#File-GetIntent">H5Fget_intent</a>                         -->
     <li><a href="#File-GetName">h5fget_name_f</a>
-    <li><a href="#File-GetCreatePlist">h5fget_create_plist_f</a>
 </ul>
 </td><td>      </td><td valign=top>
 <ul>
+    <li><a href="#File-GetCreatePlist">h5fget_create_plist_f</a>
     <li><a href="#File-GetAccessPlist">h5fget_access_plist_f</a>
     <li><a href="#File-GetObjCount">h5fget_obj_count_f</a>
     <li><a href="#File-GetObjIDs">h5fget_obj_ids_f</a>
@@ -261,6 +270,8 @@ as the corresponding C function.
 <?php include("H5F/H5Fget_free_sections.htm"); ?>
 <?php include("H5F/H5Fget_freespace.htm"); ?>
 <?php include("H5F/H5Fget_info.htm"); ?>
+<?php include("H5F/H5Fget_info1.htm"); ?>
+<?php include("H5F/H5Fget_info2.htm"); ?>
 <?php include("H5F/H5Fget_intent.htm"); ?>
 <?php include("H5F/H5Fget_mdc_config.htm"); ?>
 <?php include("H5F/H5Fget_mdc_hit_rate.htm"); ?>
@@ -343,7 +354,7 @@ In the
 
 <SCRIPT LANGUAGE="JAVASCRIPT">
 <!--
-document.writeln("Last modified: 1 June 2015");
+document.writeln("Last modified: 4 March 2016");
 -->
 </SCRIPT>
  
diff --git a/html/RM/RM_H5R.html b/html/RM/RM_H5R.html
index 4e469d8..67b8d25 100644
--- a/html/RM/RM_H5R.html
+++ b/html/RM/RM_H5R.html
@@ -100,7 +100,9 @@ In the following lists, italic type indicates a configurable macro.
 <tr><td valign=top width=40%>
 <ul>
     <li><a href="#Reference-Create">H5Rcreate</a>
-    <li><a href="#Reference-Dereference">H5Rdereference</a>
+    <li><a href="#Reference-Dereference"><i>H5Rdereference</i></a>
+    <li><a href="#Reference-Dereference1">H5Rdereference1</a> *
+    <li><a href="#Reference-Dereference2">H5Rdereference2</a>
 </ul>
 </td><td valign=top width=40%>
 <ul>
@@ -115,7 +117,7 @@ In the following lists, italic type indicates a configurable macro.
 </ul>
 </td></tr>
 <tr><td align=right colspan=5>
-    * <i>Use of this function is deprecated in Release 1.8.0.</i>
+    * <i>Use of these functions is deprecated in Release 1.8.0.</i>
 </td></tr>
 </table>
 
@@ -128,8 +130,9 @@ In the following lists, italic type indicates a configurable macro.
     <td valign="top">
 	<ul>
       <li><a href="#Reference-Create">H5Rcreate</a>
-      <li><a href="#Reference-Dereference">H5Rdereference</a>
-      <li><a href="#Reference-GetName">H5Rget_name</a>
+      <li><a href="#Reference-Dereference"><i>H5Rdereference</i></a>
+      <li><a href="#Reference-Dereference1">H5Rdereference1</a> *
+      <li><a href="#Reference-Dereference2">H5Rdereference2</a>
 	</ul>      
     </td>
     
@@ -137,6 +140,7 @@ In the following lists, italic type indicates a configurable macro.
     
     <td valign="top">
 	<ul>
+      <li><a href="#Reference-GetName">H5Rget_name</a>
       <li><i><a href="#Reference-GetObjType">H5Rget_obj_type</a></i>
       <li><a href="#Reference-GetObjType1">H5Rget_obj_type1</a> *
       <li><a href="#Reference-GetObjType2">H5Rget_obj_type2</a>
@@ -197,6 +201,8 @@ as the corresponding C function.
 
 <?php include("H5R/H5Rcreate.htm"); ?>
 <?php include("H5R/H5Rdereference.htm"); ?>
+<?php include("H5R/H5Rdereference1.htm"); ?>
+<?php include("H5R/H5Rdereference2.htm"); ?>
 <?php include("H5R/H5Rget_name.htm"); ?>
 <?php include("H5R/H5Rget_obj_type.htm"); ?>
 <?php include("H5R/H5Rget_obj_type1.htm"); ?>
@@ -267,7 +273,7 @@ In the
 
 <SCRIPT LANGUAGE="JAVASCRIPT">
 <!--
-document.writeln("Last modified: 14 October 2014");
+document.writeln("Last modified: 4 March 2016");
 -->
 </SCRIPT> 
 
diff --git a/html/RM/Tools/h5dump.htm b/html/RM/Tools/h5dump.htm
index eb5d860..56504da 100644
--- a/html/RM/Tools/h5dump.htm
+++ b/html/RM/Tools/h5dump.htm
@@ -1,27 +1,29 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * Copyright by The HDF Group.                                               *
-  * Copyright by the Board of Trustees of the University of Illinois.         *
-  * All rights reserved.                                                      *
-  *                                                                           *
 
-  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "h5dump" -->
 <p>
-
 <hr>
 <dl>
 
@@ -30,6 +32,7 @@
     </i></font></div>
 
 <dt><strong>Tool Name:</strong> <a name="Tools-Dump">h5dump</a>
+
 <dt><strong>Syntax:</strong>
     <dd><code>h5dump
         [</code><em>OPTIONS</em><code>]</code> <em>files</em>
diff --git a/html/RM/Tools/h5format_convert.htm b/html/RM/Tools/h5format_convert.htm
new file mode 100644
index 0000000..b97521d
--- /dev/null
+++ b/html/RM/Tools/h5format_convert.htm
@@ -0,0 +1,185 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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://www.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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5format_convert" -->
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+    Last modified: 28 January 2016
+    </i></font></div></dt>
+
+  <dt><strong>Tool Name:</strong> 
+    <a name="Tools-FormatConvert">h5format_convert</a></dt>
+    <br />
+
+  <dt><strong>Syntax:</strong></dt>
+    <dd><code>h5format_convert <em>[OPTIONS] file_name</em></code></dd>
+    <br />
+
+  <dt><strong>Purpose:</strong></dt>
+    <dd>Converts the indexing of chunked datasets from 1.10.x types to 
+    the 1.8.x version 1 B-tree indexing type.</dd>
+    <br />
+
+  <dt><strong>Motivation:</strong></dt>
+    <dd>The indexing possibilities of chunked datasets was expanded 
+    in 1.10.x versions of the HDF5 Library. This tool 
+    can be used to convert chunked datasets made with 1.10.x versions 
+    of the library to the 1.8.x chunked dataset index format. </dd>
+    <br />
+
+  <dt><strong>Description:</strong></dt>
+    <dd>When run, the tool will investigate datasets in 
+    the file <code><em>file_name</em></code>. The tool will convert 
+    chunked datasets whose indexing type is not version 1 B-tree 
+    to version 1 B-tree. The tool will not change any dataset that is 
+    not chunked or its indexing type is already version 1 B-tree. If 
+    errors are encountered, no further conversion will be performed, 
+    and the tool will exit with failure. 
+    </dd>
+    <br />
+
+
+
+  <dt><strong>Options and Parameters:
+  </strong>
+  </dt>
+
+    <dd><strong>Options:</strong></dd>
+    <dd>
+    <br />
+
+    <table width="100%" cellpadding="5">
+    <tr valign="top">
+    <td><strong>Short and Long Forms</strong>
+    <td><strong>Comments</strong></td>
+
+    <tr valign="top">
+    <td width="12%"><code>-h</code>
+        <br />
+        <code>--help</code></td>
+    <td>The tool will print a usage message and exit with success.</td></tr>
+
+    <tr valign="top">
+    <td><code>-V</code>
+        <br />
+        <code>--version</code></td>
+    <td>The tool will print the version # and exit with success.</td></tr>
+
+    <tr valign="top">
+    <td><code>-v</code>
+        <br />
+        <code>--verbose</code></td>
+    <td>This will enable the verbose mode. The tool will 
+        print the steps being done while converting a dataset.</td></tr>
+
+    <tr valign="top">
+    <td><code>-d <em>dataset_name</em></code>
+        <br />
+        <code>--dname=<em>dataset_name</em></code>
+        <br />
+        <code>                         </code></td>
+    <td>This is the name including its path of the 
+        dataset to be converted (the links from the root group to the 
+        dataset). When the dataset is not chunked or the indexing 
+        type is already version 1 B-tree, the tool will not perform any 
+        conversion and will exit with success. Only one dataset can be 
+        specified with this option each time the tool is run. 
+        If this option is not used, the tool will attempt to convert 
+        every dataset in <code><em>file_name</em></code>.
+    </td></tr>
+
+    <tr valign="top">
+    <td><code>-n</code>
+        <br />
+        <code>--noop</code></td>
+    <td>Noop is short for no operation. The file will not 
+        be modified. The tool will perform all the steps except the actual 
+        conversion and exit with success. When errors are encountered along 
+        the way, the tool will exit with failure.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+
+    <dd><strong>Parameter:</strong></dd>
+    <dd>
+    <table width="100%">
+    <tr valign="top">
+    <td width="12%"><code><em>file_name</em></code>
+        <br />
+        <code>                         </code>
+    </td>
+    <td>The name of the file that the tool will operate on.</td></tr>
+    </table>
+    
+    
+    
+    </dd>
+    <br />
+
+
+
+<dt><strong>See Also:</strong></dt>
+<!-- comment out unneeded links -->
+<!--
+    <dd><a href="RM_H5D.html#Dataset-ConvertChunkIndexType">
+        <code>H5Dconvert_chunk_index_type</code></a></dd>
+    <dd><a href="RM_H5D.html#Dataset-GetChunkIndexType">
+        <code>H5Dget_chunk_index_type</code></a></dd>
+    <dd><a href="RM_H5O.html#Object-FormatConvert">
+        <code>H5Oformat_convert</code></a></dd>
+    <dd><a href="https://www.hdfgroup.org/HDF5/doc/RM/Tools.html#Tools-FormatConvert">
+        <code>h5format_convert</code></a></dd>    
+    -->
+    <dd><a href="https://www.hdfgroup.org/HDF5/doc/H5.format.html">
+        <em>HDF5 File Format Specification</em></a></dd>
+    <br />
+
+
+
+
+  <dt><strong>History:</strong></dt>
+    <dd><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>    </td>
+          <td valign="top" align="left">
+            <strong>Change</strong></td></tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            Tool introduced in this release.</td></tr>
+    </table>
+    </dd>
+    <br />
+
+
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/RM/Tools/h5repack.htm b/html/RM/Tools/h5repack.htm
index c6cf8e5..59e6c1b 100644
--- a/html/RM/Tools/h5repack.htm
+++ b/html/RM/Tools/h5repack.htm
@@ -1,23 +1,23 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "h5repack" -->
 <hr>
@@ -407,6 +407,15 @@
           <td valign="top" align="left">
             <strong>Change</strong></td></tr>
         <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            Options added in this release for file space management:
+            <br />
+            <code>    -S, -fs_strategy</code>
+            <br />
+            <code>    -T, -fs_threshold</code>
+            </td></tr>
+        <tr>
           <td valign="top">1.8.12</td>
           <td valign="top">
             Added user-defined filter parameter (<code>UD</code>) to 
diff --git a/html/RM/Tools/h5stat.htm b/html/RM/Tools/h5stat.htm
index 4c6562b..f6e4241 100644
--- a/html/RM/Tools/h5stat.htm
+++ b/html/RM/Tools/h5stat.htm
@@ -1,23 +1,26 @@
-
-
-<!--
-  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
 <!-- NEW PAGE -->
 <!-- HEADER RIGHT "h5stat" -->
 <hr>
@@ -28,6 +31,7 @@
     </i></font></div>
 
 <dt><strong>Tool Name:</strong> <a name="Tools-Stat">h5stat</a>
+
 <dt><strong>Syntax:</strong>
 <!--
     <dd><code>h5stat </code>[<code>-h </code>|<code> --help</code>]
diff --git a/html/RM/Tools/h5watch.htm b/html/RM/Tools/h5watch.htm
new file mode 100644
index 0000000..81d600e
--- /dev/null
+++ b/html/RM/Tools/h5watch.htm
@@ -0,0 +1,292 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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.     *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+-->
+
+
+<!--__ ***********************************************************  -->
+<!--__ Do not alter the next line; it is used by the PDF generator. -->
+<!--__ ***********************************************************  -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5watch" -->
+<hr />
+<dl>
+
+<dt><div align="right"><font color="999999" size="-1"><i>
+      <a name="LastModifiedDate">
+      Last modified: 28 January 2016
+      </a></i></font></div></dt>
+      <br />
+
+  <dt><strong>Tool Name:</a></strong> 
+    <a name="Tools-Watch"><code>h5watch</code></a></dt>
+    <br />
+
+  <dt><strong><a name="Syntax">Syntax:</a></strong></dt>
+    <dd><code>h5watch <i>[OPTIONS] OBJECT</i></code></dd>
+    <br />
+
+  <dt><strong><a name="Purpose">Purpose:</a></strong></dt>
+    <dd>Outputs new records appended to a dataset as the dataset grows.</dd>
+    <br />
+
+  <dt><strong><a name="Motivation">Motivation:</a></strong></dt>
+    <dd><code>h5watch</code> can be used to watch data that is added 
+    to a dataset. The functionality is similar to the Unix user command 
+    <code>tail</code> with the follow option, which outputs appended 
+    data as the file grows. </dd>
+    <br />
+
+  <dt><strong><a name="Description">Current Limitations:</a></strong></dt>
+    <dd>The current limitations are the following:
+    <ul>
+    <li><code>h5watch</code> can only be used on chunked 
+    datasets with unlimited dimension(s) or a fixed dimension with 
+    a maximum dimension setting. </li>
+    <li>While monitoring a dataset, users need to ensure that data that is 
+    being written to the dataset is flushed to the file.</li>
+    </ul>
+    </dd>
+    <br />
+    
+  <dt><strong><a name="OptionsAndParameters">Options and Parameters:
+  </a></strong>
+  </dt>
+    <br />
+
+    <dd><strong>Options:</strong></dd>
+    <dd>The following optional command-line options can be used with 
+    <code>h5watch:</code></dd>
+    <br />
+
+    <dd><table width="100%" align="left" border="0" cellpadding="5">
+
+        <tr>
+          <td valign="top" align="left" width="30%">
+            <strong>Long Format</strong></td>
+          <td valign="top" align="left" width="70%">
+            <strong>Comments</strong></td>
+        </tr>
+
+        <tr>
+          <td valign="top" align="left">
+          <code>--help</code></td>
+          <td valign="top" align="left">
+          Print a usage message and exit.</td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--version</code></td>
+          <td valign="top" align="left">
+          Print the version of HDF5 and exit.</td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--label</code></td>
+          <td valign="top" align="left">
+          Label members of a compound datatyped dataset.</td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--simple</code></td>
+          <td valign="top" align="left">
+          Use a machine-readable output format.</td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--dim</code></td>
+          <td valign="top" align="left">
+          Monitor changes in dimension size of the dataset only.
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--width=<i>N</i></code></td>
+          <td valign="top" align="left">
+          Set the number of columns to <i>N</i> for output. A value of 
+          0 sets the number of columns to the maximum (65535). The 
+          default width is 80 columns.
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--polling=<i>N</code></i></td>
+          <td valign="top" align="left">
+          Set the polling interval to <i>N</i> (in seconds) when the 
+          dataset will be checked for appended data. The default 
+          polling interval is 1.
+          </td>
+        </tr>
+        <tr>
+          <td valign="top" align="left">
+          <code>--fields=<em>list_of_fields</em></td>
+          <td valign="top" align="left">
+          Display data for the fields specified in 
+          <code><em>list_of_fields</em></code> for a compound datatype. 
+          <code><em>list_of_field</em></code> can be specified as follows:
+          <ul>
+          <li>A comma-separated list of field names in a compound data 
+          type.
+          </li>
+          <li>A single field name in a compound data type. This option 
+          can be used multiple times to select multiple fields in a 
+          compound data type.
+          </li></ul>
+          Note that “,” is the separator for field names while 
+          “.” is the separator for a nested field.
+          The backslash is the escape character; use it to escape 
+          character(s) in field names that conflict with the separators 
+          used by the tool.
+          </td>
+        </tr>
+        </table></dd>    
+    
+    
+
+
+    
+    <dd><strong><br />Object:</strong></dd>
+    <dd><em><code>OBJECT</code></em> is the dataset to be monitored and 
+    is specified with the following format:</dd>
+    <dd>
+    <dir><table width="100%" cellpadding="5">
+         <tr valign="top">
+             <td colspan="2"><code>
+                 <em>filename</em>/<em>path_to_dataset</em>/<em>dsetname</em>
+                 </code>
+                 <br /> 
+                 </td>
+         </tr>
+         <tr valign="top">
+             <td colspan="2">Each element in this specification of 
+                 <em><code>OBJECT</code></em> is defined as follows:
+         </tr>
+         <tr valign="top">
+             <td><code><em>filename</em></code></td>
+             <td>The name of the HDF5 file.
+                 <br />
+                 May be preceded by a path separated by slashes 
+                 to the specified HDF5 file.</td>
+         </tr>
+         <tr valign="top">
+             <td><code><em>path_to_dataset</em></code></td>
+             <td>The path within the HDF5 file separated by slashes 
+                 to the specified dataset</td>
+         </tr>
+         <tr valign="top">
+             <td><code><em>dsetname</em></code></td>
+             <td>The name of the dataset to be monitored.</td>
+         </tr>
+         </table>
+    </dir>
+    </dd>
+    <br />
+    
+
+
+  <dt><strong><a name="ExitStatus">Exit Status:</a></strong></dt>
+    <dd>
+    <table border=0>
+        <tr valign=top align=left>
+            <td>0</td>
+            <td>Succeeded.</td>
+        </tr>
+        <tr valign=top align=left>
+            <td>> 0    </td>
+            <td>An error occurred.</td>
+        </tr>
+    </table>
+    </dd>
+    <br />
+
+
+  <dt><strong><a name="ExampleUsage">Example Usage:</a></strong></dt>
+    <dd>
+    <p>The default use is to include the tool name and the name of the 
+    dataset that will be watched. The output will describe any change 
+    and will list the changes. </p>
+    
+    <p>Suppose there is a dataset called dsetA in an HDF5 file called 
+    example.h5, and this dataset is a one-dimensional dataset with 
+    three records. After <code>h5watch</code> is run with a command line 
+    of <code>h5watch example.h5/dsetA</code>, the dimension size in the 
+    file is changed from three to five, and data is written to the 
+    dataset. The output from <code>h5watch</code> would be the 
+    following:</p>
+    
+    <pre>
+    dims[0]: 3->5
+    
+    Data:
+    (3): record
+    (4): record
+    </pre>
+
+    <p>For more examples, see the <a href="h5watchExamples.pdf">
+    <i>h5watch Examples</i></a> document.
+    </p>
+    </dd>
+    <br />
+
+
+
+  <dt><strong><a name="SeeAlso">See Also:</a></strong></dt>
+    <ul>
+        <li><a href="H5LDget_dset_type_size.htm">
+          <code>H5LDget_dset_type_size</code></a></li>
+        <li><a href="H5LDget_dset_dims.htm">
+          <code>H5LDget_dset_dims</code></a></li>
+        <li><a href="H5LDget_dset_elmts.htm">
+          <code>H5LDget_dset_elmts</code></a></li>
+    </ul>
+        <br />
+
+
+
+  <dt><strong><a name="History">History:</a></strong></dt>
+    <dd>
+      <table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong></td>
+          <td valign="top" align="left" width="90%">
+            <strong>Change</strong></td>
+        </tr>
+        <tr>
+          <td valign="top">1.10.0</td>
+          <td valign="top">
+            Tool introduced in this release.</td>
+        </tr>
+<!--
+        <tr>
+          <td valign="top">«*.**.**»</td>
+          <td valign="top">
+            Tool changed in-this-way.</td>
+        </tr>
+-->        
+      </table></dd>
+
+<br />
+
+
+
+
+
+</dl>
+<br />
+<br />
+<br />
+
diff --git a/html/TechNotes.html b/html/TechNotes.html
index 69169a5..70cb411 100644
--- a/html/TechNotes.html
+++ b/html/TechNotes.html
@@ -94,6 +94,16 @@ HDF5 Special Topics and Technical Notes  
 </td></tr>
 
 <tr><td valign=top>
+<a href="TechNotes/TechNote-HDF5-ImprovingIOPerformanceCompressedDatasets.pdf">
+    Improving I/O Performance When Working with HDF5 Compressed Datasets</a>
+    </td><td> </td><td valign=top colspan="3">
+    Describes the factors that should be considered when storing 
+    compressed data in HDF5 files and how to tune those parameters 
+    to optimize the I/O performance of an HDF5 application when 
+    working with compressed datasets.
+</td></tr>
+
+<tr><td valign=top>
 <a href="TechNotes/VFL.html">Virtual File Layer</a>
     </td><td> </td><td valign=top colspan="3">
     A description of the HDF5 virtual file layer (VFL), 
@@ -406,7 +416,7 @@ HDF5 Technical Notes  
 
 <?php include("./ed_libs/Footer.htm"); ?>
 
-Last modified: 24 April 2015
+Last modified: 15 February 2016
 
 
 </body>
diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt
new file mode 100644
index 0000000..0440d41
--- /dev/null
+++ b/java/CMakeLists.txt
@@ -0,0 +1,77 @@
+cmake_minimum_required(VERSION 3.1.0)
+PROJECT ( HDF5_JAVA C Java )
+
+set (CMAKE_MODULE_PATH "${HDF_RESOURCES_DIR};${HDF_RESOURCES_EXT_DIR}")
+find_package (Java)
+#-----------------------------------------------------------------------------
+# Include some macros for reusable code
+#-----------------------------------------------------------------------------
+include (${HDF_RESOURCES_DIR}/UseJava.cmake)
+
+message (STATUS "JAVA: JAVA_HOME=$ENV{JAVA_HOME} JAVA_ROOT=$ENV{JAVA_ROOT}")
+find_package (JNI)
+
+INCLUDE_DIRECTORIES ( ${JNI_INCLUDE_DIRS} )
+
+#-----------------------------------------------------------------------------
+# Include the main src and config directories
+#-----------------------------------------------------------------------------
+set (HDF5_JAVA_INCLUDE_DIRECTORIES
+    ${HDF5_JAVA_JNI_SRC_DIR}
+    ${JAVA_INCLUDE_PATH}
+    ${JAVA_INCLUDE_PATH2}
+)
+INCLUDE_DIRECTORIES (${HDF5_JAVA_INCLUDE_DIRECTORIES})
+set (CMAKE_JAVA_INCLUDE_PATH "")
+
+
+#-----------------------------------------------------------------------------
+# Traverse source subdirectory
+#-----------------------------------------------------------------------------
+add_subdirectory (${HDF5_JAVA_SOURCE_DIR}/src ${HDF5_JAVA_BINARY_DIR}/src)
+
+#-----------------------------------------------------------------------------
+# Build the Java Examples
+#-----------------------------------------------------------------------------
+if (HDF5_BUILD_EXAMPLES)
+  add_subdirectory (${HDF5_JAVA_SOURCE_DIR}/examples ${HDF5_JAVA_BINARY_DIR}/examples)
+endif (HDF5_BUILD_EXAMPLES)
+
+#-----------------------------------------------------------------------------
+# Testing
+#-----------------------------------------------------------------------------
+if (BUILD_TESTING)
+  add_subdirectory (${HDF5_JAVA_SOURCE_DIR}/test ${HDF5_JAVA_BINARY_DIR}/test)
+endif (BUILD_TESTING)
+
+#-----------------------------------------------------------------------------
+# Add Required Jar(s)
+#-----------------------------------------------------------------------------
+install (
+    FILES
+        ${HDF5_JAVA_LOGGING_JAR}
+        ${HDF5_JAVA_LOGGING_NOP_JAR}
+        ${HDF5_JAVA_LOGGING_SIMPLE_JAR}
+    DESTINATION ${HDF5_INSTALL_JAR_DIR}
+    COMPONENT libraries
+)
+
+#-----------------------------------------------------------------------------
+# Option to include jre
+#-----------------------------------------------------------------------------
+option (HDF5_JAVA_PACK_JRE  "Package a JRE installer directory" OFF)
+if (HDF5_JAVA_PACK_JRE)
+  if (WIN32)
+    install (
+        DIRECTORY "C:/Program Files/Java/jre8"
+        DESTINATION ${HDF5_INSTALL_BIN_DIR}
+        USE_SOURCE_PERMISSIONS
+    )
+  else (WIN32)
+    install (
+        DIRECTORY "/usr/lib/jvm/jre"
+        DESTINATION ${HDF5_INSTALL_BIN_DIR}
+        USE_SOURCE_PERMISSIONS
+    )
+  endif (WIN32)
+endif (HDF5_JAVA_PACK_JRE)
diff --git a/java/COPYING b/java/COPYING
new file mode 100644
index 0000000..6903daf
--- /dev/null
+++ b/java/COPYING
@@ -0,0 +1,16 @@
+
+  Copyright by  The HDF Group and 
+                The Board of Trustees of the University of Illinois. 
+  All rights reserved. 
+
+  The files and subdirectories in this directory are 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://www.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. 
+
diff --git a/java/Makefile.am b/java/Makefile.am
new file mode 100644
index 0000000..10b1e91
--- /dev/null
+++ b/java/Makefile.am
@@ -0,0 +1,38 @@
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+## Only recurse into subdirectories if the Java (JNI) interface is enabled.
+if BUILD_JAVA_CONDITIONAL
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+SUBDIRS=src test examples
+
+endif
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/Makefile.in b/java/Makefile.in
new file mode 100644
index 0000000..2ee766e
--- /dev/null
+++ b/java/Makefile.in
@@ -0,0 +1,1432 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS =
+subdir = java
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+DIST_SUBDIRS = src test examples
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/test-driver \
+	$(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am COPYING
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+ at BUILD_JAVA_CONDITIONAL_TRUE@JAVA_API = yes
+ at BUILD_JAVA_CONDITIONAL_TRUE@SUBDIRS = src test examples
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all 
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
+	check check-TESTS check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags ctags-am distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/CMakeLists.txt b/java/examples/CMakeLists.txt
new file mode 100644
index 0000000..0430bdb
--- /dev/null
+++ b/java/examples/CMakeLists.txt
@@ -0,0 +1,7 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDFJAVA_EXAMPLES)
+
+add_subdirectory (${HDFJAVA_EXAMPLES_SOURCE_DIR}/datasets     datasets)
+add_subdirectory (${HDFJAVA_EXAMPLES_SOURCE_DIR}/datatypes   datatypes)
+add_subdirectory (${HDFJAVA_EXAMPLES_SOURCE_DIR}/groups      groups)
+add_subdirectory (${HDFJAVA_EXAMPLES_SOURCE_DIR}/intro       intro)
diff --git a/java/examples/Makefile.am b/java/examples/Makefile.am
new file mode 100644
index 0000000..e685e01
--- /dev/null
+++ b/java/examples/Makefile.am
@@ -0,0 +1,31 @@
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+## Only recurse into subdirectories if the Java (JNI) interface is enabled.
+   SUBDIRS=intro groups datasets datatypes
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/examples/Makefile.in b/java/examples/Makefile.in
new file mode 100644
index 0000000..9fa73b6
--- /dev/null
+++ b/java/examples/Makefile.in
@@ -0,0 +1,1429 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+#
+# HDF5 Java Library Examples Makefile(.in)
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS =
+subdir = java/examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/test-driver \
+	$(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+SUBDIRS = intro groups datasets datatypes
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/examples/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all 
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
+	check check-TESTS check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags ctags-am distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/datasets/CMakeLists.txt b/java/examples/datasets/CMakeLists.txt
new file mode 100644
index 0000000..077c6bb
--- /dev/null
+++ b/java/examples/datasets/CMakeLists.txt
@@ -0,0 +1,138 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDFJAVA_EXAMPLES_DATASETS Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_JNI_BINARY_DIR}
+    ${HDF5_JAVA_HDF5_LIB_DIR}
+)
+
+set (HDF_JAVA_EXAMPLES
+    H5Ex_D_Alloc
+    H5Ex_D_Checksum
+    H5Ex_D_Chunk
+    H5Ex_D_Compact
+    H5Ex_D_External
+    H5Ex_D_FillValue
+    H5Ex_D_Gzip
+    H5Ex_D_Hyperslab
+    H5Ex_D_ReadWrite
+    H5Ex_D_Shuffle
+    H5Ex_D_Szip
+    H5Ex_D_UnlimitedAdd
+    H5Ex_D_UnlimitedGzip
+    H5Ex_D_UnlimitedMod
+    H5Ex_D_Nbit
+    H5Ex_D_Transform
+    H5Ex_D_Sofloat
+    H5Ex_D_Soint
+)
+
+if (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+else (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+endif (WIN32)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
+endforeach (CMAKE_INCLUDE_PATH)
+
+foreach (example ${HDF_JAVA_EXAMPLES})
+  file (WRITE ${PROJECT_BINARY_DIR}/${example}_Manifest.txt
+  "Main-Class: examples.datasets.${example}
+"
+  )
+  add_jar (${example} MANIFEST ${PROJECT_BINARY_DIR}/${example}_Manifest.txt ${example}.java)
+  get_target_property (${example}_JAR_FILE ${example} JAR_FILE)
+#  install_jar (${example} ${HJAVA_INSTALL_DATA_DIR}/examples examples)
+  get_target_property (${example}_CLASSPATH ${example} CLASSDIR)
+  add_dependencies (${example} ${HDF5_JAVA_HDF5_LIB_TARGET})
+endforeach (example ${HDF_JAVA_EXAMPLES})
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_NOP_JAR}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (HDFJAVA_JAR ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${HDFJAVA_JAR}")
+endforeach (HDFJAVA_JAR)
+
+MACRO (ADD_H5_TEST resultfile resultcode)
+  add_test (
+      NAME JAVA_datasets-${resultfile}
+      COMMAND "${CMAKE_COMMAND}"
+          -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
+          -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${resultfile}_JAR_FILE}"
+          -D "TEST_ARGS:STRING=${ARGN}"
+          -D "TEST_PROGRAM=examples.datasets.${resultfile}"
+          -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
+          -D "TEST_FOLDER=${HDFJAVA_EXAMPLES_BINARY_DIR}"
+          -D "TEST_OUTPUT=datasets/${resultfile}.out"
+          -D "TEST_EXPECT=${resultcode}"
+          -D "TEST_REFERENCE=datasets/${resultfile}.txt"
+          -P "${HDF_RESOURCES_DIR}/jrunTest.cmake"
+  )
+  if (NOT "${last_test}" STREQUAL "")
+    set_tests_properties (JAVA_datasets-${resultfile} PROPERTIES DEPENDS ${last_test})
+  endif (NOT "${last_test}" STREQUAL "")
+  set (last_test "JAVA_datasets-${resultfile}")
+ENDMACRO (ADD_H5_TEST file)
+
+if (BUILD_TESTING)
+
+# detect whether the encoder is present.
+  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)
+
+  foreach (example ${HDF_JAVA_EXAMPLES})
+    if (${example} STREQUAL "H5Ex_D_External")
+      add_test (
+          NAME JAVA_datasets-${example}-clearall-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove
+              ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
+              ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.data
+              ${example}.out
+              ${example}.out.err
+      )
+    else (${example} STREQUAL "H5Ex_D_External")
+      add_test (
+          NAME JAVA_datasets-${example}-clearall-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove
+              ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
+              ${example}.out
+              ${example}.out.err
+      )
+    endif (${example} STREQUAL "H5Ex_D_External")
+    if (NOT "${last_test}" STREQUAL "")
+      set_tests_properties (JAVA_datasets-${example}-clearall-objects PROPERTIES DEPENDS ${last_test})
+    endif (NOT "${last_test}" STREQUAL "")
+    add_test (
+        NAME JAVA_datasets-${example}-copy-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E copy_if_different
+            ${HDFJAVA_EXAMPLES_SOURCE_DIR}/testfiles/examples.datasets.${example}.txt
+            ${HDFJAVA_EXAMPLES_DATASETS_BINARY_DIR}/${example}.txt
+    )
+    set_tests_properties (JAVA_datasets-${example}-copy-objects PROPERTIES DEPENDS JAVA_datasets-${example}-clearall-objects)
+    set (last_test "JAVA_datasets-${example}-copy-objects")
+    if (${example} STREQUAL "H5Ex_D_Szip")
+      if (USE_FILTER_SZIP)
+        ADD_H5_TEST (${example} 0)
+      endif (USE_FILTER_SZIP)
+    else (${example} STREQUAL "H5Ex_D_Szip")
+      ADD_H5_TEST (${example} 0)
+    endif (${example} STREQUAL "H5Ex_D_Szip")
+
+  endforeach (example ${HDF_JAVA_EXAMPLES})
+endif (BUILD_TESTING)
diff --git a/java/examples/datasets/H5Ex_D_Alloc.java b/java/examples/datasets/H5Ex_D_Alloc.java
new file mode 100644
index 0000000..69fee38
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Alloc.java
@@ -0,0 +1,301 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to set the space allocation time
+  for a dataset.  The program first creates two datasets,
+  one with the default allocation time (late) and one with
+  early allocation time, and displays whether each has been
+  allocated and their allocation size.  Next, it writes data
+  to the datasets, and again displays whether each has been
+  allocated and their allocation size.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Alloc {
+    private static String FILENAME = "H5Ex_D_Alloc.h5";
+    private static String DATASETNAME1 = "DS1";
+    private static String DATASETNAME2 = "DS2";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int FILLVAL = 99;
+    private static final int RANK = 2;
+
+    // Values for the status of space allocation
+    enum H5D_space_status {
+        H5D_SPACE_STATUS_ERROR(-1), H5D_SPACE_STATUS_NOT_ALLOCATED(0), H5D_SPACE_STATUS_PART_ALLOCATED(1), H5D_SPACE_STATUS_ALLOCATED(
+                2);
+        private static final Map<Integer, H5D_space_status> lookup = new HashMap<Integer, H5D_space_status>();
+
+        static {
+            for (H5D_space_status s : EnumSet.allOf(H5D_space_status.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5D_space_status(int space_status) {
+            this.code = space_status;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5D_space_status get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void allocation() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id1 = -1;
+        long dataset_id2 = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+        int space_status = 0;
+        long storage_size = 0;
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = FILLVAL;
+
+        // Create a file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, and set the chunk size.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the allocation time to "early". This way we can be sure
+        // that reading from the dataset immediately after creation will
+        // return the fill value.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_alloc_time(dcpl_id, HDF5Constants.H5D_ALLOC_TIME_EARLY);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        System.out.println("Creating datasets...");
+        System.out.println(DATASETNAME1 + " has allocation time H5D_ALLOC_TIME_LATE");
+        System.out.println(DATASETNAME2 + " has allocation time H5D_ALLOC_TIME_EARLY");
+        System.out.println();
+
+        // Create the dataset using the dataset default creation property list.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0))
+                dataset_id1 = H5.H5Dcreate(file_id, DATASETNAME1, HDF5Constants.H5T_NATIVE_INT, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset using the dataset creation property list.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id2 = H5.H5Dcreate(file_id, DATASETNAME2, HDF5Constants.H5T_NATIVE_INT, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print space status and storage size for dset1.
+        try {
+            if (dataset_id1 >= 0)
+                space_status = H5.H5Dget_space_status(dataset_id1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id1 >= 0)
+                storage_size = H5.H5Dget_storage_size(dataset_id1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        String the_space = " ";
+        if (H5D_space_status.get(space_status) != H5D_space_status.H5D_SPACE_STATUS_ALLOCATED)
+            the_space += "not ";
+        System.out.println("Space for " + DATASETNAME1 + " has" + the_space + "been allocated.");
+        System.out.println("Storage size for " + DATASETNAME1 + " is: " + storage_size + " bytes.");
+
+        // Retrieve and print space status and storage size for dset2.
+        try {
+            if (dataset_id2 >= 0)
+                space_status = H5.H5Dget_space_status(dataset_id2);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id2 >= 0)
+                storage_size = H5.H5Dget_storage_size(dataset_id2);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        the_space = " ";
+        if (H5D_space_status.get(space_status) != H5D_space_status.H5D_SPACE_STATUS_ALLOCATED)
+            the_space += "not ";
+        System.out.println("Space for " + DATASETNAME2 + " has" + the_space + "been allocated.");
+        System.out.println("Storage size for " + DATASETNAME2 + " is: " + storage_size + " bytes.");
+        System.out.println();
+
+        System.out.println("Writing data...");
+        System.out.println();
+
+        // Write the data to the datasets.
+        try {
+            if (dataset_id1 >= 0)
+                H5.H5Dwrite(dataset_id1, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data[0]);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id2 >= 0)
+                H5.H5Dwrite(dataset_id2, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data[0]);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print space status and storage size for dset1.
+        try {
+            if (dataset_id1 >= 0)
+                space_status = H5.H5Dget_space_status(dataset_id1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id1 >= 0)
+                storage_size = H5.H5Dget_storage_size(dataset_id1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        the_space = " ";
+        if (H5D_space_status.get(space_status) != H5D_space_status.H5D_SPACE_STATUS_ALLOCATED)
+            the_space += "not ";
+        System.out.println("Space for " + DATASETNAME1 + " has" + the_space + "been allocated.");
+        System.out.println("Storage size for " + DATASETNAME1 + " is: " + storage_size + " bytes.");
+
+        // Retrieve and print space status and storage size for dset2.
+        try {
+            if (dataset_id2 >= 0)
+                space_status = H5.H5Dget_space_status(dataset_id2);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id2 >= 0)
+                storage_size = H5.H5Dget_storage_size(dataset_id2);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        the_space = " ";
+        if (H5D_space_status.get(space_status) != H5D_space_status.H5D_SPACE_STATUS_ALLOCATED)
+            the_space += "not ";
+        System.out.println("Space for " + DATASETNAME2 + " has" + the_space + "been allocated.");
+        System.out.println("Storage size for " + DATASETNAME2 + " is: " + storage_size + " bytes.");
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id1 >= 0)
+                H5.H5Dclose(dataset_id1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id2 >= 0)
+                H5.H5Dclose(dataset_id2);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_Alloc.allocation();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Checksum.java b/java/examples/datasets/H5Ex_D_Checksum.java
new file mode 100644
index 0000000..3a2f98f
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Checksum.java
@@ -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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+  This example shows how to read and write data to a dataset
+  using the Fletcher32 checksum filter.  The program first
+  checks if the Fletcher32 filter is available, then if it
+  is it writes integers to a dataset using Fletcher32, then
+  closes the file.  Next, it reopens the file, reads back
+  the data, checks if the filter detected an error and
+  outputs the type of filter and the maximum value in the
+  dataset to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Checksum {
+    private static String FILENAME = "H5Ex_D_Checksum.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(-1), H5Z_FILTER_NONE(0), H5Z_FILTER_DEFLATE(1), H5Z_FILTER_SHUFFLE(2), H5Z_FILTER_FLETCHER32(3), H5Z_FILTER_SZIP(
+                4), H5Z_FILTER_NBIT(5), H5Z_FILTER_SCALEOFFSET(6), H5Z_FILTER_RESERVED(256), H5Z_FILTER_MAX(65535);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkFletcher32Filter() {
+        try {
+            int available = H5.H5Zfilter_avail(H5Z_filter.H5Z_FILTER_FLETCHER32.getCode());
+            if (available == 0) {
+                System.out.println("N-Bit filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_FLETCHER32);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("N-Bit filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeChecksum() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the N-Bit filter.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_fletcher32(dcpl_id);
+                // Set the chunk size.
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readChecksum() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                int status = H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, dset_data);
+                // Check if the read was successful. Normally we do not perform
+                // error checking in these examples for the sake of clarity, but in
+                // this case we will make an exception because this is how the
+                // fletcher32 checksum filter reports data errors.
+                if (status < 0) {
+                    System.out.print("Dataset read failed!");
+                    try {
+                        if (dcpl_id >= 0)
+                            H5.H5Pclose(dcpl_id);
+                        if (dataset_id >= 0)
+                            H5.H5Dclose(dataset_id);
+                        if (file_id >= 0)
+                            H5.H5Fclose(file_id);
+                    }
+                    catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    return;
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read
+        // correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++) {
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+        }
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if the Fletcher32 filter is available and can be used for
+        // both encoding and decoding. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        // size to be the current size.
+        if (H5Ex_D_Checksum.checkFletcher32Filter()) {
+            H5Ex_D_Checksum.writeChecksum();
+            H5Ex_D_Checksum.readChecksum();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Chunk.java b/java/examples/datasets/H5Ex_D_Chunk.java
new file mode 100644
index 0000000..7f02e5a
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Chunk.java
@@ -0,0 +1,366 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create a chunked dataset.  The
+  program first writes integers in a hyperslab selection to
+  a chunked dataset with dataspace dimensions of DIM_XxDIM_Y
+  and chunk size of CHUNK_XxCHUNK_Y, then closes the file.
+  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.  Finally it reads the data again
+  using a different hyperslab selection, and outputs
+  the result to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Chunk {
+    private static String FILENAME = "H5Ex_D_Chunk.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 6;
+    private static final int DIM_Y = 8;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5D_layout {
+        H5D_LAYOUT_ERROR(-1), H5D_COMPACT(0), H5D_CONTIGUOUS(1), H5D_CHUNKED(2), H5D_NLAYOUTS(3);
+        private static final Map<Integer, H5D_layout> lookup = new HashMap<Integer, H5D_layout>();
+
+        static {
+            for (H5D_layout s : EnumSet.allOf(H5D_layout.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5D_layout(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5D_layout get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void writeChunk() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data to "1", to make it easier to see the selections.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = 1;
+
+        // Print the data to the screen.
+        System.out.println("Original Data:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the chunk size.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the chunked dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Define and select the first part of the hyperslab selection.
+        long[] start = { 0, 0 };
+        long[] stride = { 3, 3 };
+        long[] count = { 2, 3 };
+        long[] block = { 2, 2 };
+        try {
+            if ((filespace_id >= 0))
+                H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Define and select the second part of the hyperslab selection,
+        // which is subtracted from the first selection by the use of
+        // H5S_SELECT_NOTB
+        block[0] = 1;
+        block[1] = 1;
+        try {
+            if ((filespace_id >= 0)) {
+                H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_NOTB, start, stride, count, block);
+
+                // Write the data to the dataset.
+                if (dataset_id >= 0)
+                    H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, filespace_id,
+                            HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readChunk() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Print the storage layout.
+        try {
+            if (dcpl_id >= 0) {
+                int layout_type = H5.H5Pget_layout(dcpl_id);
+                System.out.print("Storage layout for " + DATASETNAME + " is: ");
+                switch (H5D_layout.get(layout_type)) {
+                case H5D_COMPACT:
+                    System.out.println("H5D_COMPACT");
+                    break;
+                case H5D_CONTIGUOUS:
+                    System.out.println("H5D_CONTIGUOUS");
+                    break;
+                case H5D_CHUNKED:
+                    System.out.println("H5D_CHUNKED");
+                    break;
+                case H5D_LAYOUT_ERROR:
+                    break;
+                case H5D_NLAYOUTS:
+                    break;
+                default:
+                    break;
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data as written to disk by hyberslabs:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Initialize the read array.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = 0;
+
+        // Define and select the hyperslab to use for reading.
+        try {
+            if (dataset_id >= 0) {
+                filespace_id = H5.H5Dget_space(dataset_id);
+
+                long[] start = { 0, 1 };
+                long[] stride = { 4, 4 };
+                long[] count = { 2, 2 };
+                long[] block = { 2, 3 };
+
+                if (filespace_id >= 0) {
+                    H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+
+                    // Read the data using the previously defined hyperslab.
+                    if ((dataset_id >= 0) && (filespace_id >= 0))
+                        H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, filespace_id,
+                                HDF5Constants.H5P_DEFAULT, dset_data);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data as read from disk by hyberslab:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_Chunk.writeChunk();
+        H5Ex_D_Chunk.readChunk();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Compact.java b/java/examples/datasets/H5Ex_D_Compact.java
new file mode 100644
index 0000000..4f1e2f0
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Compact.java
@@ -0,0 +1,289 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a compact
+  dataset.  The program first writes integers to a compact
+  dataset with dataspace dimensions of DIM_XxDIM_Y, then
+  closes the file.  Next, it reopens the file, reads back
+  the data, and outputs it to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Compact {
+    private static String FILENAME = "H5Ex_D_Compact.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int RANK = 2;
+
+    // Values for the status of space allocation
+    enum H5D_layout {
+        H5D_LAYOUT_ERROR(-1), H5D_COMPACT(0), H5D_CONTIGUOUS(1), H5D_CHUNKED(2), H5D_NLAYOUTS(3);
+        private static final Map<Integer, H5D_layout> lookup = new HashMap<Integer, H5D_layout>();
+
+        static {
+            for (H5D_layout s : EnumSet.allOf(H5D_layout.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5D_layout(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5D_layout get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void writeCompact() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the layout to compact.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_layout(dcpl_id, H5D_layout.H5D_COMPACT.getCode());
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset. We will use all default properties for this example.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readCompact() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open file and dataset using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Print the storage layout.
+        try {
+            if (dcpl_id >= 0) {
+                int layout_type = H5.H5Pget_layout(dcpl_id);
+                System.out.print("Storage layout for " + DATASETNAME + " is: ");
+                switch (H5D_layout.get(layout_type)) {
+                case H5D_COMPACT:
+                    System.out.println("H5D_COMPACT");
+                    break;
+                case H5D_CONTIGUOUS:
+                    System.out.println("H5D_CONTIGUOUS");
+                    break;
+                case H5D_CHUNKED:
+                    System.out.println("H5D_CHUNKED");
+                    break;
+                case H5D_LAYOUT_ERROR:
+                    break;
+                case H5D_NLAYOUTS:
+                    break;
+                default:
+                    break;
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data for " + DATASETNAME + " is: ");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_Compact.writeCompact();
+        H5Ex_D_Compact.readCompact();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_External.java b/java/examples/datasets/H5Ex_D_External.java
new file mode 100644
index 0000000..5fdc696
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_External.java
@@ -0,0 +1,238 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to an
+  external dataset.  The program first writes integers to an
+  external dataset with dataspace dimensions of DIM_XxDIM_Y,
+  then closes the file.  Next, it reopens the file, reads
+  back the data, and outputs the name of the external data
+  file and the data to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_External {
+    private static String FILENAME = "H5Ex_D_External.h5";
+    private static String EXTERNALNAME = "H5Ex_D_External.data";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int RANK = 2;
+    private static final int NAME_BUF_SIZE = 32;
+
+    private static void writeExternal() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // set the external file.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_external(dcpl_id, EXTERNALNAME, 0, HDF5Constants.H5F_UNLIMITED);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the HDF5Constants.dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void readExternal() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long dataset_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+        String[] Xname = new String[1];
+
+        // Open file using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open dataset using the default properties.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the name of the external file.
+        long[] Xsize = new long[NAME_BUF_SIZE];
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pget_external(dcpl_id, 0, Xsize.length, Xname, Xsize);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println(DATASETNAME + " is stored in file: " + Xname[0]);
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println(DATASETNAME + ":");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Close the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_External.writeExternal();
+        H5Ex_D_External.readExternal();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_FillValue.java b/java/examples/datasets/H5Ex_D_FillValue.java
new file mode 100644
index 0000000..982d2cb
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_FillValue.java
@@ -0,0 +1,246 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to set the fill value for a
+  dataset.  The program first sets the fill value to
+  FILLVAL, creates a dataset with dimensions of DIM_XxDIM_Y,
+  reads from the uninitialized dataset, and outputs the
+  contents to the screen.  Next, it writes integers to the
+  dataset, reads the data back, and outputs it to the
+  screen.  Finally it extends the dataset, reads from it,
+  and outputs the result to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_FillValue {
+    private static String FILENAME = "H5Ex_D_FillValue.h5";
+    private static String DATASETNAME = "ExtendibleArray";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int EDIM_X = 6;
+    private static final int EDIM_Y = 10;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+    private static final int FILLVAL = 99;
+
+    private static void fillValue() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] extdims = { EDIM_X, EDIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        long[] maxdims = { HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED };
+        int[][] write_dset_data = new int[DIM_X][DIM_Y];
+        int[][] read_dset_data = new int[DIM_X][DIM_Y];
+        int[][] extend_dset_data = new int[EDIM_X][EDIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                write_dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace with unlimited dimensions.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, maxdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the chunk size.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the fill value for the dataset
+        try {
+            int[] fill_value = { FILLVAL };
+            if (dcpl_id >= 0)
+                H5.H5Pset_fill_value(dcpl_id, HDF5Constants.H5T_NATIVE_INT, fill_value);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the allocation time to "early". This way we can be sure
+        // that reading from the dataset immediately after creation will
+        // return the fill value.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_alloc_time(dcpl_id, HDF5Constants.H5D_ALLOC_TIME_EARLY);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset using the dataset creation property list.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read values from the dataset, which has not been written to yet.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, read_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset before being written to:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(read_dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, write_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data back.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, read_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset after being written to:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(read_dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Extend the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dset_extent(dataset_id, extdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read from the extended dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, extend_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset after extension:");
+        for (int indx = 0; indx < EDIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < EDIM_Y; jndx++)
+                System.out.print(extend_dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_FillValue.fillValue();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Gzip.java b/java/examples/datasets/H5Ex_D_Gzip.java
new file mode 100644
index 0000000..b813367
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Gzip.java
@@ -0,0 +1,336 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+  using gzip compression (also called zlib or deflate).  The
+  program first checks if gzip compression is available,
+  then if it is it writes integers to a dataset using gzip,
+  then closes the file.  Next, it reopens the file, reads
+  back the data, and outputs the type of compression and the
+  maximum value in the dataset to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Gzip {
+    private static String FILENAME = "H5Ex_D_Gzip.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkGzipFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (available == 0) {
+                System.out.println("gzip filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("gzip filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeGzip() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the gzip compression
+        // filter.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_deflate(dcpl_id, 9);
+                // Set the chunk size.
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readGzip() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                case H5Z_FILTER_NBIT:
+                    System.out.println("H5Z_FILTER_NBIT");
+                    break;
+                case H5Z_FILTER_SCALEOFFSET:
+                    System.out.println("H5Z_FILTER_SCALEOFFSET");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read
+        // correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++) {
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+        }
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if gzip compression is available and can be used for both
+        // compression and decompression. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        if (H5Ex_D_Gzip.checkGzipFilter()) {
+            H5Ex_D_Gzip.writeGzip();
+            H5Ex_D_Gzip.readGzip();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Hyperslab.java b/java/examples/datasets/H5Ex_D_Hyperslab.java
new file mode 100644
index 0000000..482e2c0
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Hyperslab.java
@@ -0,0 +1,269 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a
+  dataset by hyberslabs.  The program first writes integers
+  in a hyperslab selection to a dataset with dataspace
+  dimensions of DIM_XxDIM_Y, then closes the file.  Next, it
+  reopens the file, reads back the data, and outputs it to
+  the screen.  Finally it reads the data again using a
+  different hyperslab selection, and outputs the result to
+  the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Hyperslab {
+    private static String FILENAME = "H5Ex_D_Hyperslab.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 6;
+    private static final int DIM_Y = 8;
+    private static final int RANK = 2;
+
+    private static void writeHyperslab() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data to "1", to make it easier to see the selections.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = 1;
+
+        // Print the data to the screen.
+        System.out.println("Original Data:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset. We will use all default properties for this example.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Define and select the first part of the hyperslab selection.
+        long[] start = { 0, 0 };
+        long[] stride = { 3, 3 };
+        long[] count = { 2, 3 };
+        long[] block = { 2, 2 };
+        try {
+            if ((filespace_id >= 0))
+                H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Define and select the second part of the hyperslab selection,
+        // which is subtracted from the first selection by the use of
+        // H5S_SELECT_NOTB
+        block[0] = 1;
+        block[1] = 1;
+        try {
+            if ((filespace_id >= 0)) {
+                H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_NOTB, start, stride, count, block);
+
+                // Write the data to the dataset.
+                if (dataset_id >= 0)
+                    H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, filespace_id,
+                            HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readHyperslab() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data as written to disk by hyberslabs:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Initialize the read array.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = 0;
+
+        // Define and select the hyperslab to use for reading.
+        try {
+            if (dataset_id >= 0) {
+                filespace_id = H5.H5Dget_space(dataset_id);
+
+                long[] start = { 0, 1 };
+                long[] stride = { 4, 4 };
+                long[] count = { 2, 2 };
+                long[] block = { 2, 3 };
+
+                if (filespace_id >= 0) {
+                    H5.H5Sselect_hyperslab(filespace_id, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+
+                    // Read the data using the previously defined hyperslab.
+                    if ((dataset_id >= 0) && (filespace_id >= 0))
+                        H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, filespace_id,
+                                HDF5Constants.H5P_DEFAULT, dset_data);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data as read from disk by hyberslab:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_Hyperslab.writeHyperslab();
+        H5Ex_D_Hyperslab.readHyperslab();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Nbit.java b/java/examples/datasets/H5Ex_D_Nbit.java
new file mode 100644
index 0000000..f74b675
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Nbit.java
@@ -0,0 +1,305 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+ using the N-Bit filter.  The program first checks if the
+ N-Bit filter is available, then if it is it writes integers
+ to a dataset using N-Bit, then closes the file. Next, it
+ reopens the file, reads back the data, and outputs the type
+ of filter and the maximum value in the dataset to the screen.
+ ************************************************************/
+
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Nbit {
+    private static String FILENAME = "H5Ex_D_Nbit.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkNbitFilter() {
+        try {
+            // Check if N-Bit compression is available and can be used for both compression and decompression.
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_NBIT);
+            if (available == 0) {
+                System.out.println("N-Bit filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_NBIT);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("N-Bit filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeData() throws Exception {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dtype_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        try {
+            // Create a new file using the default properties.
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+
+            // Create dataspace. Setting maximum size to NULL sets the maximum
+            // size to be the current size.
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+
+            // Create the datatype to use with the N-Bit filter. It has an uncompressed size of 32 bits,
+            // but will have a size of 16 bits after being packed by the N-Bit filter.
+            dtype_id = H5.H5Tcopy(HDF5Constants.H5T_STD_I32LE);
+            H5.H5Tset_precision(dtype_id, 16);
+            H5.H5Tset_offset(dtype_id, 5);
+
+            // Create the dataset creation property list, add the N-Bit filter and set the chunk size.
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            H5.H5Pset_nbit(dcpl_id);
+            H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+
+            // Create the dataset.
+            dataset_id = H5.H5Dcreate(file_id, DATASETNAME, dtype_id, filespace_id, HDF5Constants.H5P_DEFAULT, dcpl_id,
+                    HDF5Constants.H5P_DEFAULT);
+
+            // Write the data to the dataset.
+            H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        finally {
+            // Close and release resources.
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+            if (dtype_id >= 0)
+                H5.H5Tclose(dtype_id);
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+    }
+
+    private static void readData() throws Exception {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                case H5Z_FILTER_NBIT:
+                    System.out.println("H5Z_FILTER_NBIT");
+                    break;
+                case H5Z_FILTER_SCALEOFFSET:
+                    System.out.println("H5Z_FILTER_SCALEOFFSET");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                int status = H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, dset_data);
+                // Check if the read was successful.
+                if (status < 0)
+                    System.out.print("Dataset read failed!");
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read
+        // correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++) {
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+        }
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        /*
+         * Check if N-Bit compression is available and can be used for both compression and decompression. Normally we
+         * do not perform error checking in these examples for the sake of clarity, but in this case we will make an
+         * exception because this filter is an optional part of the hdf5 library.
+         */
+        try {
+            if (H5Ex_D_Nbit.checkNbitFilter()) {
+                H5Ex_D_Nbit.writeData();
+                H5Ex_D_Nbit.readData();
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}
diff --git a/java/examples/datasets/H5Ex_D_ReadWrite.java b/java/examples/datasets/H5Ex_D_ReadWrite.java
new file mode 100644
index 0000000..de94ccb
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_ReadWrite.java
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a
+  dataset.  The program first writes integers to a dataset
+  with dataspace dimensions of DIM_XxDIM_Y, then closes the
+  file.  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_ReadWrite {
+    private static String FILENAME = "H5Ex_D_ReadWrite.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int RANK = 2;
+
+    private static void WriteDataset() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset. We will use all default properties for this example.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataset_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open file using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open dataset using the default properties.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println(DATASETNAME + ":");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // Close the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_ReadWrite.WriteDataset();
+        H5Ex_D_ReadWrite.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Shuffle.java b/java/examples/datasets/H5Ex_D_Shuffle.java
new file mode 100644
index 0000000..ac3c1b4
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Shuffle.java
@@ -0,0 +1,373 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+  using the shuffle filter with gzip compression.  The
+  program first checks if the shuffle and gzip filters are
+  available, then if they are it writes integers to a
+  dataset using shuffle+gzip, then closes the file.  Next,
+  it reopens the file, reads back the data, and outputs the
+  types of filters and the maximum value in the dataset to
+  the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Shuffle {
+    private static String FILENAME = "H5Ex_D_Shuffle.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkGzipFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (available == 0) {
+                System.out.println("gzip filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("gzip filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static boolean checkShuffleFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SHUFFLE);
+            if (available == 0) {
+                System.out.println("Shuffle filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SHUFFLE);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("Shuffle filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeShuffle() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the shuffle
+        // filter and the gzip compression filter.
+        // The order in which the filters are added here is significant -
+        // we will see much greater results when the shuffle is applied
+        // first. The order in which the filters are added to the property
+        // list is the order in which they will be invoked when writing
+        // data.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_shuffle(dcpl_id);
+                H5.H5Pset_deflate(dcpl_id, 9);
+                // Set the chunk size.
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readShuffle() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the number of filters, and retrieve and print the
+        // type of each.
+        try {
+            if (dcpl_id >= 0) {
+                int nfilters = H5.H5Pget_nfilters(dcpl_id);
+                for (int indx = 0; indx < nfilters; indx++) {
+                    // Java lib requires a valid filter_name object and cd_values
+                    int[] flags = { 0 };
+                    long[] cd_nelmts = { 1 };
+                    int[] cd_values = { 0 };
+                    String[] filter_name = { "" };
+                    int[] filter_config = { 0 };
+                    int filter_type = -1;
+                    filter_type = H5.H5Pget_filter(dcpl_id, indx, flags, cd_nelmts, cd_values, 120, filter_name,
+                            filter_config);
+                    System.out.print("Filter " + indx + ": Type is: ");
+                    switch (H5Z_filter.get(filter_type)) {
+                    case H5Z_FILTER_DEFLATE:
+                        System.out.println("H5Z_FILTER_DEFLATE");
+                        break;
+                    case H5Z_FILTER_SHUFFLE:
+                        System.out.println("H5Z_FILTER_SHUFFLE");
+                        break;
+                    case H5Z_FILTER_FLETCHER32:
+                        System.out.println("H5Z_FILTER_FLETCHER32");
+                        break;
+                    case H5Z_FILTER_SZIP:
+                        System.out.println("H5Z_FILTER_SZIP");
+                        break;
+                    case H5Z_FILTER_NBIT:
+                        System.out.println("H5Z_FILTER_NBIT");
+                        break;
+                    case H5Z_FILTER_SCALEOFFSET:
+                        System.out.println("H5Z_FILTER_SCALEOFFSET");
+                        break;
+                    default:
+                        System.out.println("H5Z_FILTER_ERROR");
+                    }
+                    System.out.println();
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read
+        // correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++) {
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+        }
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if gzip compression is available and can be used for both
+        // compression and decompression. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        // Similarly, check for availability of the shuffle filter.
+        if (H5Ex_D_Shuffle.checkGzipFilter() && H5Ex_D_Shuffle.checkShuffleFilter()) {
+            H5Ex_D_Shuffle.writeShuffle();
+            H5Ex_D_Shuffle.readShuffle();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Sofloat.java b/java/examples/datasets/H5Ex_D_Sofloat.java
new file mode 100644
index 0000000..26c8d49
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Sofloat.java
@@ -0,0 +1,356 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+  using the Scale-Offset filter.  The program first checks
+  if the Scale-Offset filter is available, then if it is it
+  writes floating point numbers to a dataset using
+  Scale-Offset, then closes the file Next, it reopens the
+  file, reads back the data, and outputs the type of filter
+  and the maximum value in the dataset to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Sofloat {
+
+    private static String FILENAME = "H5Ex_D_Sofloat.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkScaleoffsetFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            if (available == 0) {
+                System.out.println("Scale-Offset filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("Scale-Offset filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeData() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        double[][] dset_data = new double[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                double x = indx;
+                double y = jndx;
+                dset_data[indx][jndx] = (x + 1) / (y + 0.3) + y;
+            }
+
+        // Find the maximum value in the dataset, to verify that it was read correctly.
+        double max = dset_data[0][0];
+        double min = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+                if (min > dset_data[indx][jndx])
+                    min = dset_data[indx][jndx];
+            }
+
+        // Print the maximum value.
+        System.out.println("Maximum value in write buffer is: " + max);
+        System.out.println("Minimum value in write buffer is: " + min);
+
+        // Create a new file using the default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the Scale-Offset
+        // filter and set the chunk size.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_scaleoffset(dcpl_id, HDF5Constants.H5Z_SO_FLOAT_DSCALE, 2);
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_IEEE_F64LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close and release resources.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close file
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readData() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        double[][] dset_data = new double[DIM_X][DIM_Y];
+
+        // Open file using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Open dataset using the default properties.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                case H5Z_FILTER_NBIT:
+                    System.out.println("H5Z_FILTER_NBIT");
+                    break;
+                case H5Z_FILTER_SCALEOFFSET:
+                    System.out.println("H5Z_FILTER_SCALEOFFSET");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read correctly.
+        double max = dset_data[0][0];
+        double min = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+                if (min > dset_data[indx][jndx])
+                    min = dset_data[indx][jndx];
+            }
+
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+        System.out.println("Minimum value in " + DATASETNAME + " is: " + min);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+
+        // Check if Scale-Offset compression is available and can be used
+        // for both compression and decompression. Normally we do not
+        // perform error checking in these examples for the sake of
+        // clarity, but in this case we will make an exception because this
+        // filter is an optional part of the hdf5 library.
+        if (H5Ex_D_Sofloat.checkScaleoffsetFilter()) {
+            H5Ex_D_Sofloat.writeData();
+            H5Ex_D_Sofloat.readData();
+        }
+    }
+}
diff --git a/java/examples/datasets/H5Ex_D_Soint.java b/java/examples/datasets/H5Ex_D_Soint.java
new file mode 100644
index 0000000..7939883
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Soint.java
@@ -0,0 +1,335 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+      using the Scale-Offset filter.  The program first checks
+      if the Scale-Offset filter is available, then if it is it
+      writes integers to a dataset using Scale-Offset, then
+      closes the file Next, it reopens the file, reads back the
+      data, and outputs the type of filter and the maximum value
+      in the dataset to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Soint {
+
+    private static String FILENAME = "H5Ex_D_Soint.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkScaleoffsetFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            if (available == 0) {
+                System.out.println("Scale-Offset filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("Scale-Offset filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeData() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using the default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the Scale-Offset
+        // filter and set the chunk size.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_scaleoffset(dcpl_id, HDF5Constants.H5Z_SO_INT, HDF5Constants.H5Z_SO_INT_MINBITS_DEFAULT);
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close and release resources.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close file
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readData() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open file using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Open dataset using the default properties.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                case H5Z_FILTER_NBIT:
+                    System.out.println("H5Z_FILTER_NBIT");
+                    break;
+                case H5Z_FILTER_SCALEOFFSET:
+                    System.out.println("H5Z_FILTER_SCALEOFFSET");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+            }
+
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+
+        // Check if Scale-Offset compression is available and can be used
+        // for both compression and decompression. Normally we do not
+        // perform error checking in these examples for the sake of
+        // clarity, but in this case we will make an exception because this
+        // filter is an optional part of the hdf5 library.
+        if (H5Ex_D_Soint.checkScaleoffsetFilter()) {
+            H5Ex_D_Soint.writeData();
+            H5Ex_D_Soint.readData();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Szip.java b/java/examples/datasets/H5Ex_D_Szip.java
new file mode 100644
index 0000000..5258234
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Szip.java
@@ -0,0 +1,337 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+  using szip compression.    The program first checks if
+  szip compression is available, then if it is it writes
+  integers to a dataset using szip, then closes the file.
+  Next, it reopens the file, reads back the data, and
+  outputs the type of compression and the maximum value in
+  the dataset to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Szip {
+    private static String FILENAME = "H5Ex_D_Szip.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 32;
+    private static final int DIM_Y = 64;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 8;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkSzipFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SZIP);
+            if (available == 0) {
+                System.out.println("szip filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SZIP);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("szip filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeSzip() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the szip compression
+        // filter.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_szip(dcpl_id, HDF5Constants.H5_SZIP_NN_OPTION_MASK, 8);
+                // Set the chunk size.
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readSzip() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                case H5Z_FILTER_NBIT:
+                    System.out.println("H5Z_FILTER_NBIT");
+                    break;
+                case H5Z_FILTER_SCALEOFFSET:
+                    System.out.println("H5Z_FILTER_SCALEOFFSET");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Find the maximum value in the dataset, to verify that it was read
+        // correctly.
+        int max = dset_data[0][0];
+        for (int indx = 0; indx < DIM_X; indx++) {
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                if (max < dset_data[indx][jndx])
+                    max = dset_data[indx][jndx];
+        }
+        // Print the maximum value.
+        System.out.println("Maximum value in " + DATASETNAME + " is: " + max);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if gzip compression is available and can be used for both
+        // compression and decompression. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        if (H5Ex_D_Szip.checkSzipFilter()) {
+            H5Ex_D_Szip.writeSzip();
+            H5Ex_D_Szip.readSzip();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_Transform.java b/java/examples/datasets/H5Ex_D_Transform.java
new file mode 100644
index 0000000..1f289f3
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_Transform.java
@@ -0,0 +1,250 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write data to a dataset
+      using a data transform expression.  The program first
+      writes integers to a dataset using the transform
+      expression TRANSFORM, then closes the file.  Next, it
+      reopens the file, reads back the data without a transform,
+      and outputs the data to the screen.  Finally it reads the
+      data using the transform expression RTRANSFORM and outputs
+      the results to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_Transform {
+
+    private static String FILE = "H5Ex_D_Transform.h5";
+    private static String DATASET = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static String TRANSFORM = "x+1";
+    private static String RTRANSFORM = "x-1";
+
+    private static void writeData() {
+        long file_id = -1;
+        long filespace_id = -1;
+        long dataset_id = -1;
+        long dxpl_id = -1;
+
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize data.
+        for (int i = 0; i < DIM_X; i++)
+            for (int j = 0; j < DIM_Y; j++)
+                dset_data[i][j] = i * j - j;
+
+        // Output the data to the screen.
+        System.out.println("Original Data:");
+        for (int i = 0; i < DIM_X; i++) {
+            System.out.print(" [");
+            for (int j = 0; j < DIM_Y; j++)
+                System.out.print(" " + dset_data[i][j] + " ");
+            System.out.println("]");
+        }
+
+        // Create a new file using the default properties.
+        try {
+            file_id = H5.H5Fcreate(FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(2, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset transfer property list and define the transform expression.
+        try {
+            dxpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+            if (dxpl_id >= 0)
+                H5.H5Pset_data_transform(dxpl_id, TRANSFORM);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset using the default properties. Unfortunately we must save as
+        // a native type or the transform operation will fail.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASET, HDF5Constants.H5T_NATIVE_INT, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset using the dataset transfer property list.
+        try {
+            if ((dataset_id >= 0) && (dxpl_id >= 0))
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        dxpl_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dxpl_id >= 0)
+                H5.H5Pclose(dxpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readData() {
+
+        long file_id = -1;
+        long dataset_id = -1;
+        long dxpl_id = -1;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Open an existing file using the default properties.
+        try {
+            file_id = H5.H5Fopen(FILE, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset using the default properties.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASET, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Data as written with transform '" + TRANSFORM + "'");
+        for (int i = 0; i < DIM_X; i++) {
+            System.out.print(" [");
+            for (int j = 0; j < DIM_Y; j++)
+                System.out.print(" " + dset_data[i][j] + " ");
+            System.out.println("]");
+        }
+
+        // Create the dataset transfer property list and define the transform expression.
+        try {
+            dxpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+            if (dxpl_id >= 0)
+                H5.H5Pset_data_transform(dxpl_id, RTRANSFORM);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read the data using the dataset transfer property list.
+        try {
+            if ((dataset_id >= 0) && (dxpl_id >= 0))
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        dxpl_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+
+        System.out.println("Data as written with transform  '" + TRANSFORM + "' and read with transform  '"
+                + RTRANSFORM + "'");
+        for (int i = 0; i < DIM_X; i++) {
+            System.out.print(" [");
+            for (int j = 0; j < DIM_Y; j++)
+                System.out.print(" " + dset_data[i][j] + " ");
+            System.out.println("]");
+        }
+
+        // Close and release resources.
+        try {
+            if (dxpl_id >= 0)
+                H5.H5Pclose(dxpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_Transform.writeData();
+        H5Ex_D_Transform.readData();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_UnlimitedAdd.java b/java/examples/datasets/H5Ex_D_UnlimitedAdd.java
new file mode 100644
index 0000000..ada8df0
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_UnlimitedAdd.java
@@ -0,0 +1,393 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create and extend an unlimited
+  dataset.  The program first writes integers to a dataset
+  with dataspace dimensions of DIM_XxDIM_Y, then closes the
+  file.  Next, it reopens the file, reads back the data,
+  outputs it to the screen, extends the dataset, and writes
+  new data to the extended portions of the dataset.  Finally
+  it reopens the file again, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_UnlimitedAdd {
+    private static String FILENAME = "H5Ex_D_UnlimitedAdd.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int EDIM_X = 6;
+    private static final int EDIM_Y = 10;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    private static void writeUnlimited() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        long[] maxdims = { HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace with unlimited dimensions.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, maxdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the chunk size.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the unlimited dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void extendUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] extdims = { EDIM_X, EDIM_Y };
+        long[] start = { 0, 0 };
+        long[] count = new long[2];
+        int[][] dset_data;
+        int[][] extend_dset_data = new int[EDIM_X][EDIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer. This is a
+        // two dimensional dataset so the dynamic allocation must be done
+        // in steps.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset before extension:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Extend the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dset_extent(dataset_id, extdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataspace for the newly extended dataset.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Initialize data for writing to the extended dataset.
+        for (int indx = 0; indx < EDIM_X; indx++)
+            for (int jndx = 0; jndx < EDIM_Y; jndx++)
+                extend_dset_data[indx][jndx] = jndx;
+
+        // Select the entire dataspace.
+        try {
+            if (dataspace_id >= 0) {
+                H5.H5Sselect_all(dataspace_id);
+
+                // Subtract a hyperslab reflecting the original dimensions from the
+                // selection. The selection now contains only the newly extended
+                // portions of the dataset.
+                count[0] = dims[0];
+                count[1] = dims[1];
+                H5.H5Sselect_hyperslab(dataspace_id, HDF5Constants.H5S_SELECT_NOTB, start, null, count, null);
+
+                // Write the data to the selected portion of the dataset.
+                if (dataset_id >= 0)
+                    H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, dataspace_id,
+                            HDF5Constants.H5P_DEFAULT, extend_dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for the read buffer as before.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset after extension:");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < dims[1]; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_UnlimitedAdd.writeUnlimited();
+        H5Ex_D_UnlimitedAdd.extendUnlimited();
+        H5Ex_D_UnlimitedAdd.readUnlimited();
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_UnlimitedGzip.java b/java/examples/datasets/H5Ex_D_UnlimitedGzip.java
new file mode 100644
index 0000000..c08ceef
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_UnlimitedGzip.java
@@ -0,0 +1,504 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create and extend an unlimited
+  dataset with gzip compression.  The program first writes
+  integers to a gzip compressed dataset with dataspace
+  dimensions of DIM_XxDIM_Y, then closes the file.  Next, it
+  reopens the file, reads back the data, outputs it to the
+  screen, extends the dataset, and writes new data to the
+  extended portions of the dataset.  Finally it reopens the
+  file again, reads back the data, and outputs it to the
+  screen.
+ ************************************************************/
+package examples.datasets;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_UnlimitedGzip {
+    private static String FILENAME = "H5Ex_D_UnlimitedGzip.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int EDIM_X = 6;
+    private static final int EDIM_Y = 10;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    // Values for the status of space allocation
+    enum H5Z_filter {
+        H5Z_FILTER_ERROR(HDF5Constants.H5Z_FILTER_ERROR), H5Z_FILTER_NONE(HDF5Constants.H5Z_FILTER_NONE), H5Z_FILTER_DEFLATE(
+                HDF5Constants.H5Z_FILTER_DEFLATE), H5Z_FILTER_SHUFFLE(HDF5Constants.H5Z_FILTER_SHUFFLE), H5Z_FILTER_FLETCHER32(
+                HDF5Constants.H5Z_FILTER_FLETCHER32), H5Z_FILTER_SZIP(HDF5Constants.H5Z_FILTER_SZIP), H5Z_FILTER_NBIT(
+                HDF5Constants.H5Z_FILTER_NBIT), H5Z_FILTER_SCALEOFFSET(HDF5Constants.H5Z_FILTER_SCALEOFFSET), H5Z_FILTER_RESERVED(
+                HDF5Constants.H5Z_FILTER_RESERVED), H5Z_FILTER_MAX(HDF5Constants.H5Z_FILTER_MAX);
+        private static final Map<Integer, H5Z_filter> lookup = new HashMap<Integer, H5Z_filter>();
+
+        static {
+            for (H5Z_filter s : EnumSet.allOf(H5Z_filter.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5Z_filter(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5Z_filter get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static boolean checkGzipFilter() {
+        try {
+            int available = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (available == 0) {
+                System.out.println("gzip filter not available.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            int filter_info = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_DEFLATE);
+            if (((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0)
+                    || ((filter_info & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0)) {
+                System.out.println("gzip filter not available for encoding and decoding.");
+                return false;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    private static void writeUnlimited() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        long[] maxdims = { HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace with unlimited dimensions.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, maxdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list, add the gzip compression
+        // filter.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            if (dcpl_id >= 0) {
+                H5.H5Pset_deflate(dcpl_id, 9);
+                // Set the chunk size.
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the unlimited dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void extendUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] extdims = { EDIM_X, EDIM_Y };
+        long[] start = { 0, 0 };
+        long[] count = new long[2];
+        int[][] dset_data;
+        int[][] extend_dset_data = new int[EDIM_X][EDIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer. This is a
+        // two dimensional dataset so the dynamic allocation must be done
+        // in steps.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset before extension:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Extend the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dset_extent(dataset_id, extdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataspace for the newly extended dataset.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Initialize data for writing to the extended dataset.
+        for (int indx = 0; indx < EDIM_X; indx++)
+            for (int jndx = 0; jndx < EDIM_Y; jndx++)
+                extend_dset_data[indx][jndx] = jndx;
+
+        // Select the entire dataspace.
+        try {
+            if (dataspace_id >= 0) {
+                H5.H5Sselect_all(dataspace_id);
+
+                // Subtract a hyperslab reflecting the original dimensions from the
+                // selection. The selection now contains only the newly extended
+                // portions of the dataset.
+                count[0] = dims[0];
+                count[1] = dims[1];
+                H5.H5Sselect_hyperslab(dataspace_id, HDF5Constants.H5S_SELECT_NOTB, start, null, count, null);
+
+                // Write the data to the selected portion of the dataset.
+                if (dataset_id >= 0)
+                    H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, dataspace_id,
+                            HDF5Constants.H5P_DEFAULT, extend_dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long dcpl_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataset creation property list.
+        try {
+            if (dataset_id >= 0)
+                dcpl_id = H5.H5Dget_create_plist(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print the filter type. Here we only retrieve the
+        // first filter because we know that we only added one filter.
+        try {
+            if (dcpl_id >= 0) {
+                // Java lib requires a valid filter_name object and cd_values
+                int[] flags = { 0 };
+                long[] cd_nelmts = { 1 };
+                int[] cd_values = { 0 };
+                String[] filter_name = { "" };
+                int[] filter_config = { 0 };
+                int filter_type = -1;
+                filter_type = H5
+                        .H5Pget_filter(dcpl_id, 0, flags, cd_nelmts, cd_values, 120, filter_name, filter_config);
+                System.out.print("Filter type is: ");
+                switch (H5Z_filter.get(filter_type)) {
+                case H5Z_FILTER_DEFLATE:
+                    System.out.println("H5Z_FILTER_DEFLATE");
+                    break;
+                case H5Z_FILTER_SHUFFLE:
+                    System.out.println("H5Z_FILTER_SHUFFLE");
+                    break;
+                case H5Z_FILTER_FLETCHER32:
+                    System.out.println("H5Z_FILTER_FLETCHER32");
+                    break;
+                case H5Z_FILTER_SZIP:
+                    System.out.println("H5Z_FILTER_SZIP");
+                    break;
+                default:
+                    System.out.println("H5Z_FILTER_ERROR");
+                }
+                System.out.println();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for the read buffer as before.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset after extension:");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < dims[1]; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if gzip compression is available and can be used for both
+        // compression and decompression. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        if (H5Ex_D_UnlimitedGzip.checkGzipFilter()) {
+            H5Ex_D_UnlimitedGzip.writeUnlimited();
+            H5Ex_D_UnlimitedGzip.extendUnlimited();
+            H5Ex_D_UnlimitedGzip.readUnlimited();
+        }
+    }
+
+}
diff --git a/java/examples/datasets/H5Ex_D_UnlimitedMod.java b/java/examples/datasets/H5Ex_D_UnlimitedMod.java
new file mode 100644
index 0000000..884cad3
--- /dev/null
+++ b/java/examples/datasets/H5Ex_D_UnlimitedMod.java
@@ -0,0 +1,379 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create and extend an unlimited
+  dataset.  The program first writes integers to a dataset
+  with dataspace dimensions of DIM_XxDIM_Y, then closes the
+  file.  Next, it reopens the file, reads back the data,
+  outputs it to the screen, extends the dataset, and writes
+  new data to the entire extended dataset.  Finally it
+  reopens the file again, reads back the data, and utputs it
+  to the screen.
+ ************************************************************/
+package examples.datasets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_D_UnlimitedMod {
+    private static String FILENAME = "H5Ex_D_UnlimitedMod.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int EDIM_X = 6;
+    private static final int EDIM_Y = 10;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int RANK = 2;
+    private static final int NDIMS = 2;
+
+    private static void writeUnlimited() {
+        long file_id = -1;
+        long dcpl_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] chunk_dims = { CHUNK_X, CHUNK_Y };
+        long[] maxdims = { HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * jndx - jndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace with unlimited dimensions.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, maxdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset creation property list.
+        try {
+            dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the chunk size.
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pset_chunk(dcpl_id, NDIMS, chunk_dims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the unlimited dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (dcpl_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dcpl_id >= 0)
+                H5.H5Pclose(dcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void extendUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        long[] extdims = { EDIM_X, EDIM_Y };
+        int[][] dset_data;
+        int[][] extend_dset_data = new int[EDIM_X][EDIM_Y];
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer. This is a
+        // two dimensional dataset so the dynamic allocation must be done
+        // in steps.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset before extension:");
+        for (int indx = 0; indx < DIM_X; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Extend the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dset_extent(dataset_id, extdims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve the dataspace for the newly extended dataset.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Initialize data for writing to the extended dataset.
+        for (int indx = 0; indx < EDIM_X; indx++)
+            for (int jndx = 0; jndx < EDIM_Y; jndx++)
+                extend_dset_data[indx][jndx] = jndx;
+
+        // Write the data tto the extended dataset.
+        try {
+            if ((dataspace_id >= 0) && (dataset_id >= 0))
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, extend_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readUnlimited() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for the read buffer as before.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Allocate array of pointers to rows.
+        dset_data = new int[(int) dims[0]][(int) dims[1]];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Dataset after extension:");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [ ");
+            for (int jndx = 0; jndx < dims[1]; jndx++)
+                System.out.print(dset_data[indx][jndx] + " ");
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_D_UnlimitedMod.writeUnlimited();
+        H5Ex_D_UnlimitedMod.extendUnlimited();
+        H5Ex_D_UnlimitedMod.readUnlimited();
+    }
+
+}
diff --git a/java/examples/datasets/Makefile.am b/java/examples/datasets/Makefile.am
new file mode 100644
index 0000000..49888a0
--- /dev/null
+++ b/java/examples/datasets/Makefile.am
@@ -0,0 +1,78 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+pkgpath = examples/datasets
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+
+jarfile = jar$(PACKAGE_TARNAME)datasets.jar
+
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+TESTPACKAGE = 
+
+noinst_JAVA = \
+	H5Ex_D_Alloc.java \
+    H5Ex_D_Checksum.java \
+    H5Ex_D_Chunk.java \
+    H5Ex_D_Compact.java \
+    H5Ex_D_External.java \
+    H5Ex_D_FillValue.java \
+    H5Ex_D_Gzip.java \
+    H5Ex_D_Hyperslab.java \
+    H5Ex_D_ReadWrite.java \
+    H5Ex_D_Shuffle.java \
+    H5Ex_D_Szip.java \
+    H5Ex_D_UnlimitedAdd.java \
+    H5Ex_D_UnlimitedGzip.java \
+    H5Ex_D_UnlimitedMod.java \
+    H5Ex_D_Nbit.java \
+    H5Ex_D_Transform.java \
+    H5Ex_D_Sofloat.java \
+    H5Ex_D_Soint.java
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+noinst_DATA = $(jarfile)
+
+.PHONY: classes
+
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/examples/datasets/Makefile.in b/java/examples/datasets/Makefile.in
new file mode 100644
index 0000000..f33198b
--- /dev/null
+++ b/java/examples/datasets/Makefile.in
@@ -0,0 +1,1309 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(TEST_SCRIPT)
+subdir = java/examples/datasets
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES = runExample.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__java_sources = $(noinst_JAVA)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/runExample.sh.in \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+JAVAROOT = .classes
+pkgpath = examples/datasets
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+jarfile = jar$(PACKAGE_TARNAME)datasets.jar
+TESTPACKAGE = 
+noinst_JAVA = \
+	H5Ex_D_Alloc.java \
+    H5Ex_D_Checksum.java \
+    H5Ex_D_Chunk.java \
+    H5Ex_D_Compact.java \
+    H5Ex_D_External.java \
+    H5Ex_D_FillValue.java \
+    H5Ex_D_Gzip.java \
+    H5Ex_D_Hyperslab.java \
+    H5Ex_D_ReadWrite.java \
+    H5Ex_D_Shuffle.java \
+    H5Ex_D_Szip.java \
+    H5Ex_D_UnlimitedAdd.java \
+    H5Ex_D_UnlimitedGzip.java \
+    H5Ex_D_UnlimitedMod.java \
+    H5Ex_D_Nbit.java \
+    H5Ex_D_Transform.java \
+    H5Ex_D_Sofloat.java \
+    H5Ex_D_Soint.java
+
+noinst_DATA = $(jarfile)
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/examples/datasets/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/examples/datasets/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+runExample.sh: $(top_builddir)/config.status $(srcdir)/runExample.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classnoinst.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+
+clean-noinstJAVA:
+	-rm -f *.class classnoinst.stamp
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all $(check_SCRIPTS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile classnoinst.stamp $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-noinstJAVA mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+	clean-generic clean-libtool clean-noinstJAVA cscopelist-am \
+	ctags-am distclean distclean-generic distclean-libtool distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: classes
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/datasets/runExample.sh.in b/java/examples/datasets/runExample.sh.in
new file mode 100644
index 0000000..8ac28a7
--- /dev/null
+++ b/java/examples/datasets/runExample.sh.in
@@ -0,0 +1,413 @@
+#! /bin/sh
+#
+# 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.
+#
+
+top_builddir=@top_builddir@
+top_srcdir=@top_srcdir@
+srcdir=@srcdir@
+
+USE_FILTER_SZIP="@USE_FILTER_SZIP@"
+USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@"
+
+TESTNAME=EX_Datasets
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Set up default variable values if not supplied by the user.
+RM='rm -rf'
+CMP='cmp'
+DIFF='diff -c'
+CP='cp'
+DIRNAME='dirname'
+LS='ls'
+AWK='awk'
+
+nerrors=0
+
+# where the libs exist
+HDFLIB_HOME="$top_srcdir/java/lib"
+BLDLIBDIR="./lib"
+BLDDIR="."
+HDFTEST_HOME="$top_srcdir/java/examples/datasets"
+JARFILE=jar at PACKAGE_TARNAME@- at PACKAGE_VERSION@.jar
+TESTJARFILE=jar at PACKAGE_TARNAME@datasets.jar
+test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR
+
+######################################################################
+# library files
+# --------------------------------------------------------------------
+# All the library files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_LIBRARY_FILES="
+$HDFLIB_HOME/slf4j-api-1.7.5.jar
+$HDFLIB_HOME/ext/slf4j-simple-1.7.5.jar
+$top_builddir/src/.libs/libhdf5.*
+$top_builddir/java/src/jni/.libs/libhdf5_java.*
+$top_builddir/java/src/$JARFILE
+"
+LIST_DATA_FILES="
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Alloc.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Checksum.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Chunk.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Compact.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_External.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_FillValue.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Gzip.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Hyperslab.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_ReadWrite.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Shuffle.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Szip.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_UnlimitedAdd.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_UnlimitedGzip.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_UnlimitedMod.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Nbit.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Transform.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Sofloat.txt
+$HDFTEST_HOME/../testfiles/examples.datasets.H5Ex_D_Soint.txt
+"
+
+#
+# copy files from source dirs to test dir
+#
+COPY_LIBFILES="$LIST_LIBRARY_FILES"
+
+COPY_LIBFILES_TO_BLDLIBDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_LIBFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDLIBDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_LIBFILES_AND_BLDLIBDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDLIBDIR
+    fi
+}
+
+COPY_DATAFILES="$LIST_DATA_FILES"
+
+COPY_DATAFILES_TO_BLDDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_DATAFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_DATAFILES_AND_BLDDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDDIR/*.txt
+        $RM $BLDDIR/*.out
+    fi
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# where Java is installed (requires jdk1.7.x)
+JAVAEXE=@JAVA@
+JAVAEXEFLAGS=@H5_JAVAFLAGS@
+
+###############################################################################
+#            DO NOT MODIFY BELOW THIS LINE
+###############################################################################
+
+# prepare for test
+COPY_LIBFILES_TO_BLDLIBDIR
+COPY_DATAFILES_TO_BLDDIR
+
+CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/slf4j-api-1.7.5.jar:"$BLDLIBDIR"/slf4j-simple-1.7.5.jar:"$TESTJARFILE""
+
+TEST=/usr/bin/test
+if [ ! -x /usr/bin/test ]
+then
+TEST=`which test`
+fi
+
+if $TEST -z "$CLASSPATH"; then
+        CLASSPATH=""
+fi
+CLASSPATH=$CPATH":"$CLASSPATH
+export CLASSPATH
+
+if $TEST -n "$JAVAPATH" ; then
+        PATH=$JAVAPATH":"$PATH
+        export PATH
+fi
+
+if $TEST -e /bin/uname; then
+   os_name=`/bin/uname -s`
+elif $TEST -e /usr/bin/uname; then
+   os_name=`/usr/bin/uname -s`
+else
+   os_name=unknown
+fi
+
+if $TEST -z "$LD_LIBRARY_PATH" ; then
+        LD_LIBRARY_PATH=""
+fi
+
+case  $os_name in
+    Darwin)
+    DYLD_LIBRARY_PATH=$BLDLIBDIR:$DYLD_LIBRARY_PATH
+    export DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+    ;;
+    *)
+    LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH
+        ;;
+esac
+
+export LD_LIBRARY_PATH
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Alloc"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Alloc > H5Ex_D_Alloc.out)
+if diff H5Ex_D_Alloc.out examples.datasets.H5Ex_D_Alloc.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Alloc"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Alloc"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Checksum"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Checksum > H5Ex_D_Checksum.out)
+if diff H5Ex_D_Checksum.out examples.datasets.H5Ex_D_Checksum.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Checksum"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Checksum"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Chunk"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Chunk > H5Ex_D_Chunk.out)
+if diff H5Ex_D_Chunk.out examples.datasets.H5Ex_D_Chunk.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Chunk"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Chunk"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Compact"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Compact > H5Ex_D_Compact.out)
+if diff H5Ex_D_Compact.out examples.datasets.H5Ex_D_Compact.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Compact"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Compact"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_External"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_External > H5Ex_D_External.out)
+if diff H5Ex_D_External.out examples.datasets.H5Ex_D_External.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_External"
+else
+    echo "**FAILED**    datasets.H5Ex_D_External"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_FillValue"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_FillValue > H5Ex_D_FillValue.out)
+if diff H5Ex_D_FillValue.out examples.datasets.H5Ex_D_FillValue.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_FillValue"
+else
+    echo "**FAILED**    datasets.H5Ex_D_FillValue"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Gzip"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Gzip > H5Ex_D_Gzip.out)
+if diff H5Ex_D_Gzip.out examples.datasets.H5Ex_D_Gzip.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Gzip"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Gzip"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Hyperslab"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Hyperslab > H5Ex_D_Hyperslab.out)
+if diff H5Ex_D_Hyperslab.out examples.datasets.H5Ex_D_Hyperslab.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Hyperslab"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Hyperslab"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_ReadWrite"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_ReadWrite > H5Ex_D_ReadWrite.out)
+if diff H5Ex_D_ReadWrite.out examples.datasets.H5Ex_D_ReadWrite.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_ReadWrite"
+else
+    echo "**FAILED**    datasets.H5Ex_D_ReadWrite"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Shuffle"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Shuffle > H5Ex_D_Shuffle.out)
+if diff H5Ex_D_Shuffle.out examples.datasets.H5Ex_D_Shuffle.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Shuffle"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Shuffle"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+if test $USE_FILTER_SZIP = "yes"; then
+    echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Szip"
+    ($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Szip > H5Ex_D_Szip.out)
+    if diff H5Ex_D_Szip.out examples.datasets.H5Ex_D_Szip.txt > /dev/null; then
+        echo "  PASSED      datasets.H5Ex_D_Szip"
+    else
+        echo "**FAILED**    datasets.H5Ex_D_Szip"
+        nerrors="`expr $nerrors + 1`"
+    fi
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedAdd"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedAdd > H5Ex_D_UnlimitedAdd.out)
+if diff H5Ex_D_UnlimitedAdd.out examples.datasets.H5Ex_D_UnlimitedAdd.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_UnlimitedAdd"
+else
+    echo "**FAILED**    datasets.H5Ex_D_UnlimitedAdd"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedGzip"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedGzip > H5Ex_D_UnlimitedGzip.out)
+if diff H5Ex_D_External.out examples.datasets.H5Ex_D_External.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_UnlimitedGzip"
+else
+    echo "**FAILED**    datasets.H5Ex_D_UnlimitedGzip"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedMod"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_UnlimitedMod > H5Ex_D_UnlimitedMod.out)
+if diff H5Ex_D_UnlimitedMod.out examples.datasets.H5Ex_D_UnlimitedMod.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_UnlimitedMod"
+else
+    echo "**FAILED**    datasets.H5Ex_D_UnlimitedMod"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Nbit"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Nbit > H5Ex_D_Nbit.out)
+if diff H5Ex_D_Nbit.out examples.datasets.H5Ex_D_Nbit.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Nbit"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Nbit"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Transform"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Transform > H5Ex_D_Transform.out)
+if diff H5Ex_D_Transform.out examples.datasets.H5Ex_D_Transform.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Transform"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Transform"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Sofloat"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Sofloat > H5Ex_D_Sofloat.out)
+if diff H5Ex_D_Sofloat.out examples.datasets.H5Ex_D_Sofloat.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Sofloat"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Sofloat"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Soint"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datasets.H5Ex_D_Soint > H5Ex_D_Soint.out)
+if diff H5Ex_D_Soint.out examples.datasets.H5Ex_D_Soint.txt > /dev/null; then
+    echo "  PASSED      datasets.H5Ex_D_Soint"
+else
+    echo "**FAILED**    datasets.H5Ex_D_Soint"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+# Clean up temporary files/directories
+CLEAN_LIBFILES_AND_BLDLIBDIR
+CLEAN_DATAFILES_AND_BLDDIR
+
+# Report test results and exit
+if test $nerrors -eq 0 ; then
+    echo "All $TESTNAME tests passed."
+    exit $EXIT_SUCCESS
+else
+    echo "$TESTNAME tests failed with $nerrors errors."
+    exit $EXIT_FAILURE
+fi
diff --git a/java/examples/datatypes/CMakeLists.txt b/java/examples/datatypes/CMakeLists.txt
new file mode 100644
index 0000000..6525506
--- /dev/null
+++ b/java/examples/datatypes/CMakeLists.txt
@@ -0,0 +1,109 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDFJAVA_EXAMPLES_DATATYPES Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_JNI_BINARY_DIR}
+    ${HDF5_JAVA_HDF5_LIB_DIR}
+)
+
+set (HDF_JAVA_EXAMPLES
+    H5Ex_T_Array
+    H5Ex_T_ArrayAttribute
+    H5Ex_T_Bit
+    H5Ex_T_BitAttribute
+    H5Ex_T_Commit
+    H5Ex_T_Compound
+    H5Ex_T_CompoundAttribute
+    H5Ex_T_Float
+    H5Ex_T_FloatAttribute
+    H5Ex_T_Integer
+    H5Ex_T_IntegerAttribute
+    H5Ex_T_ObjectReference
+    H5Ex_T_ObjectReferenceAttribute
+    H5Ex_T_Opaque
+    H5Ex_T_OpaqueAttribute
+    H5Ex_T_String
+    H5Ex_T_StringAttribute
+    H5Ex_T_VLString
+)
+
+if (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+else (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+endif (WIN32)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
+endforeach (CMAKE_INCLUDE_PATH)
+
+foreach (example ${HDF_JAVA_EXAMPLES})
+  file (WRITE ${PROJECT_BINARY_DIR}/${example}_Manifest.txt
+  "Main-Class: examples.datatypes.${example}
+"
+  )
+  add_jar (${example} MANIFEST ${PROJECT_BINARY_DIR}/${example}_Manifest.txt ${example}.java)
+  get_target_property (${example}_JAR_FILE ${example} JAR_FILE)
+#  install_jar (${example} ${HJAVA_INSTALL_DATA_DIR}/examples examples)
+  get_target_property (${example}_CLASSPATH ${example} CLASSDIR)
+  add_dependencies (${example} ${HDF5_JAVA_HDF5_LIB_TARGET})
+endforeach (example ${HDF_JAVA_EXAMPLES})
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_NOP_JAR}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (HDFJAVA_JAR ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${HDFJAVA_JAR}")
+endforeach (HDFJAVA_JAR)
+
+MACRO (ADD_H5_TEST resultfile resultcode)
+  add_test (
+      NAME JAVA_datatypes-${resultfile}
+      COMMAND "${CMAKE_COMMAND}"
+          -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
+          -D "TEST_PROGRAM=examples.datatypes.${resultfile}"
+          -D "TEST_ARGS:STRING=${ARGN}"
+          -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${resultfile}_JAR_FILE}"
+          -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
+          -D "TEST_FOLDER=${HDFJAVA_EXAMPLES_BINARY_DIR}"
+          -D "TEST_OUTPUT=datatypes/${resultfile}.out"
+          -D "TEST_EXPECT=${resultcode}"
+          -D "TEST_REFERENCE=datatypes/${resultfile}.txt"
+          -P "${HDF_RESOURCES_DIR}/jrunTest.cmake"
+  )
+  if (NOT "${last_test}" STREQUAL "")
+    set_tests_properties (JAVA_datatypes-${resultfile} PROPERTIES DEPENDS ${last_test})
+  endif (NOT "${last_test}" STREQUAL "")
+  set (last_test "JAVA_datatypes-${resultfile}")
+ENDMACRO (ADD_H5_TEST file)
+
+if (BUILD_TESTING)
+  foreach (example ${HDF_JAVA_EXAMPLES})
+    add_test (
+        NAME JAVA_datatypes-${example}-clearall-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E remove
+            ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
+            ${example}.out
+            ${example}.out.err
+    )
+    if (NOT "${last_test}" STREQUAL "")
+      set_tests_properties (JAVA_datatypes-${example}-clearall-objects PROPERTIES DEPENDS ${last_test})
+    endif (NOT "${last_test}" STREQUAL "")
+    add_test (
+        NAME JAVA_datatypes-${example}-copy-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E copy_if_different
+            ${HDFJAVA_EXAMPLES_SOURCE_DIR}/testfiles/examples.datatypes.${example}.txt
+            ${HDFJAVA_EXAMPLES_DATATYPES_BINARY_DIR}/${example}.txt
+    )
+    set_tests_properties (JAVA_datatypes-${example}-copy-objects PROPERTIES DEPENDS JAVA_datatypes-${example}-clearall-objects)
+    set (last_test "JAVA_datatypes-${example}-copy-objects")
+    ADD_H5_TEST (${example} 0)
+  endforeach (example ${HDF_JAVA_EXAMPLES})
+endif (BUILD_TESTING)
diff --git a/java/examples/datatypes/H5Ex_T_Array.java b/java/examples/datatypes/H5Ex_T_Array.java
new file mode 100644
index 0000000..7b7009a
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Array.java
@@ -0,0 +1,282 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write array datatypes
+  to a dataset.  The program 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, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_Array {
+    private static String FILENAME = "H5Ex_T_Array.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int ADIM0 = 3;
+    private static final int ADIM1 = 5;
+    private static final int RANK = 1;
+    private static final int NDIMS = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        long[] adims = { ADIM0, ADIM1 };
+        int[][][] dset_data = new int[DIM0][ADIM0][ADIM1];
+
+        // Initialize data. indx is the element in the dataspace, jndx and kndx the
+        // elements within the array datatype.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < ADIM0; jndx++)
+                for (int kndx = 0; kndx < ADIM1; kndx++)
+                    dset_data[indx][jndx][kndx] = indx * jndx - jndx * kndx + indx * kndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create array datatypes for file.
+        try {
+            filetype_id = H5.H5Tarray_create(HDF5Constants.H5T_STD_I64LE, NDIMS, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create array datatypes for memory.
+        try {
+            memtype_id = H5.H5Tarray_create(HDF5Constants.H5T_NATIVE_INT, NDIMS, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (filetype_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, filetype_id, dataspace_id, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dwrite(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        long[] adims = { ADIM0, ADIM1 };
+        int[][][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype.
+        try {
+            if (dataset_id >= 0)
+                filetype_id = H5.H5Dget_type(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype's dimensions.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tget_array_dims(filetype_id, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (adims[0])][(int) (adims[1])];
+
+        // Create array datatypes for memory.
+        try {
+            memtype_id = H5.H5Tarray_create(HDF5Constants.H5T_NATIVE_INT, 2, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read data.
+        try {
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dread(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(DATASETNAME + " [" + indx + "]:");
+            for (int jndx = 0; jndx < adims[0]; jndx++) {
+                System.out.print(" [");
+                for (int kndx = 0; kndx < adims[1]; kndx++)
+                    System.out.print(dset_data[indx][jndx][kndx] + " ");
+                System.out.println("]");
+            }
+            System.out.println();
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Array.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Array.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_ArrayAttribute.java b/java/examples/datatypes/H5Ex_T_ArrayAttribute.java
new file mode 100644
index 0000000..ce97457
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_ArrayAttribute.java
@@ -0,0 +1,322 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write array datatypes
+  to an attribute.  The program first writes integers arrays
+  of dimension ADIM0xADIM1 to an attribute with a dataspace
+  of DIM0, then closes the  file.  Next, it reopens the
+  file, reads back the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_ArrayAttribute {
+    private static String FILENAME = "H5Ex_T_ArrayAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int ADIM0 = 3;
+    private static final int ADIM1 = 5;
+    private static final int RANK = 1;
+    private static final int NDIMS = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        long[] adims = { ADIM0, ADIM1 };
+        int[][][] dset_data = new int[DIM0][ADIM0][ADIM1];
+
+        // Initialize data. indx is the element in the dataspace, jndx and kndx the
+        // elements within the array datatype.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < ADIM0; jndx++)
+                for (int kndx = 0; kndx < ADIM1; kndx++)
+                    dset_data[indx][jndx][kndx] = indx * jndx - jndx * kndx + indx * kndx;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create array datatypes for file.
+        try {
+            filetype_id = H5.H5Tarray_create(HDF5Constants.H5T_STD_I64LE, NDIMS, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create array datatypes for memory.
+        try {
+            memtype_id = H5.H5Tarray_create(HDF5Constants.H5T_NATIVE_INT, NDIMS, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0) && (filetype_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, filetype_id, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Awrite(attribute_id, memtype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        long[] adims = { ADIM0, ADIM1 };
+        int[][][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype.
+        try {
+            if (attribute_id >= 0)
+                filetype_id = H5.H5Aget_type(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype's dimensions.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tget_array_dims(filetype_id, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (adims[0])][(int) (adims[1])];
+
+        // Create array datatypes for memory.
+        try {
+            memtype_id = H5.H5Tarray_create(HDF5Constants.H5T_NATIVE_INT, 2, adims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read data.
+        try {
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Aread(attribute_id, memtype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(ATTRIBUTENAME + " [" + indx + "]:");
+            for (int jndx = 0; jndx < adims[0]; jndx++) {
+                System.out.print(" [");
+                for (int kndx = 0; kndx < adims[1]; kndx++)
+                    System.out.print(dset_data[indx][jndx][kndx] + " ");
+                System.out.println("]");
+            }
+            System.out.println();
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_ArrayAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_ArrayAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Bit.java b/java/examples/datatypes/H5Ex_T_Bit.java
new file mode 100644
index 0000000..f76c7d5
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Bit.java
@@ -0,0 +1,227 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write bitfield
+  datatypes to a dataset.  The program first writes bit
+  fields to a dataset with a dataspace of DIM0xDIM1, then
+  closes the file.  Next, it reopens the file, reads back
+  the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_Bit {
+    private static String FILENAME = "H5Ex_T_Bit.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data = new int[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = 0;
+                dset_data[indx][jndx] |= (indx * jndx - jndx) & 0x03; /* Field "A" */
+                dset_data[indx][jndx] |= (indx & 0x03) << 2; /* Field "B" */
+                dset_data[indx][jndx] |= (jndx & 0x03) << 4; /* Field "C" */
+                dset_data[indx][jndx] |= ((indx + jndx) & 0x03) << 6; /* Field "D" */
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_B8BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the bitfield data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_B8, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_B8, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println(DATASETNAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print("{" + (dset_data[indx][jndx] & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 2) & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 4) & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 6) & 0x03) + "}");
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Bit.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Bit.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_BitAttribute.java b/java/examples/datatypes/H5Ex_T_BitAttribute.java
new file mode 100644
index 0000000..a5ab81b
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_BitAttribute.java
@@ -0,0 +1,267 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write bitfield
+  datatypes to an attribute.  The program first writes bit
+  fields to an attribute with a dataspace of DIM0xDIM1, then
+  closes the file.  Next, it reopens the file, reads back
+  the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_BitAttribute {
+    private static String FILENAME = "H5Ex_T_BitAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data = new int[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = 0;
+                dset_data[indx][jndx] |= (indx * jndx - jndx) & 0x03; /* Field "A" */
+                dset_data[indx][jndx] |= (indx & 0x03) << 2; /* Field "B" */
+                dset_data[indx][jndx] |= (jndx & 0x03) << 4; /* Field "C" */
+                dset_data[indx][jndx] |= ((indx + jndx) & 0x03) << 6; /* Field "D" */
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, HDF5Constants.H5T_STD_B8BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Awrite(attribute_id, HDF5Constants.H5T_NATIVE_B8, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aread(attribute_id, HDF5Constants.H5T_NATIVE_B8, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println(ATTRIBUTENAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print("{" + (dset_data[indx][jndx] & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 2) & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 4) & 0x03) + ", ");
+                System.out.print(((dset_data[indx][jndx] >> 6) & 0x03) + "}");
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_BitAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_BitAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Commit.java b/java/examples/datatypes/H5Ex_T_Commit.java
new file mode 100644
index 0000000..d4e43f9
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Commit.java
@@ -0,0 +1,265 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to commit a named datatype to a
+  file, and read back that datatype.  The program first
+  defines a compound datatype, commits it to a file, then
+  closes the file.  Next, it reopens the file, opens the
+  datatype, and outputs the names of its fields to the
+  screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public class H5Ex_T_Commit {
+    private static String FILENAME = "H5Ex_T_Commit.h5";
+    private static String DATATYPENAME = "Sensor_Type";
+    protected static final int INTEGERSIZE = 4;
+    protected static final int DOUBLESIZE = 8;
+    protected final static int MAXSTRINGSIZE = 80;
+
+    // Values for the various classes of datatypes
+    enum H5T_class {
+        H5T_NO_CLASS(HDF5Constants.H5T_NO_CLASS), // error
+        H5T_INTEGER(HDF5Constants.H5T_INTEGER), // integer types
+        H5T_FLOAT(HDF5Constants.H5T_FLOAT), // floating-point types
+        H5T_TIME(HDF5Constants.H5T_TIME), // date and time types
+        H5T_STRING(HDF5Constants.H5T_STRING), // character string types
+        H5T_BITFIELD(HDF5Constants.H5T_BITFIELD), // bit field types
+        H5T_OPAQUE(HDF5Constants.H5T_OPAQUE), // opaque types
+        H5T_COMPOUND(HDF5Constants.H5T_COMPOUND), // compound types
+        H5T_REFERENCE(HDF5Constants.H5T_REFERENCE), // reference types
+        H5T_ENUM(HDF5Constants.H5T_ENUM), // enumeration types
+        H5T_VLEN(HDF5Constants.H5T_VLEN), // Variable-Length types
+        H5T_ARRAY(HDF5Constants.H5T_ARRAY), // Array types
+        H5T_NCLASSES(11); // this must be last
+
+        private static final Map<Long, H5T_class> lookup = new HashMap<Long, H5T_class>();
+
+        static {
+            for (H5T_class s : EnumSet.allOf(H5T_class.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private long code;
+
+        H5T_class(long layout_type) {
+            this.code = layout_type;
+        }
+
+        public long getCode() {
+            return this.code;
+        }
+
+        public static H5T_class get(long typeclass_id) {
+            return lookup.get(typeclass_id);
+        }
+    }
+
+    // The supporting Sensor_Datatype class.
+    private static class Sensor_Datatype {
+        static int numberMembers = 4;
+        static int[] memberDims = { 1, 1, 1, 1 };
+
+        String[] memberNames = { "Serial number", "Location", "Temperature (F)", "Pressure (inHg)" };
+        long[] memberFileTypes = { HDF5Constants.H5T_STD_I32BE, HDF5Constants.H5T_C_S1, HDF5Constants.H5T_IEEE_F64BE,
+                HDF5Constants.H5T_IEEE_F64BE };
+        static int[] memberStorage = { INTEGERSIZE, MAXSTRINGSIZE, DOUBLESIZE, DOUBLESIZE };
+
+        // Data size is the storage size for the members not the object.
+        static long getDataSize() {
+            long data_size = 0;
+            for (int indx = 0; indx < numberMembers; indx++)
+                data_size += memberStorage[indx] * memberDims[indx];
+            return data_size;
+        }
+
+        static int getOffset(int memberItem) {
+            int data_offset = 0;
+            for (int indx = 0; indx < memberItem; indx++)
+                data_offset += memberStorage[indx];
+            return data_offset;
+        }
+    }
+
+    private static void CreateDataType() {
+        long file_id = -1;
+        long strtype_id = -1;
+        long filetype_id = -1;
+        Sensor_Datatype datatypes = new Sensor_Datatype();
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create string datatype.
+        try {
+            strtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (strtype_id >= 0)
+                H5.H5Tset_size(strtype_id, MAXSTRINGSIZE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for the file. Because the standard
+        // types we are using for the file may have different sizes than
+        // the corresponding native types, we must manually calculate the
+        // offset of each member.
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (filetype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = datatypes.memberFileTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(filetype_id, datatypes.memberNames[indx], Sensor_Datatype.getOffset(indx), type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Commit the compound datatype to the file, creating a named datatype.
+        try {
+            if ((file_id >= 0) && (filetype_id >= 0))
+                H5.H5Tcommit(file_id, DATATYPENAME, filetype_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the str type.
+        try {
+            if (strtype_id >= 0)
+                H5.H5Tclose(strtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataType() {
+        long file_id = -1;
+        long typeclass_id = -1;
+        long filetype_id = -1;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open named datatype.
+        try {
+            if (file_id >= 0)
+                filetype_id = H5.H5Topen(file_id, DATATYPENAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Named datatype:  " + DATATYPENAME + ":");
+
+        // Get datatype class. If it isn't compound, we won't print anything.
+        try {
+            if (filetype_id >= 0)
+                typeclass_id = H5.H5Tget_class(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Read data.
+        try {
+            if (H5T_class.get(typeclass_id) == H5T_class.H5T_COMPOUND) {
+                System.out.println("   Class: H5T_COMPOUND");
+                int nmembs = H5.H5Tget_nmembers(filetype_id);
+                // Iterate over compound datatype members.
+                for (int indx = 0; indx < nmembs; indx++) {
+                    String member_name = H5.H5Tget_member_name(filetype_id, indx);
+                    System.out.println("    " + member_name);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Commit.CreateDataType();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Commit.ReadDataType();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Compound.java b/java/examples/datatypes/H5Ex_T_Compound.java
new file mode 100644
index 0000000..f270cb9
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Compound.java
@@ -0,0 +1,443 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write compound
+  datatypes to a dataset.  The program first writes
+  compound structures to a dataset with a dataspace of DIM0,
+  then closes the file.  Next, it reopens the file, reads
+  back the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+
+public class H5Ex_T_Compound {
+    private static String FILENAME = "H5Ex_T_Compound.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int RANK = 1;
+    protected static final int INTEGERSIZE = 4;
+    protected static final int DOUBLESIZE = 8;
+    protected final static int MAXSTRINGSIZE = 80;
+
+    static class Sensor_Datatype {
+        static int numberMembers = 4;
+        static int[] memberDims = { 1, 1, 1, 1 };
+
+        static String[] memberNames = { "Serial number", "Location", "Temperature (F)", "Pressure (inHg)" };
+        static long[] memberMemTypes = { HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5T_C_S1,
+                HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5T_NATIVE_DOUBLE };
+        static long[] memberFileTypes = { HDF5Constants.H5T_STD_I32BE, HDF5Constants.H5T_C_S1,
+                HDF5Constants.H5T_IEEE_F64BE, HDF5Constants.H5T_IEEE_F64BE };
+        static int[] memberStorage = { INTEGERSIZE, MAXSTRINGSIZE, DOUBLESIZE, DOUBLESIZE };
+
+        // Data size is the storage size for the members.
+        static long getTotalDataSize() {
+            long data_size = 0;
+            for (int indx = 0; indx < numberMembers; indx++)
+                data_size += memberStorage[indx] * memberDims[indx];
+            return DIM0 * data_size;
+        }
+
+        static long getDataSize() {
+            long data_size = 0;
+            for (int indx = 0; indx < numberMembers; indx++)
+                data_size += memberStorage[indx] * memberDims[indx];
+            return data_size;
+        }
+
+        static int getOffset(int memberItem) {
+            int data_offset = 0;
+            for (int indx = 0; indx < memberItem; indx++)
+                data_offset += memberStorage[indx];
+            return data_offset;
+        }
+    }
+
+    static class Sensor {
+        public int serial_no;
+        public String location;
+        public double temperature;
+        public double pressure;
+
+        Sensor(int serial_no, String location, double temperature, double pressure) {
+            this.serial_no = serial_no;
+            this.location = location;
+            this.temperature = temperature;
+            this.pressure = pressure;
+        }
+
+        Sensor(ByteBuffer databuf, int dbposition) {
+            readBuffer(databuf, dbposition);
+        }
+
+        void writeBuffer(ByteBuffer databuf, int dbposition) {
+            databuf.putInt(dbposition + Sensor_Datatype.getOffset(0), serial_no);
+            byte[] temp_str = location.getBytes(Charset.forName("UTF-8"));
+            int arraylen = (temp_str.length > MAXSTRINGSIZE) ? MAXSTRINGSIZE : temp_str.length;
+            for (int ndx = 0; ndx < arraylen; ndx++)
+                databuf.put(dbposition + Sensor_Datatype.getOffset(1) + ndx, temp_str[ndx]);
+            for (int ndx = arraylen; ndx < MAXSTRINGSIZE; ndx++)
+                databuf.put(dbposition + Sensor_Datatype.getOffset(1) + arraylen, (byte) 0);
+            databuf.putDouble(dbposition + Sensor_Datatype.getOffset(2), temperature);
+            databuf.putDouble(dbposition + Sensor_Datatype.getOffset(3), pressure);
+        }
+
+        void readBuffer(ByteBuffer databuf, int dbposition) {
+            this.serial_no = databuf.getInt(dbposition + Sensor_Datatype.getOffset(0));
+            ByteBuffer stringbuf = databuf.duplicate();
+            stringbuf.position(dbposition + Sensor_Datatype.getOffset(1));
+            stringbuf.limit(dbposition + Sensor_Datatype.getOffset(1) + MAXSTRINGSIZE);
+            byte[] bytearr = new byte[stringbuf.remaining()];
+            stringbuf.get(bytearr);
+            this.location = new String(bytearr, Charset.forName("UTF-8")).trim();
+            this.temperature = databuf.getDouble(dbposition + Sensor_Datatype.getOffset(2));
+            this.pressure = databuf.getDouble(dbposition + Sensor_Datatype.getOffset(3));
+        }
+
+        @Override
+        public String toString() {
+            return String.format("Serial number   : " + serial_no  + "%n" +
+                                 "Location        : " + location + "%n" +
+                                 "Temperature (F) : " + temperature + "%n" +
+                                 "Pressure (inHg) : " + pressure + "%n");
+        }
+    }
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long strtype_id = -1;
+        long memtype_id = -1;
+        long filetype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        Sensor[] object_data = new Sensor[DIM0];
+        byte[] dset_data = null;
+
+        // Initialize data.
+        object_data[0] = new Sensor(1153, new String("Exterior (static)"), 53.23, 24.57);
+        object_data[1] = new Sensor(1184, new String("Intake"), 55.12, 22.95);
+        object_data[2] = new Sensor(1027, new String("Intake manifold"), 103.55, 31.23);
+        object_data[3] = new Sensor(1313, new String("Exhaust manifold"), 1252.89, 84.11);
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create string datatype.
+        try {
+            strtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (strtype_id >= 0)
+                H5.H5Tset_size(strtype_id, MAXSTRINGSIZE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for memory.
+        try {
+            memtype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (memtype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberMemTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(memtype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for the file. Because the standard
+        // types we are using for the file may have different sizes than
+        // the corresponding native types, we must manually calculate the
+        // offset of each member.
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (filetype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberFileTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(filetype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0) && (filetype_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, filetype_id, dataspace_id, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the compound data to the dataset.
+        // allocate memory for read buffer.
+        dset_data = new byte[(int)dims[0] * (int)Sensor_Datatype.getDataSize()];
+        ByteBuffer outBuf = ByteBuffer.wrap(dset_data);
+        outBuf.order(ByteOrder.nativeOrder());
+        for (int indx = 0; indx < (int) dims[0]; indx++) {
+            object_data[indx].writeBuffer(outBuf, indx * (int)Sensor_Datatype.getDataSize());
+        }
+        try {
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dwrite(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (strtype_id >= 0)
+                H5.H5Tclose(strtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long strtype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        Sensor[] object_data2;
+        byte[] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create string datatype.
+        try {
+            strtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (strtype_id >= 0)
+                H5.H5Tset_size(strtype_id, MAXSTRINGSIZE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for memory.
+        try {
+            memtype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (memtype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberMemTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(memtype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // allocate memory for read buffer.
+        dset_data = new byte[(int) dims[0] * (int)Sensor_Datatype.getDataSize()];
+
+        object_data2 = new Sensor[(int) dims[0]];
+
+        // Read data.
+        try {
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dread(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+
+            ByteBuffer inBuf = ByteBuffer.wrap(dset_data);
+            inBuf.order(ByteOrder.nativeOrder());
+            for (int indx = 0; indx < (int) dims[0]; indx++) {
+                object_data2[indx] = new Sensor(inBuf, indx * (int)Sensor_Datatype.getDataSize());
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(DATASETNAME + " [" + indx + "]:");
+            System.out.println(object_data2[indx].toString());
+        }
+        System.out.println();
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (strtype_id >= 0)
+                H5.H5Tclose(strtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Compound.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Compound.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_CompoundAttribute.java b/java/examples/datatypes/H5Ex_T_CompoundAttribute.java
new file mode 100644
index 0000000..25581d4
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_CompoundAttribute.java
@@ -0,0 +1,486 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write compound
+  datatypes to an attribute.  The program first writes
+  compound structures to an attribute with a dataspace of
+  DIM0, then closes the file.  Next, it reopens the file,
+  reads back the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+
+public class H5Ex_T_CompoundAttribute {
+    private static String FILENAME = "H5Ex_T_CompoundAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int RANK = 1;
+    protected static final int INTEGERSIZE = 4;
+    protected static final int DOUBLESIZE = 8;
+    protected final static int MAXSTRINGSIZE = 80;
+
+    // Using Java Externalization will add a two-byte object header in
+    // the stream, which needs to be called out in the datatypes.
+    static class Sensor_Datatype {
+        static int numberMembers = 4;
+        static int[] memberDims = { 1, 1, 1, 1 };
+
+        static String[] memberNames = { "Serial number", "Location", "Temperature (F)", "Pressure (inHg)" };
+        static long[] memberMemTypes = { HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5T_C_S1,
+                HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5T_NATIVE_DOUBLE };
+        static long[] memberFileTypes = { HDF5Constants.H5T_STD_I32BE, HDF5Constants.H5T_C_S1,
+                HDF5Constants.H5T_IEEE_F64BE, HDF5Constants.H5T_IEEE_F64BE };
+        static int[] memberStorage = { INTEGERSIZE, MAXSTRINGSIZE, DOUBLESIZE, DOUBLESIZE };
+
+        // Data size is the storage size for the members not the object.
+        static long getTotalDataSize() {
+            long data_size = 0;
+            for (int indx = 0; indx < numberMembers; indx++)
+                data_size += memberStorage[indx] * memberDims[indx];
+            return DIM0 * data_size;
+        }
+
+        static long getDataSize() {
+            long data_size = 0;
+            for (int indx = 0; indx < numberMembers; indx++)
+                data_size += memberStorage[indx] * memberDims[indx];
+            return data_size;
+        }
+
+        static int getOffset(int memberItem) {
+            int data_offset = 0;
+            for (int indx = 0; indx < memberItem; indx++)
+                data_offset += memberStorage[indx];
+            return data_offset;
+        }
+    }
+
+    static class Sensor {
+        public int serial_no;
+        public String location;
+        public double temperature;
+        public double pressure;
+
+        Sensor(int serial_no, String location, double temperature, double pressure) {
+            this.serial_no = serial_no;
+            this.location = location;
+            this.temperature = temperature;
+            this.pressure = pressure;
+        }
+
+        Sensor(ByteBuffer databuf, int dbposition) {
+            readBuffer(databuf, dbposition);
+        }
+
+        void writeBuffer(ByteBuffer databuf, int dbposition) {
+            databuf.putInt(dbposition + Sensor_Datatype.getOffset(0), serial_no);
+            byte[] temp_str = location.getBytes(Charset.forName("UTF-8"));
+            int arraylen = (temp_str.length > MAXSTRINGSIZE) ? MAXSTRINGSIZE : temp_str.length;
+            for (int ndx = 0; ndx < arraylen; ndx++)
+                databuf.put(dbposition + Sensor_Datatype.getOffset(1) + ndx, temp_str[ndx]);
+            for (int ndx = arraylen; ndx < MAXSTRINGSIZE; ndx++)
+                databuf.put(dbposition + Sensor_Datatype.getOffset(1) + arraylen, (byte) 0);
+            databuf.putDouble(dbposition + Sensor_Datatype.getOffset(2), temperature);
+            databuf.putDouble(dbposition + Sensor_Datatype.getOffset(3), pressure);
+        }
+
+        void readBuffer(ByteBuffer databuf, int dbposition) {
+            this.serial_no = databuf.getInt(dbposition + Sensor_Datatype.getOffset(0));
+            ByteBuffer stringbuf = databuf.duplicate();
+            stringbuf.position(dbposition + Sensor_Datatype.getOffset(1));
+            stringbuf.limit(dbposition + Sensor_Datatype.getOffset(1) + MAXSTRINGSIZE);
+            byte[] bytearr = new byte[stringbuf.remaining()];
+            stringbuf.get(bytearr);
+            this.location = new String(bytearr, Charset.forName("UTF-8")).trim();
+            this.temperature = databuf.getDouble(dbposition + Sensor_Datatype.getOffset(2));
+            this.pressure = databuf.getDouble(dbposition + Sensor_Datatype.getOffset(3));
+        }
+
+        @Override
+        public String toString() {
+            return String.format("Serial number   : " + serial_no  + "%n" +
+                                 "Location        : " + location + "%n" +
+                                 "Temperature (F) : " + temperature + "%n" +
+                                 "Pressure (inHg) : " + pressure + "%n");
+        }
+    }
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long strtype_id = -1;
+        long memtype_id = -1;
+        long filetype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        Sensor[] object_data = new Sensor[DIM0];
+        byte[] dset_data = null;
+
+        // Initialize data.
+        object_data[0] = new Sensor(1153, new String("Exterior (static)"), 53.23, 24.57);
+        object_data[1] = new Sensor(1184, new String("Intake"), 55.12, 22.95);
+        object_data[2] = new Sensor(1027, new String("Intake manifold"), 103.55, 31.23);
+        object_data[3] = new Sensor(1313, new String("Exhaust manifold"), 1252.89, 84.11);
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create string datatype.
+        try {
+            strtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (strtype_id >= 0)
+                H5.H5Tset_size(strtype_id, MAXSTRINGSIZE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for memory.
+        try {
+            memtype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (memtype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberMemTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(memtype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for the file. Because the standard
+        // types we are using for the file may have different sizes than
+        // the corresponding native types, we must manually calculate the
+        // offset of each member.
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (filetype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberFileTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(filetype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0) && (filetype_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, filetype_id, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the compound data.
+        dset_data = new byte[(int) dims[0] * (int)Sensor_Datatype.getDataSize()];
+        ByteBuffer outBuf = ByteBuffer.wrap(dset_data);
+        outBuf.order(ByteOrder.nativeOrder());
+        for (int indx = 0; indx < (int) dims[0]; indx++) {
+            object_data[indx].writeBuffer(outBuf, indx * (int)Sensor_Datatype.getDataSize());
+        }
+        try {
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Awrite(attribute_id, memtype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (strtype_id >= 0)
+                H5.H5Tclose(strtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long strtype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        Sensor[] object_data2;
+        byte[] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer. This is a
+        // three dimensional dataset when the array datatype is included so
+        // the dynamic allocation must be done in steps.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create string datatype.
+        try {
+            strtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (strtype_id >= 0)
+                H5.H5Tset_size(strtype_id, MAXSTRINGSIZE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the compound datatype for memory.
+        try {
+            memtype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, Sensor_Datatype.getDataSize());
+            if (memtype_id >= 0) {
+                for (int indx = 0; indx < Sensor_Datatype.numberMembers; indx++) {
+                    long type_id = Sensor_Datatype.memberMemTypes[indx];
+                    if (type_id == HDF5Constants.H5T_C_S1)
+                        type_id = strtype_id;
+                    H5.H5Tinsert(memtype_id, Sensor_Datatype.memberNames[indx], Sensor_Datatype.getOffset(indx),
+                            type_id);
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // allocate memory for read buffer.
+        dset_data = new byte[(int) dims[0] * (int)Sensor_Datatype.getDataSize()];
+
+        object_data2 = new Sensor[(int) dims[0]];
+
+        // Read data.
+        try {
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Aread(attribute_id, memtype_id, dset_data);
+
+            ByteBuffer inBuf = ByteBuffer.wrap(dset_data);
+            inBuf.order(ByteOrder.nativeOrder());
+            for (int indx = 0; indx < (int) dims[0]; indx++) {
+                object_data2[indx] = new Sensor(inBuf, indx * (int)Sensor_Datatype.getDataSize());
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(ATTRIBUTENAME + " [" + indx + "]:");
+            System.out.println(object_data2[indx].toString());
+        }
+        System.out.println();
+
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (strtype_id >= 0)
+                H5.H5Tclose(strtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_CompoundAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_CompoundAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Float.java b/java/examples/datatypes/H5Ex_T_Float.java
new file mode 100644
index 0000000..1b5fd9b
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Float.java
@@ -0,0 +1,227 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write integer datatypes
+  to a dataset.  The program first writes integers to a
+  dataset with a dataspace of DIM0xDIM1, then closes the
+  file.  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import java.text.DecimalFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_Float {
+    private static String FILENAME = "H5Ex_T_Float.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        double[][] dset_data = new double[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = indx / (jndx + 0.5) + jndx;
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset and write the floating point data to it. In
+        // this example we will save the data as 64 bit little endian IEEE
+        // floating point numbers, regardless of the native type. The HDF5
+        // library automatically converts between different floating point
+        // types.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_IEEE_F64LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        double[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new double[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        DecimalFormat df = new DecimalFormat("#,##0.0000");
+        System.out.println(DATASETNAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print(" " + df.format(dset_data[indx][jndx]));
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Float.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Float.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_FloatAttribute.java b/java/examples/datatypes/H5Ex_T_FloatAttribute.java
new file mode 100644
index 0000000..de1dac7
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_FloatAttribute.java
@@ -0,0 +1,263 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write floating point
+  datatypes to an attribute.  The program first writes
+  floating point numbers to an attribute with a dataspace of
+  DIM0xDIM1, then closes the file.  Next, it reopens the
+  file, reads back the data, and outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import java.text.DecimalFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_FloatAttribute {
+    private static String FILENAME = "H5Ex_T_FloatAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        double[][] dset_data = new double[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = indx / (jndx + 0.5) + jndx;
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, HDF5Constants.H5T_IEEE_F64LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Awrite(attribute_id, HDF5Constants.H5T_NATIVE_DOUBLE, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        double[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new double[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aread(attribute_id, HDF5Constants.H5T_NATIVE_DOUBLE, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        DecimalFormat df = new DecimalFormat("#,##0.0000");
+        System.out.println(ATTRIBUTENAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print(" " + df.format(dset_data[indx][jndx]));
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_FloatAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_FloatAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Integer.java b/java/examples/datatypes/H5Ex_T_Integer.java
new file mode 100644
index 0000000..2f365cd
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Integer.java
@@ -0,0 +1,226 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write integer datatypes
+  to a dataset.  The program first writes integers to a
+  dataset with a dataspace of DIM0xDIM1, then closes the
+  file.  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import java.text.DecimalFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_Integer {
+    private static String FILENAME = "H5Ex_T_Integer.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data = new int[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = indx * jndx - jndx;
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset and write the integer data to it. In this
+        // example we will save the data as 64 bit big endian integers,
+        // regardless of the native integer type. The HDF5 library
+        // automatically converts between different integer types.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I64BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        DecimalFormat df = new DecimalFormat("#,##0");
+        System.out.println(DATASETNAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print(" " + df.format(dset_data[indx][jndx]));
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Integer.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Integer.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_IntegerAttribute.java b/java/examples/datatypes/H5Ex_T_IntegerAttribute.java
new file mode 100644
index 0000000..c153d99
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_IntegerAttribute.java
@@ -0,0 +1,263 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write integer datatypes
+  to an attribute.  The program first writes integers to an
+  attribute with a dataspace of DIM0xDIM1, then closes the
+  file.  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import java.text.DecimalFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_IntegerAttribute {
+    private static String FILENAME = "H5Ex_T_IntegerAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int DIM1 = 7;
+    private static final int RANK = 2;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data = new int[DIM0][DIM1];
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++)
+            for (int jndx = 0; jndx < DIM1; jndx++) {
+                dset_data[indx][jndx] = indx * jndx - jndx;
+            }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, HDF5Constants.H5T_STD_I64BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Awrite(attribute_id, HDF5Constants.H5T_NATIVE_INT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0, DIM1 };
+        int[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new int[(int) dims[0]][(int) (dims[1])];
+
+        // Read data.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aread(attribute_id, HDF5Constants.H5T_NATIVE_INT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        DecimalFormat df = new DecimalFormat("#,##0");
+        System.out.println(ATTRIBUTENAME + ":");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(" [");
+            for (int jndx = 0; jndx < dims[1]; jndx++) {
+                System.out.print(" " + df.format(dset_data[indx][jndx]));
+            }
+            System.out.println("]");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_IntegerAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_IntegerAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_ObjectReference.java b/java/examples/datatypes/H5Ex_T_ObjectReference.java
new file mode 100644
index 0000000..3cad6c9
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_ObjectReference.java
@@ -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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+  This example shows how to read and write object references
+  to a dataset.  The program first creates objects in the
+  file and writes references to those objects to a dataset
+  with a dataspace of DIM0, then closes the file.  Next, it
+  reopens the file, dereferences the references, and outputs
+  the names of their targets to the screen.
+ ************************************************************/
+package examples.datatypes;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_ObjectReference {
+    private static String FILENAME = "H5Ex_T_ObjectReference.h5";
+    private static String DATASETNAME = "DS1";
+    private static String DATASETNAME2 = "DS2";
+    private static String GROUPNAME = "G1";
+    private static final int DIM0 = 2;
+    private static final int RANK = 1;
+
+    // Values for the status of space allocation
+    enum H5G_obj {
+        H5G_UNKNOWN(HDF5Constants.H5O_TYPE_UNKNOWN), /* Unknown object type */
+        H5G_GROUP(HDF5Constants.H5O_TYPE_GROUP), /* Object is a group */
+        H5G_DATASET(HDF5Constants.H5O_TYPE_DATASET), /* Object is a dataset */
+        H5G_TYPE(HDF5Constants.H5O_TYPE_NAMED_DATATYPE); /* Object is a named data type */
+        private static final Map<Integer, H5G_obj> lookup = new HashMap<Integer, H5G_obj>();
+
+        static {
+            for (H5G_obj s : EnumSet.allOf(H5G_obj.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5G_obj(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5G_obj get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void writeObjRef() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long filespace_id = -1;
+        long group_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data = new byte[DIM0][8];
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if ((file_id >= 0) && (dataspace_id >= 0)) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME2, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                if (dataset_id >= 0)
+                    H5.H5Dclose(dataset_id);
+                dataset_id = -1;
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a group in the file.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, GROUPNAME, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+            group_id = -1;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create references to the previously created objects. Passing -1
+        // as space_id causes this parameter to be ignored. Other values
+        // besides valid dataspaces result in an error.
+        try {
+            if (file_id >= 0) {
+                byte rbuf0[] = H5.H5Rcreate(file_id, GROUPNAME, HDF5Constants.H5R_OBJECT, -1);
+                byte rbuf1[] = H5.H5Rcreate(file_id, DATASETNAME2, HDF5Constants.H5R_OBJECT, -1);
+                for (int indx = 0; indx < 8; indx++) {
+                    dset_data[0][indx] = rbuf0[indx];
+                    dset_data[1][indx] = rbuf1[indx];
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            filespace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (filespace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_REF_OBJ, filespace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the object references to it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_STD_REF_OBJ, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (filespace_id >= 0)
+                H5.H5Sclose(filespace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readObjRef() {
+        long file_id = -1;
+        long dataset_id = -1;
+        long dataspace_id = -1;
+        int object_type = -1;
+        long object_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new byte[(int)dims[0]][8];
+
+        // Read the data using the default properties.
+        try {
+            if (dataset_id >= 0) {
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_STD_REF_OBJ, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(DATASETNAME + "[" + indx + "]:");
+            System.out.print("  ->");
+            // Open the referenced object, get its name and type.
+            try {
+                if (dataset_id >= 0) {
+                    object_id = H5.H5Rdereference(dataset_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, dset_data[indx]);
+                    object_type = H5.H5Rget_obj_type(dataset_id, HDF5Constants.H5R_OBJECT, dset_data[indx]);
+                }
+                String[] obj_name = new String[1];
+                long name_size = 1;
+                if (object_type >= 0) {
+                    // Get the length of the name and retrieve the name.
+                    name_size = 1 + H5.H5Iget_name(object_id, obj_name, name_size);
+                }
+                if ((object_id >= 0) && (object_type >= -1)) {
+                    switch (H5G_obj.get(object_type)) {
+                    case H5G_GROUP:
+                        System.out.print("H5G_GROUP");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Gclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case H5G_DATASET:
+                        System.out.print("H5G_DATASET");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Dclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case H5G_TYPE:
+                        System.out.print("H5G_TYPE");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Tclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    default:
+                        System.out.print("UNHANDLED");
+                    }
+                }
+                // Print the name.
+                if (name_size > 1)
+                    System.out.println(": " + obj_name[0]);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        // Check if gzip compression is available and can be used for both
+        // compression and decompression. Normally we do not perform error
+        // checking in these examples for the sake of clarity, but in this
+        // case we will make an exception because this filter is an
+        // optional part of the hdf5 library.
+        H5Ex_T_ObjectReference.writeObjRef();
+        H5Ex_T_ObjectReference.readObjRef();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java b/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java
new file mode 100644
index 0000000..e354029
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java
@@ -0,0 +1,389 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write object references
+  to an attribute.  The program first creates objects in the
+  file and writes references to those objects to an
+  attribute with a dataspace of DIM0, then closes the file.
+  Next, it reopens the file, dereferences the references,
+  and outputs the names of their targets to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_ObjectReferenceAttribute {
+    private static String FILENAME = "H5Ex_T_ObjectReferenceAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static String DATASETNAME2 = "DS2";
+    private static String GROUPNAME = "G1";
+    private static final int DIM0 = 2;
+    private static final int RANK = 1;
+
+    // Values for the status of space allocation
+    enum H5G_obj {
+        H5G_UNKNOWN(HDF5Constants.H5O_TYPE_UNKNOWN), /* Unknown object type */
+        H5G_GROUP(HDF5Constants.H5O_TYPE_GROUP), /* Object is a group */
+        H5G_DATASET(HDF5Constants.H5O_TYPE_DATASET), /* Object is a dataset */
+        H5G_TYPE(HDF5Constants.H5O_TYPE_NAMED_DATATYPE); /* Object is a named data type */
+        private static final Map<Integer, H5G_obj> lookup = new HashMap<Integer, H5G_obj>();
+
+        static {
+            for (H5G_obj s : EnumSet.allOf(H5G_obj.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5G_obj(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5G_obj get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long group_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data = new byte[DIM0][8];
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME2, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                if (dataset_id >= 0)
+                    H5.H5Dclose(dataset_id);
+                dataset_id = -1;
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a group in the file.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, GROUPNAME, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+            group_id = -1;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create references to the previously created objects. Passing -1
+        // as space_id causes this parameter to be ignored. Other values
+        // besides valid dataspaces result in an error.
+        try {
+            if (file_id >= 0) {
+                byte rbuf0[] = H5.H5Rcreate(file_id, GROUPNAME, HDF5Constants.H5R_OBJECT, -1);
+                byte rbuf1[] = H5.H5Rcreate(file_id, DATASETNAME2, HDF5Constants.H5R_OBJECT, -1);
+                for (int indx = 0; indx < 8; indx++) {
+                    dset_data[0][indx] = rbuf0[indx];
+                    dset_data[1][indx] = rbuf1[indx];
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace to serve as the parent
+        // for the attribute.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, HDF5Constants.H5T_STD_REF_OBJ, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Awrite(attribute_id, HDF5Constants.H5T_STD_REF_OBJ, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        int object_type = -1;
+        long object_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate array of pointers to two-dimensional arrays (the
+        // elements of the dataset.
+        dset_data = new byte[(int) dims[0]][8];
+
+        // Read data.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aread(attribute_id, HDF5Constants.H5T_STD_REF_OBJ, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(ATTRIBUTENAME + "[" + indx + "]:");
+            System.out.print("  ->");
+            // Open the referenced object, get its name and type.
+            try {
+                if (dataset_id >= 0) {
+                    object_id = H5.H5Rdereference(dataset_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, dset_data[indx]);
+                    object_type = H5.H5Rget_obj_type(dataset_id, HDF5Constants.H5R_OBJECT, dset_data[indx]);
+                }
+                String[] obj_name = new String[1];
+                long name_size = 1;
+                if (object_type >= 0) {
+                    // Get the length of the name and retrieve the name.
+                    name_size = 1 + H5.H5Iget_name(object_id, obj_name, name_size);
+                }
+                if ((object_id >= 0) && (object_type >= -1)) {
+                    switch (H5G_obj.get(object_type)) {
+                    case H5G_GROUP:
+                        System.out.print("H5G_GROUP");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Gclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case H5G_DATASET:
+                        System.out.print("H5G_DATASET");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Dclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    case H5G_TYPE:
+                        System.out.print("H5G_TYPE");
+                        try {
+                            if (object_id >= 0)
+                                H5.H5Tclose(object_id);
+                        }
+                        catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        break;
+                    default:
+                        System.out.print("UNHANDLED");
+                    }
+                }
+                // Print the name.
+                if (name_size > 1)
+                    System.out.println(": " + obj_name[0]);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_ObjectReferenceAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_ObjectReferenceAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_Opaque.java b/java/examples/datatypes/H5Ex_T_Opaque.java
new file mode 100644
index 0000000..eb45686
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_Opaque.java
@@ -0,0 +1,270 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write opaque datatypes
+  to a dataset.  The program first writes opaque data to a
+  dataset with a dataspace of DIM0, then closes the file.
+  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_Opaque {
+    private static String FILENAME = "H5Ex_T_Opaque.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int LEN = 7;
+    private static final int RANK = 1;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long datatype_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        byte[] dset_data = new byte[DIM0 * LEN];
+        byte[] str_data = { 'O', 'P', 'A', 'Q', 'U', 'E' };
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++) {
+            for (int jndx = 0; jndx < LEN - 1; jndx++)
+                dset_data[jndx + indx * LEN] = str_data[jndx];
+            dset_data[LEN - 1 + indx * LEN] = (byte) (indx + '0');
+        }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create opaque datatype and set the tag to something appropriate.
+        // For this example we will write and view the data as a character
+        // array.
+        try {
+            datatype_id = H5.H5Tcreate(HDF5Constants.H5T_OPAQUE, (long)LEN);
+            if (datatype_id >= 0)
+                H5.H5Tset_tag(datatype_id, "Character array");
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset and write the integer data to it. In this
+        // example we will save the data as 64 bit big endian integers,
+        // regardless of the native integer type. The HDF5 library
+        // automatically converts between different integer types.
+        try {
+            if ((file_id >= 0) && (datatype_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, datatype_id, dataspace_id, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the opaque data to the dataset.
+        try {
+            if ((dataset_id >= 0) && (datatype_id >= 0))
+                H5.H5Dwrite(dataset_id, datatype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (datatype_id >= 0)
+                H5.H5Tclose(datatype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long datatype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long type_len = -1;
+        long[] dims = { DIM0 };
+        byte[] dset_data;
+        String tag_name = null;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get datatype and properties for the datatype.
+        try {
+            if (dataset_id >= 0)
+                datatype_id = H5.H5Dget_type(dataset_id);
+            if (datatype_id >= 0) {
+                type_len = H5.H5Tget_size(datatype_id);
+                tag_name = H5.H5Tget_tag(datatype_id);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate buffer.
+        dset_data = new byte[(int) (dims[0] * type_len)];
+
+        // Read data.
+        try {
+            if ((dataset_id >= 0) && (datatype_id >= 0))
+                H5.H5Dread(dataset_id, datatype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Datatype tag for " + DATASETNAME + " is: \"" + tag_name + "\"");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(DATASETNAME + "[" + indx + "]: ");
+            for (int jndx = 0; jndx < type_len; jndx++) {
+                char temp = (char) dset_data[jndx + indx * (int)type_len];
+                System.out.print(temp);
+            }
+            System.out.println("");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (datatype_id >= 0)
+                H5.H5Tclose(datatype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_Opaque.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_Opaque.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_OpaqueAttribute.java b/java/examples/datatypes/H5Ex_T_OpaqueAttribute.java
new file mode 100644
index 0000000..e42bfe8
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_OpaqueAttribute.java
@@ -0,0 +1,307 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write opaque datatypes
+  to an attribute.  The program first writes opaque data to
+  an attribute with a dataspace of DIM0, then closes the
+  file. Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_OpaqueAttribute {
+    private static String FILENAME = "H5Ex_T_OpaqueAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int LEN = 7;
+    private static final int RANK = 1;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long datatype_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        byte[] dset_data = new byte[DIM0 * LEN];
+        byte[] str_data = { 'O', 'P', 'A', 'Q', 'U', 'E' };
+
+        // Initialize data.
+        for (int indx = 0; indx < DIM0; indx++) {
+            for (int jndx = 0; jndx < LEN - 1; jndx++)
+                dset_data[jndx + indx * LEN] = str_data[jndx];
+            dset_data[LEN - 1 + indx * LEN] = (byte) (indx + '0');
+        }
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create opaque datatype and set the tag to something appropriate.
+        // For this example we will write and view the data as a character
+        // array.
+        try {
+            datatype_id = H5.H5Tcreate(HDF5Constants.H5T_OPAQUE, (long)LEN);
+            if (datatype_id >= 0)
+                H5.H5Tset_tag(datatype_id, "Character array");
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute and write the array data to it.
+        try {
+            if ((dataset_id >= 0) && (datatype_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, datatype_id, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if ((attribute_id >= 0) && (datatype_id >= 0))
+                H5.H5Awrite(attribute_id, datatype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (datatype_id >= 0)
+                H5.H5Tclose(datatype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long datatype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long type_len = -1;
+        long[] dims = { DIM0 };
+        byte[] dset_data;
+        String tag_name = null;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get datatype and properties for the datatype.
+        try {
+            if (attribute_id >= 0)
+                datatype_id = H5.H5Aget_type(attribute_id);
+            if (datatype_id >= 0) {
+                type_len = H5.H5Tget_size(datatype_id);
+                tag_name = H5.H5Tget_tag(datatype_id);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate buffer.
+        dset_data = new byte[(int) (dims[0] * type_len)];
+
+        // Read data.
+        try {
+            if ((attribute_id >= 0) && (datatype_id >= 0))
+                H5.H5Aread(attribute_id, datatype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        System.out.println("Datatype tag for " + ATTRIBUTENAME + " is: \"" + tag_name + "\"");
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.print(ATTRIBUTENAME + "[" + indx + "]: ");
+            for (int jndx = 0; jndx < type_len; jndx++) {
+                char temp = (char) dset_data[jndx + indx * (int)type_len];
+                System.out.print(temp);
+            }
+            System.out.println("");
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (datatype_id >= 0)
+                H5.H5Tclose(datatype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_OpaqueAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_OpaqueAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_String.java b/java/examples/datatypes/H5Ex_T_String.java
new file mode 100644
index 0000000..469172d
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_String.java
@@ -0,0 +1,311 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write string datatypes
+  to a dataset.  The program first writes strings to a
+  dataset with a dataspace of DIM0, then closes the file.
+  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_String {
+    private static String FILENAME = "H5Ex_T_String.h5";
+    private static String DATASETNAME = "DS1";
+    private static final int DIM0 = 4;
+    private static final int SDIM = 8;
+    private static final int RANK = 1;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long memtype_id = -1;
+        long filetype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data = new byte[DIM0][SDIM];
+        StringBuffer[] str_data = { new StringBuffer("Parting"), new StringBuffer("is such"),
+                new StringBuffer("sweet"), new StringBuffer("sorrow.") };
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create file and memory datatypes. For this example we will save
+        // the strings as FORTRAN strings, therefore they do not need space
+        // for the null terminator in the file.
+        try {
+            filetype_id = H5.H5Tcopy(HDF5Constants.H5T_FORTRAN_S1);
+            if (filetype_id >= 0)
+                H5.H5Tset_size(filetype_id, SDIM - 1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            memtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (memtype_id >= 0)
+                H5.H5Tset_size(memtype_id, SDIM);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset and write the string data to it.
+        try {
+            if ((file_id >= 0) && (filetype_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, filetype_id, dataspace_id, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            for (int indx = 0; indx < DIM0; indx++) {
+                for (int jndx = 0; jndx < SDIM; jndx++) {
+                    if (jndx < str_data[indx].length())
+                        dset_data[indx][jndx] = (byte) str_data[indx].charAt(jndx);
+                    else
+                        dset_data[indx][jndx] = 0;
+                }
+            }
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dwrite(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long sdim = 0;
+        long[] dims = { DIM0 };
+        byte[][] dset_data;
+        StringBuffer[] str_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype and its size.
+        try {
+            if (dataset_id >= 0)
+                filetype_id = H5.H5Dget_type(dataset_id);
+            if (filetype_id >= 0) {
+                sdim = H5.H5Tget_size(filetype_id);
+                sdim++; // Make room for null terminator
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (dataset_id >= 0)
+                dataspace_id = H5.H5Dget_space(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate space for data.
+        dset_data = new byte[(int) dims[0]][(int)sdim];
+        str_data = new StringBuffer[(int) dims[0]];
+
+        // Create the memory datatype.
+        try {
+            memtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (memtype_id >= 0)
+                H5.H5Tset_size(memtype_id, sdim);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read data.
+        try {
+            if ((dataset_id >= 0) && (memtype_id >= 0))
+                H5.H5Dread(dataset_id, memtype_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+            byte[] tempbuf = new byte[(int)sdim];
+            for (int indx = 0; indx < (int) dims[0]; indx++) {
+                for (int jndx = 0; jndx < sdim; jndx++) {
+                    tempbuf[jndx] = dset_data[indx][jndx];
+                }
+                str_data[indx] = new StringBuffer(new String(tempbuf).trim());
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(DATASETNAME + " [" + indx + "]: " + str_data[indx]);
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_String.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_String.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_StringAttribute.java b/java/examples/datatypes/H5Ex_T_StringAttribute.java
new file mode 100644
index 0000000..49361bc
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_StringAttribute.java
@@ -0,0 +1,351 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to read and write string datatypes
+  to an attribute.  The program first writes strings to an
+  attribute with a dataspace of DIM0, then closes the file.
+  Next, it reopens the file, reads back the data, and
+  outputs it to the screen.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_StringAttribute {
+    private static String FILENAME = "H5Ex_T_StringAttribute.h5";
+    private static String DATASETNAME = "DS1";
+    private static String ATTRIBUTENAME = "A1";
+    private static final int DIM0 = 4;
+    private static final int SDIM = 8;
+    private static final int RANK = 1;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long memtype_id = -1;
+        long filetype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims = { DIM0 };
+        byte[][] dset_data = new byte[DIM0][SDIM];
+        StringBuffer[] str_data = { new StringBuffer("Parting"), new StringBuffer("is such"),
+                new StringBuffer("sweet"), new StringBuffer("sorrow.") };
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create file and memory datatypes. For this example we will save
+        // the strings as FORTRAN strings, therefore they do not need space
+        // for the null terminator in the file.
+        try {
+            filetype_id = H5.H5Tcopy(HDF5Constants.H5T_FORTRAN_S1);
+            if (filetype_id >= 0)
+                H5.H5Tset_size(filetype_id, SDIM - 1);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            memtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (memtype_id >= 0)
+                H5.H5Tset_size(memtype_id, SDIM);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataset with a scalar dataspace.
+        try {
+            dataspace_id = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            if (dataspace_id >= 0) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, HDF5Constants.H5T_STD_I32LE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Sclose(dataspace_id);
+                dataspace_id = -1;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(RANK, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the attribute.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0) && (filetype_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, ATTRIBUTENAME, filetype_id, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            for (int indx = 0; indx < DIM0; indx++) {
+                for (int jndx = 0; jndx < SDIM; jndx++) {
+                    if (jndx < str_data[indx].length())
+                        dset_data[indx][jndx] = (byte) str_data[indx].charAt(jndx);
+                    else
+                        dset_data[indx][jndx] = 0;
+                }
+            }
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Awrite(attribute_id, memtype_id, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private static void ReadDataset() {
+        long file_id = -1;
+        long filetype_id = -1;
+        long memtype_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long sdim = 0;
+        long[] dims = { DIM0 };
+        byte[][] dset_data;
+        StringBuffer[] str_data;
+
+        // Open an existing file.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing dataset.
+        try {
+            if (file_id >= 0)
+                dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                attribute_id = H5.H5Aopen_by_name(dataset_id, ".", ATTRIBUTENAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get the datatype and its size.
+        try {
+            if (attribute_id >= 0)
+                filetype_id = H5.H5Aget_type(attribute_id);
+            if (filetype_id >= 0) {
+                sdim = H5.H5Tget_size(filetype_id);
+                sdim++; // Make room for null terminator
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Get dataspace and allocate memory for read buffer.
+        try {
+            if (attribute_id >= 0)
+                dataspace_id = H5.H5Aget_space(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sget_simple_extent_dims(dataspace_id, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Allocate space for data.
+        dset_data = new byte[(int) dims[0]][(int)sdim];
+        str_data = new StringBuffer[(int) dims[0]];
+
+        // Create the memory datatype.
+        try {
+            memtype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            if (memtype_id >= 0)
+                H5.H5Tset_size(memtype_id, sdim);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Read data.
+        try {
+            if ((attribute_id >= 0) && (memtype_id >= 0))
+                H5.H5Aread(attribute_id, memtype_id, dset_data);
+            byte[] tempbuf = new byte[(int)sdim];
+            for (int indx = 0; indx < (int) dims[0]; indx++) {
+                for (int jndx = 0; jndx < sdim; jndx++) {
+                    tempbuf[jndx] = dset_data[indx][jndx];
+                }
+                str_data[indx] = new StringBuffer(new String(tempbuf).trim());
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Output the data to the screen.
+        for (int indx = 0; indx < dims[0]; indx++) {
+            System.out.println(DATASETNAME + " [" + indx + "]: " + str_data[indx]);
+        }
+        System.out.println();
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the file type.
+        try {
+            if (filetype_id >= 0)
+                H5.H5Tclose(filetype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the mem type.
+        try {
+            if (memtype_id >= 0)
+                H5.H5Tclose(memtype_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_StringAttribute.CreateDataset();
+        // Now we begin the read section of this example. Here we assume
+        // the dataset and array have the same name and rank, but can have
+        // any size. Therefore we must allocate a new array to read in
+        // data using malloc().
+        H5Ex_T_StringAttribute.ReadDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/H5Ex_T_VLString.java b/java/examples/datatypes/H5Ex_T_VLString.java
new file mode 100644
index 0000000..c8892ba
--- /dev/null
+++ b/java/examples/datatypes/H5Ex_T_VLString.java
@@ -0,0 +1,138 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating and writing a VL string to a file.
+ ************************************************************/
+
+package examples.datatypes;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_T_VLString
+{
+    private static String FILENAME = "H5Ex_T_VLString.h5";
+    private static String DATASETNAME = "DS1";
+
+    private static void createDataset() {
+        long file_id = -1;
+        long type_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        int rank = 1;
+        String[] str_data = { "Parting", "is such", "sweet", "sorrow." };
+        long[] dims = { str_data.length };
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            type_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            H5.H5Tset_size(type_id, HDF5Constants.H5T_VARIABLE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create dataspace. Setting maximum size to NULL sets the maximum
+        // size to be the current size.
+        try {
+            dataspace_id = H5.H5Screate_simple(rank, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset and write the string data to it.
+        try {
+            if ((file_id >= 0) && (type_id >= 0) && (dataspace_id >= 0)) {
+                dataset_id = H5.H5Dcreate(file_id, DATASETNAME, type_id, dataspace_id, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the data to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite_VLStrings(dataset_id, type_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, str_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            H5.H5Sclose(dataspace_id);
+            H5.H5Tclose(type_id);
+            H5.H5Dclose(dataset_id);
+            H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void readDataset() {
+        long file_id = -1;
+        long type_id = -1;
+        long dataset_id = -1;
+        String[] str_data = { "", "", "", "" };
+
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            dataset_id = H5.H5Dopen(file_id, DATASETNAME, HDF5Constants.H5P_DEFAULT);
+            type_id = H5.H5Dget_type(dataset_id);
+            H5.H5Dread_VLStrings(dataset_id, type_id, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT,
+                    str_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        for (int indx = 0; indx < str_data.length; indx++)
+            System.out.println(DATASETNAME + " [" + indx + "]: " + str_data[indx]);
+
+        try {
+            H5.H5Tclose(type_id);
+            H5.H5Dclose(dataset_id);
+            H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_T_VLString.createDataset();
+        H5Ex_T_VLString.readDataset();
+    }
+
+}
diff --git a/java/examples/datatypes/Makefile.am b/java/examples/datatypes/Makefile.am
new file mode 100644
index 0000000..de2ea9d
--- /dev/null
+++ b/java/examples/datatypes/Makefile.am
@@ -0,0 +1,78 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+pkgpath = examples/datatypes
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+
+jarfile = jar$(PACKAGE_TARNAME)datatypes.jar
+
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+TESTPACKAGE = 
+
+noinst_JAVA = \
+    H5Ex_T_Array.java \
+    H5Ex_T_ArrayAttribute.java \
+    H5Ex_T_Bit.java \
+    H5Ex_T_BitAttribute.java \
+    H5Ex_T_Commit.java \
+    H5Ex_T_Compound.java \
+    H5Ex_T_CompoundAttribute.java \
+    H5Ex_T_Float.java \
+    H5Ex_T_FloatAttribute.java \
+    H5Ex_T_Integer.java \
+    H5Ex_T_IntegerAttribute.java \
+    H5Ex_T_ObjectReference.java \
+    H5Ex_T_ObjectReferenceAttribute.java \
+    H5Ex_T_Opaque.java \
+    H5Ex_T_OpaqueAttribute.java \
+    H5Ex_T_String.java \
+    H5Ex_T_StringAttribute.java \
+    H5Ex_T_VLString.java
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+noinst_DATA = $(jarfile)
+
+.PHONY: classes
+
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/examples/datatypes/Makefile.in b/java/examples/datatypes/Makefile.in
new file mode 100644
index 0000000..efeaa02
--- /dev/null
+++ b/java/examples/datatypes/Makefile.in
@@ -0,0 +1,1309 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(TEST_SCRIPT)
+subdir = java/examples/datatypes
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES = runExample.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__java_sources = $(noinst_JAVA)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/runExample.sh.in \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+JAVAROOT = .classes
+pkgpath = examples/datatypes
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+jarfile = jar$(PACKAGE_TARNAME)datatypes.jar
+TESTPACKAGE = 
+noinst_JAVA = \
+    H5Ex_T_Array.java \
+    H5Ex_T_ArrayAttribute.java \
+    H5Ex_T_Bit.java \
+    H5Ex_T_BitAttribute.java \
+    H5Ex_T_Commit.java \
+    H5Ex_T_Compound.java \
+    H5Ex_T_CompoundAttribute.java \
+    H5Ex_T_Float.java \
+    H5Ex_T_FloatAttribute.java \
+    H5Ex_T_Integer.java \
+    H5Ex_T_IntegerAttribute.java \
+    H5Ex_T_ObjectReference.java \
+    H5Ex_T_ObjectReferenceAttribute.java \
+    H5Ex_T_Opaque.java \
+    H5Ex_T_OpaqueAttribute.java \
+    H5Ex_T_String.java \
+    H5Ex_T_StringAttribute.java \
+    H5Ex_T_VLString.java
+
+noinst_DATA = $(jarfile)
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/examples/datatypes/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/examples/datatypes/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+runExample.sh: $(top_builddir)/config.status $(srcdir)/runExample.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classnoinst.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+
+clean-noinstJAVA:
+	-rm -f *.class classnoinst.stamp
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all $(check_SCRIPTS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile classnoinst.stamp $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-noinstJAVA mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+	clean-generic clean-libtool clean-noinstJAVA cscopelist-am \
+	ctags-am distclean distclean-generic distclean-libtool distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: classes
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/datatypes/runExample.sh.in b/java/examples/datatypes/runExample.sh.in
new file mode 100644
index 0000000..9ed3954
--- /dev/null
+++ b/java/examples/datatypes/runExample.sh.in
@@ -0,0 +1,408 @@
+#! /bin/sh
+#
+# 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.
+#
+
+top_builddir=@top_builddir@
+top_srcdir=@top_srcdir@
+srcdir=@srcdir@
+
+TESTNAME=EX_Datatypes
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Set up default variable values if not supplied by the user.
+RM='rm -rf'
+CMP='cmp'
+DIFF='diff -c'
+CP='cp'
+DIRNAME='dirname'
+LS='ls'
+AWK='awk'
+
+nerrors=0
+
+# where the libs exist
+HDFLIB_HOME="$top_srcdir/java/lib"
+BLDLIBDIR="./lib"
+BLDDIR="."
+HDFTEST_HOME="$top_srcdir/java/examples/datatypes"
+JARFILE=jar at PACKAGE_TARNAME@- at PACKAGE_VERSION@.jar
+TESTJARFILE=jar at PACKAGE_TARNAME@datatypes.jar
+test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR
+
+######################################################################
+# library files
+# --------------------------------------------------------------------
+# All the library files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_LIBRARY_FILES="
+$HDFLIB_HOME/slf4j-api-1.7.5.jar
+$HDFLIB_HOME/ext/slf4j-simple-1.7.5.jar
+$top_builddir/src/.libs/libhdf5.*
+$top_builddir/java/src/jni/.libs/libhdf5_java.*
+$top_builddir/java/src/$JARFILE
+"
+LIST_DATA_FILES="
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Array.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_ArrayAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Bit.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_BitAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Commit.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Compound.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_CompoundAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Float.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_FloatAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Integer.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_IntegerAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_ObjectReference.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_Opaque.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_OpaqueAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_String.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_StringAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.datatypes.H5Ex_T_VLString.txt
+"
+
+#
+# copy files from source dirs to test dir
+#
+COPY_LIBFILES="$LIST_LIBRARY_FILES"
+
+COPY_LIBFILES_TO_BLDLIBDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_LIBFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDLIBDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_LIBFILES_AND_BLDLIBDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDLIBDIR
+    fi
+}
+
+COPY_DATAFILES="$LIST_DATA_FILES"
+
+COPY_DATAFILES_TO_BLDDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_DATAFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_DATAFILES_AND_BLDDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDDIR/*.txt
+        $RM $BLDDIR/*.out
+    fi
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# where Java is installed (requires jdk1.7.x)
+JAVAEXE=@JAVA@
+JAVAEXEFLAGS=@H5_JAVAFLAGS@
+
+###############################################################################
+#            DO NOT MODIFY BELOW THIS LINE
+###############################################################################
+
+# prepare for test
+COPY_LIBFILES_TO_BLDLIBDIR
+COPY_DATAFILES_TO_BLDDIR
+
+CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/slf4j-api-1.7.5.jar:"$BLDLIBDIR"/slf4j-simple-1.7.5.jar:"$TESTJARFILE""
+
+TEST=/usr/bin/test
+if [ ! -x /usr/bin/test ]
+then
+TEST=`which test`
+fi
+
+if $TEST -z "$CLASSPATH"; then
+        CLASSPATH=""
+fi
+CLASSPATH=$CPATH":"$CLASSPATH
+export CLASSPATH
+
+if $TEST -n "$JAVAPATH" ; then
+        PATH=$JAVAPATH":"$PATH
+        export PATH
+fi
+
+if $TEST -e /bin/uname; then
+   os_name=`/bin/uname -s`
+elif $TEST -e /usr/bin/uname; then
+   os_name=`/usr/bin/uname -s`
+else
+   os_name=unknown
+fi
+
+if $TEST -z "$LD_LIBRARY_PATH" ; then
+        LD_LIBRARY_PATH=""
+fi
+
+case  $os_name in
+    Darwin)
+    DYLD_LIBRARY_PATH=$BLDLIBDIR:$DYLD_LIBRARY_PATH
+    export DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+    ;;
+    *)
+    LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH
+    ;;
+esac
+
+export LD_LIBRARY_PATH
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Array"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Array > H5Ex_T_Array.out)
+if diff H5Ex_T_Array.out examples.datatypes.H5Ex_T_Array.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Array"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Array"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ArrayAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ArrayAttribute > H5Ex_T_ArrayAttribute.out)
+if diff H5Ex_T_ArrayAttribute.out examples.datatypes.H5Ex_T_ArrayAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_ArrayAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_ArrayAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Bit"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Bit > H5Ex_T_Bit.out)
+if diff H5Ex_T_Bit.out examples.datatypes.H5Ex_T_Bit.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Bit"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Bit"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_BitAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_BitAttribute > H5Ex_T_BitAttribute.out)
+if diff H5Ex_T_BitAttribute.out examples.datatypes.H5Ex_T_BitAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_BitAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_BitAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Commit"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Commit > H5Ex_T_Commit.out)
+if diff H5Ex_T_Commit.out examples.datatypes.H5Ex_T_Commit.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Commit"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Commit"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Compound"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Compound > H5Ex_T_Compound.out)
+if diff H5Ex_T_Compound.out examples.datatypes.H5Ex_T_Compound.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Compound"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Compound"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_CompoundAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_CompoundAttribute > H5Ex_T_CompoundAttribute.out)
+if diff H5Ex_T_CompoundAttribute.out examples.datatypes.H5Ex_T_CompoundAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_CompoundAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_CompoundAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Float"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Float > H5Ex_T_Float.out)
+if diff H5Ex_T_Float.out examples.datatypes.H5Ex_T_Float.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Float"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Float"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_FloatAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_FloatAttribute > H5Ex_T_FloatAttribute.out)
+if diff H5Ex_T_FloatAttribute.out examples.datatypes.H5Ex_T_FloatAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_FloatAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_FloatAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Integer"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Integer > H5Ex_T_Integer.out)
+if diff H5Ex_T_Integer.out examples.datatypes.H5Ex_T_Integer.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Integer"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Integer"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_IntegerAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_IntegerAttribute > H5Ex_T_IntegerAttribute.out)
+if diff H5Ex_T_IntegerAttribute.out examples.datatypes.H5Ex_T_IntegerAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_IntegerAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_IntegerAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ObjectReference"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ObjectReference > H5Ex_T_ObjectReference.out)
+if diff H5Ex_T_ObjectReference.out examples.datatypes.H5Ex_T_ObjectReference.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_ObjectReference"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_ObjectReference"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ObjectReferenceAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_ObjectReferenceAttribute > H5Ex_T_ObjectReferenceAttribute.out)
+if diff H5Ex_T_ObjectReferenceAttribute.out examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_ObjectReferenceAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_ObjectReferenceAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Opaque"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_Opaque > H5Ex_T_Opaque.out)
+if diff H5Ex_T_Opaque.out examples.datatypes.H5Ex_T_Opaque.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_Opaque"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_Opaque"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_OpaqueAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_OpaqueAttribute > H5Ex_T_OpaqueAttribute.out)
+if diff H5Ex_T_OpaqueAttribute.out examples.datatypes.H5Ex_T_OpaqueAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_OpaqueAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_OpaqueAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_String"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_String > H5Ex_T_String.out)
+if diff H5Ex_T_String.out examples.datatypes.H5Ex_T_String.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_String"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_String"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_StringAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_StringAttribute > H5Ex_T_StringAttribute.out)
+if diff H5Ex_T_StringAttribute.out examples.datatypes.H5Ex_T_StringAttribute.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_StringAttribute"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_StringAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_VLString"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.datatypes.H5Ex_T_VLString > H5Ex_T_VLString.out)
+if diff H5Ex_T_VLString.out examples.datatypes.H5Ex_T_VLString.txt > /dev/null; then
+    echo "  PASSED      datatypes.H5Ex_T_VLString"
+else
+    echo "**FAILED**    datatypes.H5Ex_T_VLString"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+# Clean up temporary files/directories
+CLEAN_LIBFILES_AND_BLDLIBDIR
+CLEAN_DATAFILES_AND_BLDDIR
+
+# Report test results and exit
+if test $nerrors -eq 0 ; then
+    echo "All $TESTNAME tests passed."
+    exit $EXIT_SUCCESS
+else
+    echo "$TESTNAME tests failed with $nerrors errors."
+    exit $EXIT_FAILURE
+fi
diff --git a/java/examples/groups/CMakeLists.txt b/java/examples/groups/CMakeLists.txt
new file mode 100644
index 0000000..0849f0c
--- /dev/null
+++ b/java/examples/groups/CMakeLists.txt
@@ -0,0 +1,138 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDFJAVA_EXAMPLES_GROUPS Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_JNI_BINARY_DIR}
+    ${HDF5_JAVA_HDF5_LIB_DIR}
+)
+
+set (HDF_JAVA_EXAMPLES
+    H5Ex_G_Create
+    H5Ex_G_Iterate
+    H5Ex_G_Compact
+    H5Ex_G_Corder
+    H5Ex_G_Intermediate
+    H5Ex_G_Phase
+    H5Ex_G_Visit
+)
+
+if (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+else (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+endif (WIN32)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
+endforeach (CMAKE_INCLUDE_PATH)
+
+foreach (example ${HDF_JAVA_EXAMPLES})
+  file (WRITE ${PROJECT_BINARY_DIR}/${example}_Manifest.txt
+  "Main-Class: examples.groups.${example}
+"
+  )
+  add_jar (${example} MANIFEST ${PROJECT_BINARY_DIR}/${example}_Manifest.txt ${example}.java)
+  get_target_property (${example}_JAR_FILE ${example} JAR_FILE)
+#  install_jar (${example} ${HJAVA_INSTALL_DATA_DIR}/examples examples)
+  get_target_property (${example}_CLASSPATH ${example} CLASSDIR)
+  add_dependencies (${example} ${HDF5_JAVA_HDF5_LIB_TARGET})
+endforeach (example ${HDF_JAVA_EXAMPLES})
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_NOP_JAR}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (HDFJAVA_JAR ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${HDFJAVA_JAR}")
+endforeach (HDFJAVA_JAR)
+
+set (HDF_JAVA_TEST_FILES
+    h5ex_g_iterate.h5
+    h5ex_g_visit.h5
+)
+
+foreach (h5_file ${HDF_JAVA_TEST_FILES})
+  set (dest "${PROJECT_BINARY_DIR}/${h5_file}")
+  #message (STATUS " Copying ${h5_file}")
+  add_custom_command (
+      TARGET     H5Ex_G_Visit
+      POST_BUILD
+      COMMAND    ${CMAKE_COMMAND}
+      ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/${h5_file} ${dest}
+  )
+endforeach (h5_file ${HDF_JAVA_TEST_FILES})
+
+MACRO (ADD_H5_TEST resultfile resultcode)
+  add_test (
+      NAME JAVA_groups-${resultfile}
+      COMMAND "${CMAKE_COMMAND}"
+          -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
+          -D "TEST_PROGRAM=examples.groups.${resultfile}"
+          -D "TEST_ARGS:STRING=${ARGN}"
+          -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${resultfile}_JAR_FILE}"
+          -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
+          -D "TEST_FOLDER=${HDFJAVA_EXAMPLES_BINARY_DIR}"
+          -D "TEST_OUTPUT=groups/${resultfile}.out"
+          -D "TEST_EXPECT=${resultcode}"
+          -D "TEST_REFERENCE=groups/${resultfile}.txt"
+          -P "${HDF_RESOURCES_DIR}/jrunTest.cmake"
+  )
+  if (NOT "${last_test}" STREQUAL "")
+    set_tests_properties (JAVA_groups-${resultfile} PROPERTIES DEPENDS ${last_test})
+  endif (NOT "${last_test}" STREQUAL "")
+  set (last_test "JAVA_groups-${resultfile}")
+ENDMACRO (ADD_H5_TEST file)
+
+if (BUILD_TESTING)
+  foreach (example ${HDF_JAVA_EXAMPLES})
+    add_test (
+        NAME JAVA_groups-${example}-clearall-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E remove
+            ${example}.out
+            ${example}.out.err
+    )
+    if (NOT "${last_test}" STREQUAL "")
+      set_tests_properties (JAVA_groups-${example}-clearall-objects PROPERTIES DEPENDS ${last_test})
+    endif (NOT "${last_test}" STREQUAL "")
+    set (last_test "JAVA_groups-${example}-clearall-objects")
+    if (NOT ${example} STREQUAL "H5Ex_G_Iterate" AND NOT ${example} STREQUAL "H5Ex_G_Visit")
+      if (${example} STREQUAL "H5Ex_G_Compact")
+        add_test (
+            NAME JAVA_groups-${example}-clearall-h5s
+            COMMAND    ${CMAKE_COMMAND}
+                -E remove
+                ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}1.h5
+                ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}2.h5
+        )
+      else (${example} STREQUAL "H5Ex_G_Compact")
+        add_test (
+            NAME JAVA_groups-${example}-clearall-h5s
+            COMMAND    ${CMAKE_COMMAND}
+                -E remove
+                ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
+        )
+      endif (${example} STREQUAL "H5Ex_G_Compact")
+      if (NOT "${last_test}" STREQUAL "")
+        set_tests_properties (JAVA_groups-${example}-clearall-h5s PROPERTIES DEPENDS ${last_test})
+      endif (NOT "${last_test}" STREQUAL "")
+      set (last_test "JAVA_groups-${example}-clearall-h5s")
+    endif (NOT ${example} STREQUAL "H5Ex_G_Iterate" AND NOT ${example} STREQUAL "H5Ex_G_Visit")
+    add_test (
+        NAME JAVA_groups-${example}-copy-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E copy_if_different
+            ${HDFJAVA_EXAMPLES_SOURCE_DIR}/testfiles/examples.groups.${example}.txt
+            ${HDFJAVA_EXAMPLES_GROUPS_BINARY_DIR}/${example}.txt
+    )
+    if (NOT "${last_test}" STREQUAL "")
+      set_tests_properties (JAVA_groups-${example}-copy-objects PROPERTIES DEPENDS ${last_test})
+    endif (NOT "${last_test}" STREQUAL "")
+    set (last_test "JAVA_groups-${example}-copy-objects")
+    ADD_H5_TEST (${example} 0)
+  endforeach (example ${HDF_JAVA_EXAMPLES})
+endif (BUILD_TESTING)
diff --git a/java/examples/groups/H5Ex_G_Compact.java b/java/examples/groups/H5Ex_G_Compact.java
new file mode 100644
index 0000000..ca9b6c8
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Compact.java
@@ -0,0 +1,266 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating a file and print the storage layout.
+ ************************************************************/
+
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public class H5Ex_G_Compact {
+
+    private static final String FILE1 = "H5Ex_G_Compact1.h5";
+    private static final String FILE2 = "H5Ex_G_Compact2.h5";
+    private static final String GROUP = "G1";
+
+    enum H5G_storage {
+        H5G_STORAGE_TYPE_UNKNOWN(-1),
+        H5G_STORAGE_TYPE_SYMBOL_TABLE(0),
+        H5G_STORAGE_TYPE_COMPACT(1),
+        H5G_STORAGE_TYPE_DENSE(2);
+
+        private static final Map<Integer, H5G_storage> lookup = new HashMap<Integer, H5G_storage>();
+
+        static {
+            for (H5G_storage s : EnumSet.allOf(H5G_storage.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5G_storage(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5G_storage get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    public static void CreateGroup() {
+        long file_id = -1;
+        long group_id = -1;
+        long fapl_id = -1;
+        H5G_info_t ginfo;
+        long size;
+
+        // Create file 1. This file will use original format groups.
+        try {
+            file_id = H5.H5Fcreate (FILE1, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Create a group in the file1.
+        try {
+            if(file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, GROUP, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Obtain the group info and print the group storage type.
+        try {
+            if(group_id >= 0) {
+                ginfo = H5.H5Gget_info(group_id);
+                System.out.print("Group storage type for " + FILE1 + " is: ");
+                switch (H5G_storage.get(ginfo.storage_type)) {
+                case H5G_STORAGE_TYPE_COMPACT:
+                    System.out.println("H5G_STORAGE_TYPE_COMPACT"); // New compact format
+                    break;
+                case H5G_STORAGE_TYPE_DENSE:
+                    System.out.println("H5G_STORAGE_TYPE_DENSE"); // New dense (indexed) format
+                    break;
+                case H5G_STORAGE_TYPE_SYMBOL_TABLE:
+                    System.out.println("H5G_STORAGE_TYPE_SYMBOL_TABLE"); // Original format
+                    break;
+                case H5G_STORAGE_TYPE_UNKNOWN:
+                    System.out.println("H5G_STORAGE_TYPE_UNKNOWN");
+                    break;
+                default:
+                    System.out.println("Storage Type Invalid");
+                    break;
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // close the file 1.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Re-open file 1. Need to get the correct file size.
+        try {
+            file_id = H5.H5Fopen(FILE1, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Obtain and print the file size.
+        try {
+            if (file_id >= 0) {
+                size = H5.H5Fget_filesize(file_id);
+                System.out.println("File size for " + FILE1 + " is: " + size + " bytes");
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close FILE1.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set file access property list to allow the latest file format.
+        // This will allow the library to create new compact format groups.
+        try {
+            fapl_id = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+            if (fapl_id >= 0)
+                H5.H5Pset_libver_bounds(fapl_id, HDF5Constants.H5F_LIBVER_LATEST, HDF5Constants.H5F_LIBVER_LATEST);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        System.out.println();
+        // Create file 2 using the new file access property list.
+        try {
+            file_id = H5.H5Fcreate(FILE2, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT, fapl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        // Create group in file2.
+        try {
+            if(file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, GROUP, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Obtain the group info and print the group storage type.
+        try {
+            if (group_id >= 0) {
+                ginfo = H5.H5Gget_info(group_id);
+                System.out.print("Group storage type for " + FILE2 + " is: ");
+                switch (H5G_storage.get(ginfo.storage_type)) {
+                case H5G_STORAGE_TYPE_COMPACT:
+                    System.out.println("H5G_STORAGE_TYPE_COMPACT"); // New compact format
+                    break;
+                case H5G_STORAGE_TYPE_DENSE:
+                    System.out.println("H5G_STORAGE_TYPE_DENSE"); // New dense (indexed) format
+                    break;
+                case H5G_STORAGE_TYPE_SYMBOL_TABLE:
+                    System.out.println("H5G_STORAGE_TYPE_SYMBOL_TABLE"); // Original format
+                    break;
+                case H5G_STORAGE_TYPE_UNKNOWN:
+                    System.out.println("H5G_STORAGE_TYPE_UNKNOWN");
+                    break;
+                default:
+                    System.out.println("Storage Type Invalid");
+                    break;
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // close the file 2.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Re-open file 2. Needed to get the correct file size.
+        try {
+            file_id = H5.H5Fopen(FILE2, HDF5Constants.H5F_ACC_RDONLY, fapl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Obtain and print the file size.
+        try {
+            if (file_id >= 0) {
+                size = H5.H5Fget_filesize(file_id);
+                System.out.println("File size for " + FILE2 + " is: " + size + " bytes");
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close FILE2.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_G_Compact.CreateGroup();
+    }
+}
diff --git a/java/examples/groups/H5Ex_G_Corder.java b/java/examples/groups/H5Ex_G_Corder.java
new file mode 100644
index 0000000..95790bf
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Corder.java
@@ -0,0 +1,121 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/************************************************************
+    Creating a file with creation properties and traverse the
+    groups in alpabetical and creation order.
+ ************************************************************/
+
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+public class H5Ex_G_Corder {
+    private static String FILE = "H5Ex_G_Corder.h5";
+
+    private static void CreateGroup() throws Exception {
+        long file_id = -1;
+        long group_id = -1;
+        long subgroup_id = -1;
+        long gcpl_id = -1;
+        int status;
+        H5G_info_t ginfo;
+        int i;
+        String name;
+
+        try {
+            // Create a new file using default properties.
+            file_id = H5.H5Fcreate(FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+
+            // Create group creation property list and enable link creation order tracking.
+            gcpl_id = H5.H5Pcreate(HDF5Constants.H5P_GROUP_CREATE);
+            status = H5.H5Pset_link_creation_order(gcpl_id, HDF5Constants.H5P_CRT_ORDER_TRACKED
+                    + HDF5Constants.H5P_CRT_ORDER_INDEXED);
+
+            // Create primary group using the property list.
+            if (status >= 0)
+                group_id = H5.H5Gcreate(file_id, "index_group", HDF5Constants.H5P_DEFAULT, gcpl_id,
+                        HDF5Constants.H5P_DEFAULT);
+
+            try {
+                /*
+                 * Create subgroups in the primary group. These will be tracked by creation order. Note that these
+                 * groups do not have to have the creation order tracking property set.
+                 */
+                subgroup_id = H5.H5Gcreate(group_id, "H", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+                status = H5.H5Gclose(subgroup_id);
+                subgroup_id = H5.H5Gcreate(group_id, "D", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+                status = H5.H5Gclose(subgroup_id);
+                subgroup_id = H5.H5Gcreate(group_id, "F", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+                status = H5.H5Gclose(subgroup_id);
+                subgroup_id = H5.H5Gcreate(group_id, "5", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+                status = H5.H5Gclose(subgroup_id);
+
+                // Get group info.
+                ginfo = H5.H5Gget_info(group_id);
+
+                // Traverse links in the primary group using alphabetical indices (H5_INDEX_NAME).
+                System.out.println("Traversing group using alphabetical indices:");
+                for (i = 0; i < ginfo.nlinks; i++) {
+                    // Retrieve the name of the ith link in a group
+                    name = H5.H5Lget_name_by_idx(group_id, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC,
+                            i, HDF5Constants.H5P_DEFAULT);
+                    System.out.println("Index " + i + ": " + name);
+                }
+
+                // Traverse links in the primary group by creation order (H5_INDEX_CRT_ORDER).
+                System.out.println("Traversing group using creation order indices:");
+                for (i = 0; i < ginfo.nlinks; i++) {
+                    // Retrieve the name of the ith link in a group
+                    name = H5.H5Lget_name_by_idx(group_id, ".", HDF5Constants.H5_INDEX_CRT_ORDER,
+                            HDF5Constants.H5_ITER_INC, i, HDF5Constants.H5P_DEFAULT);
+                    System.out.println("Index " + i + ": " + name);
+                }
+
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        finally {
+            // Close and release resources.
+            if (gcpl_id >= 0)
+                H5.H5Pclose(gcpl_id);
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+    }
+
+    public static void main(String[] args) {
+        try {
+            H5Ex_G_Corder.CreateGroup();
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Create.java b/java/examples/groups/H5Ex_G_Create.java
new file mode 100644
index 0000000..1902d86
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Create.java
@@ -0,0 +1,94 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create, open, and close a group.
+ ************************************************************/
+
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5Ex_G_Create {
+    private static String FILENAME = "H5Ex_G_Create.h5";
+    private static String GROUPNAME = "G1";
+
+    private static void CreateGroup() {
+        long file_id = -1;
+        long group_id = -1;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a group in the file.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, "/" + GROUPNAME, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group. The handle "group" can no longer be used.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Re-open the group, obtaining a new handle.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gopen(file_id, "/" + GROUPNAME, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_G_Create.CreateGroup();
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Intermediate.java b/java/examples/groups/H5Ex_G_Intermediate.java
new file mode 100644
index 0000000..a3d620b
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Intermediate.java
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to create intermediate groups with
+ a single call to H5Gcreate.
+ ************************************************************/
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5O_iterate_cb;
+import hdf.hdf5lib.callbacks.H5O_iterate_t;
+import hdf.hdf5lib.structs.H5O_info_t;
+
+import java.util.ArrayList;
+
+public class H5Ex_G_Intermediate {
+
+    private static String FILE = "H5Ex_G_Intermediate.h5";
+
+    private void CreateGroup() throws Exception {
+
+        long file_id = -1;
+        long group_id = -1;
+        long gcpl_id = -1;
+
+        try {
+            // Create a new file_id using the default properties.
+            file_id = H5.H5Fcreate(FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+
+            // Create group_id creation property list and set it to allow creation of intermediate group_ids.
+            gcpl_id = H5.H5Pcreate(HDF5Constants.H5P_LINK_CREATE);
+            H5.H5Pset_create_intermediate_group(gcpl_id, true);
+
+            /*
+             * Create the group_id /G1/G2/G3. Note that /G1 and /G1/G2 do not exist yet. This call would cause an error
+             * if we did not use the previously created property list.
+             */
+            group_id = H5
+                    .H5Gcreate(file_id, "/G1/G2/G3", gcpl_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            // Print all the objects in the file_ids to show that intermediate group_ids have been created.
+            System.out.println("Objects in the file_id:");
+
+            // H5O_iterate_t iter_data = null;
+            H5O_iterate_t iter_data = new H5O_iter_data();
+            H5O_iterate_cb iter_cb = new H5O_iter_callback();
+
+            H5.H5Ovisit(file_id, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_NATIVE, iter_cb, iter_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        finally {
+            // Close and release resources.
+            if (gcpl_id >= 0)
+                H5.H5Pclose(gcpl_id);
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+    }
+
+    public static void main(String[] args) {
+        try {
+            (new H5Ex_G_Intermediate()).CreateGroup();
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private class idata {
+        public String link_name = null;
+        public int link_type = -1;
+
+        idata(String name, int type) {
+            this.link_name = name;
+            this.link_type = type;
+        }
+    }
+
+    private class H5O_iter_data implements H5O_iterate_t {
+        public ArrayList<idata> iterdata = new ArrayList<idata>();
+    }
+
+    private class H5O_iter_callback implements H5O_iterate_cb {
+        public int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data) {
+            idata id = new idata(name, info.type);
+            ((H5O_iter_data) op_data).iterdata.add(id);
+
+            System.out.print("/"); /* Print root group in object path */
+
+            // Check if the current object is the root group, and if not print the full path name and type.
+
+            if (name.charAt(0) == '.') /* Root group, do not print '.' */
+                System.out.println("  (Group)");
+            else if (info.type == HDF5Constants.H5O_TYPE_GROUP)
+                System.out.println(name + "  (Group)");
+            else if (info.type == HDF5Constants.H5O_TYPE_DATASET)
+                System.out.println(name + "  (Dataset)");
+            else if (info.type == HDF5Constants.H5O_TYPE_NAMED_DATATYPE)
+                System.out.println(name + "  (Datatype)");
+            else
+                System.out.println(name + "  (Unknown)");
+
+            return 0;
+        }
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Iterate.java b/java/examples/groups/H5Ex_G_Iterate.java
new file mode 100644
index 0000000..d0b4ea4
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Iterate.java
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to iterate over group members using
+  H5Gget_obj_info_all.
+ ************************************************************/
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public class H5Ex_G_Iterate {
+    private static String FILENAME = "groups/h5ex_g_iterate.h5";
+    private static String DATASETNAME = "/";
+
+    enum H5O_type {
+        H5O_TYPE_UNKNOWN(-1), // Unknown object type
+        H5O_TYPE_GROUP(0), // Object is a group
+        H5O_TYPE_DATASET(1), // Object is a dataset
+        H5O_TYPE_NAMED_DATATYPE(2), // Object is a named data type
+        H5O_TYPE_NTYPES(3); // Number of different object types
+        private static final Map<Integer, H5O_type> lookup = new HashMap<Integer, H5O_type>();
+
+        static {
+            for (H5O_type s : EnumSet.allOf(H5O_type.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5O_type(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5O_type get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void do_iterate() {
+        long file_id = -1;
+
+        // Open a file using default properties.
+        try {
+            file_id = H5.H5Fopen(FILENAME, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Begin iteration.
+        System.out.println("Objects in root group:");
+        try {
+            if (file_id >= 0) {
+                int count = (int) H5.H5Gn_members(file_id, DATASETNAME);
+                String[] oname = new String[count];
+                int[] otype = new int[count];
+                int[] ltype = new int[count];
+                long[] orefs = new long[count];
+                H5.H5Gget_obj_info_all(file_id, DATASETNAME, oname, otype, ltype, orefs, HDF5Constants.H5_INDEX_NAME);
+
+                // Get type of the object and display its name and type.
+                for (int indx = 0; indx < otype.length; indx++) {
+                    switch (H5O_type.get(otype[indx])) {
+                    case H5O_TYPE_GROUP:
+                        System.out.println("  Group: " + oname[indx]);
+                        break;
+                    case H5O_TYPE_DATASET:
+                        System.out.println("  Dataset: " + oname[indx]);
+                        break;
+                    case H5O_TYPE_NAMED_DATATYPE:
+                        System.out.println("  Datatype: " + oname[indx]);
+                        break;
+                    default:
+                        System.out.println("  Unknown: " + oname[indx]);
+                    }
+                }
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_G_Iterate.do_iterate();
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Phase.java b/java/examples/groups/H5Ex_G_Phase.java
new file mode 100644
index 0000000..f23d6f2
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Phase.java
@@ -0,0 +1,241 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to set the conditions for
+  conversion between compact and dense (indexed) groups.
+ ************************************************************/
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public class H5Ex_G_Phase {
+    private static String FILE = "H5Ex_G_Phase.h5";
+    private static int MAX_GROUPS = 7;
+    private static int MAX_COMPACT = 5;
+    private static int MIN_DENSE = 3;
+
+    enum H5G_storage {
+        H5G_STORAGE_TYPE_UNKNOWN(-1),
+        H5G_STORAGE_TYPE_SYMBOL_TABLE(0),
+        H5G_STORAGE_TYPE_COMPACT(1),
+        H5G_STORAGE_TYPE_DENSE(2);
+
+        private static final Map<Integer, H5G_storage> lookup = new HashMap<Integer, H5G_storage>();
+
+        static {
+            for (H5G_storage s : EnumSet.allOf(H5G_storage.class))
+                lookup.put(s.getCode(), s);
+        }
+
+        private int code;
+
+        H5G_storage(int layout_type) {
+            this.code = layout_type;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+
+        public static H5G_storage get(int code) {
+            return lookup.get(code);
+        }
+    }
+
+    private static void CreateGroup() {
+        long file_id = -1;
+        long group_id = -1;
+        long subgroup_id = -1;
+        long fapl_id = -1;
+        long gcpl_id = -1;
+        H5G_info_t ginfo;
+        String name = "G0"; // Name of subgroup_id
+        int i;
+
+        // Set file access property list to allow the latest file format.This will allow the library to create new
+        // format groups.
+        try {
+            fapl_id = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+            if (fapl_id >= 0)
+                H5.H5Pset_libver_bounds(fapl_id, HDF5Constants.H5F_LIBVER_LATEST, HDF5Constants.H5F_LIBVER_LATEST);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create group access property list and set the phase change conditions.
+        try {
+            gcpl_id = H5.H5Pcreate(HDF5Constants.H5P_GROUP_CREATE);
+            if (gcpl_id >= 0)
+                H5.H5Pset_link_phase_change(gcpl_id, MAX_COMPACT, MIN_DENSE);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a new file using the default properties.
+        try {
+            if (fapl_id >= 0)
+                file_id = H5.H5Fcreate(FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT, fapl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create primary group.
+        try {
+            if ((file_id >= 0) && (gcpl_id >= 0))
+                group_id = H5.H5Gcreate(file_id, name, HDF5Constants.H5P_DEFAULT, gcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Add subgroups to "group" one at a time, print the storage type for "group" after each subgroup is created.
+        for (i = 1; i <= MAX_GROUPS; i++) {
+            // Define the subgroup name and create the subgroup.
+            char append = (char) (((char) i) + '0');
+            name = name + append; /* G1, G2, G3 etc. */
+            try {
+                if (group_id >= 0) {
+                    subgroup_id = H5.H5Gcreate(group_id, name, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                            HDF5Constants.H5P_DEFAULT);
+                    H5.H5Gclose(subgroup_id);
+                }
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            // Obtain the group info and print the group storage type
+            try {
+                if (group_id >= 0) {
+                    ginfo = H5.H5Gget_info(group_id);
+                    System.out.print(ginfo.nlinks + " Group" + (ginfo.nlinks == 1 ? " " : "s") + ": Storage type is ");
+                    switch (H5G_storage.get(ginfo.storage_type)) {
+                    case H5G_STORAGE_TYPE_COMPACT:
+                        System.out.println("H5G_STORAGE_TYPE_COMPACT"); // New compact format
+                        break;
+                    case H5G_STORAGE_TYPE_DENSE:
+                        System.out.println("H5G_STORAGE_TYPE_DENSE"); // New dense (indexed) format
+                        break;
+                    case H5G_STORAGE_TYPE_SYMBOL_TABLE:
+                        System.out.println("H5G_STORAGE_TYPE_SYMBOL_TABLE"); // Original format
+                        break;
+                    case H5G_STORAGE_TYPE_UNKNOWN:
+                        System.out.println("H5G_STORAGE_TYPE_UNKNOWN");
+                        break;
+                    default:
+                        System.out.println("Storage Type Invalid");
+                        break;
+                    }
+                }
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        System.out.println();
+
+        // Delete subgroups one at a time, print the storage type for "group" after each subgroup is deleted.
+        for (i = MAX_GROUPS; i >= 1; i--) {
+            // Define the subgroup name and delete the subgroup.
+            try {
+                H5.H5Ldelete(group_id, name, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+            name = name.substring(0, i + 1);
+
+            // Obtain the group info and print the group storage type
+            try {
+                if (group_id >= 0) {
+                    ginfo = H5.H5Gget_info(group_id);
+                    System.out.print(ginfo.nlinks + " Group" + (ginfo.nlinks == 1 ? " " : "s") + ": Storage type is ");
+                    switch (H5G_storage.get(ginfo.storage_type)) {
+                    case H5G_STORAGE_TYPE_COMPACT:
+                        System.out.println("H5G_STORAGE_TYPE_COMPACT"); // New compact format
+                        break;
+                    case H5G_STORAGE_TYPE_DENSE:
+                        System.out.println("H5G_STORAGE_TYPE_DENSE"); // New dense (indexed) format
+                        break;
+                    case H5G_STORAGE_TYPE_SYMBOL_TABLE:
+                        System.out.println("H5G_STORAGE_TYPE_SYMBOL_TABLE"); // Original format
+                        break;
+                    case H5G_STORAGE_TYPE_UNKNOWN:
+                        System.out.println("H5G_STORAGE_TYPE_UNKNOWN");
+                        break;
+                    default:
+                        System.out.println("Storage Type Invalid");
+                        break;
+                    }
+                }
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        // Close and release resources
+        try {
+            if (fapl_id >= 0)
+                H5.H5Pclose(fapl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (gcpl_id >= 0)
+                H5.H5Pclose(gcpl_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5Ex_G_Phase.CreateGroup();
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Traverse.java b/java/examples/groups/H5Ex_G_Traverse.java
new file mode 100644
index 0000000..b00fe97
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Traverse.java
@@ -0,0 +1,167 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows a way to recursively traverse the file
+using H5Literate.  The method shown here guarantees that
+the recursion will not enter an infinite loop, but does
+not prevent objects from being visited more than once.
+The program prints the directory structure of the file
+specified in FILE.  The default file used by this example
+implements the structure described in the User's Guide,
+chapter 4, figure 26.
+ ************************************************************/
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5L_iterate_cb;
+import hdf.hdf5lib.callbacks.H5L_iterate_t;
+import hdf.hdf5lib.structs.H5L_info_t;
+import hdf.hdf5lib.structs.H5O_info_t;
+import examples.groups.H5Ex_G_Iterate.H5O_type;
+
+class opdata implements H5L_iterate_t {
+    int recurs;
+    opdata prev;
+    long addr;
+}
+
+public class H5Ex_G_Traverse {
+
+    private static String FILE = "h5ex_g_traverse.h5";
+    public static H5L_iterate_cb iter_cb = new H5L_iter_callbackT();
+
+    private static void OpenGroup() {
+        long file_id = -1;
+        H5O_info_t infobuf;
+        opdata od = new opdata();
+
+        // Open file and initialize the operator data structure.
+        try {
+            file_id = H5.H5Fopen(FILE, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+            if (file_id >= 0) {
+                infobuf = H5.H5Oget_info(file_id);
+                od.recurs = 0;
+                od.prev = null;
+                od.addr = infobuf.addr;
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Print the root group and formatting, begin iteration.
+        try {
+            System.out.println("/ {");
+            // H5L_iterate_cb iter_cb = new H5L_iter_callbackT();
+            H5.H5Literate(file_id, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_NATIVE, 0L, iter_cb, od);
+            System.out.println("}");
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close and release resources.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5Ex_G_Traverse.OpenGroup();
+    }
+}
+
+class H5L_iter_callbackT implements H5L_iterate_cb {
+    public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+
+        H5O_info_t infobuf;
+        int return_val = 0;
+        opdata od = (opdata) op_data; // Type conversion
+        int spaces = 2 * (od.recurs + 1); // Number of white spaces to prepend to output.
+
+        // Get type of the object and display its name and type.
+        // The name of the object is passed to this function by the Library.
+        try {
+            infobuf = H5.H5Oget_info_by_name(group, name, HDF5Constants.H5P_DEFAULT);
+
+            for (int i = 0; i < spaces; i++)
+                System.out.print(" "); // Format output.
+            switch (H5O_type.get(infobuf.type)) {
+            case H5O_TYPE_GROUP:
+                System.out.println("Group: " + name + " { ");
+                // Check group address against linked list of operator
+                // data structures. We will always run the check, as the
+                // reference count cannot be relied upon if there are
+                // symbolic links, and H5Oget_info_by_name always follows
+                // symbolic links. Alternatively we could use H5Lget_info
+                // and never recurse on groups discovered by symbolic
+                // links, however it could still fail if an object's
+                // reference count was manually manipulated with
+                // H5Odecr_refcount.
+                if (group_check(od, infobuf.addr)) {
+                    for (int i = 0; i < spaces; i++)
+                        System.out.print(" ");
+                    System.out.println("  Warning: Loop detected!");
+                }
+                else {
+                    // Initialize new object of type opdata and begin
+                    // recursive iteration on the discovered
+                    // group. The new opdata is given a pointer to the
+                    // current one.
+                    opdata nextod = new opdata();
+                    nextod.recurs = od.recurs + 1;
+                    nextod.prev = od;
+                    nextod.addr = infobuf.addr;
+                    H5L_iterate_cb iter_cb2 = new H5L_iter_callbackT();
+                    return_val = H5.H5Literate_by_name(group, name, HDF5Constants.H5_INDEX_NAME,
+                            HDF5Constants.H5_ITER_NATIVE, 0L, iter_cb2, nextod, HDF5Constants.H5P_DEFAULT);
+                }
+                for (int i = 0; i < spaces; i++)
+                    System.out.print(" ");
+                System.out.println("}");
+                break;
+            case H5O_TYPE_DATASET:
+                System.out.println("Dataset: " + name);
+                break;
+            case H5O_TYPE_NAMED_DATATYPE:
+                System.out.println("Datatype: " + name);
+                break;
+            default:
+                System.out.println("Unknown: " + name);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return return_val;
+    }
+
+    public boolean group_check(opdata od, long target_addr) {
+        if (od.addr == target_addr)
+            return true; // Addresses match
+        else if (od.recurs == 0)
+            return false; // Root group reached with no matches
+        else
+            return group_check(od.prev, target_addr); // Recursively examine the next node
+    }
+
+}
diff --git a/java/examples/groups/H5Ex_G_Visit.java b/java/examples/groups/H5Ex_G_Visit.java
new file mode 100644
index 0000000..c2367a6
--- /dev/null
+++ b/java/examples/groups/H5Ex_G_Visit.java
@@ -0,0 +1,152 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 example shows how to recursively traverse a file
+ using H5Ovisit and H5Lvisit.  The program prints all of
+ the objects in the file specified in FILE, then prints all
+ of the links in that file.  The default file used by this
+ example implements the structure described in the User's
+ Guide, chapter 4, figure 26.
+ ************************************************************/
+package examples.groups;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5L_iterate_cb;
+import hdf.hdf5lib.callbacks.H5L_iterate_t;
+import hdf.hdf5lib.callbacks.H5O_iterate_cb;
+import hdf.hdf5lib.callbacks.H5O_iterate_t;
+import hdf.hdf5lib.structs.H5L_info_t;
+import hdf.hdf5lib.structs.H5O_info_t;
+
+import java.util.ArrayList;
+
+public class H5Ex_G_Visit {
+
+    private static String FILE = "groups/h5ex_g_visit.h5";
+
+    public static void main(String[] args) {
+        try {
+            (new H5Ex_G_Visit()).VisitGroup();
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void VisitGroup() throws Exception {
+
+        long file_id = -1;
+
+        try {
+            // Open file
+            file_id = H5.H5Fopen(FILE, HDF5Constants.H5F_ACC_RDONLY, HDF5Constants.H5P_DEFAULT);
+
+            // Begin iteration using H5Ovisit
+            System.out.println("Objects in the file:");
+            H5O_iterate_t iter_data = new H5O_iter_data();
+            H5O_iterate_cb iter_cb = new H5O_iter_callback();
+            H5.H5Ovisit(file_id, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_NATIVE, iter_cb, iter_data);
+            System.out.println();
+            // Repeat the same process using H5Lvisit
+            H5L_iterate_t iter_data2 = new H5L_iter_data();
+            H5L_iterate_cb iter_cb2 = new H5L_iter_callback();
+            System.out.println("Links in the file:");
+            H5.H5Lvisit(file_id, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_NATIVE, iter_cb2, iter_data2);
+
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        finally {
+            // Close and release resources.
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+    }
+
+    /************************************************************
+     * Operator function for H5Lvisit. This function simply retrieves the info for the object the current link points
+     * to, and calls the operator function for H5Ovisit.
+     ************************************************************/
+
+    private class idata {
+        public String link_name = null;
+        public int link_type = -1;
+
+        idata(String name, int type) {
+            this.link_name = name;
+            this.link_type = type;
+        }
+    }
+
+    private class H5L_iter_data implements H5L_iterate_t {
+        public ArrayList<idata> iterdata = new ArrayList<idata>();
+    }
+
+    private class H5L_iter_callback implements H5L_iterate_cb {
+        public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+
+            idata id = new idata(name, info.type);
+            ((H5L_iter_data) op_data).iterdata.add(id);
+
+            H5O_info_t infobuf;
+            int ret = 0;
+            try {
+                // Get type of the object and display its name and type. The name of the object is passed to this
+                // function by the Library.
+                infobuf = H5.H5Oget_info_by_name(group, name, HDF5Constants.H5P_DEFAULT);
+                H5O_iterate_cb iter_cbO = new H5O_iter_callback();
+                H5O_iterate_t iter_dataO = new H5O_iter_data();
+                ret = iter_cbO.callback(group, name, infobuf, iter_dataO);
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return ret;
+        }
+    }
+
+    private class H5O_iter_data implements H5O_iterate_t {
+        public ArrayList<idata> iterdata = new ArrayList<idata>();
+    }
+
+    private class H5O_iter_callback implements H5O_iterate_cb {
+        public int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data) {
+            idata id = new idata(name, info.type);
+            ((H5O_iter_data) op_data).iterdata.add(id);
+
+            System.out.print("/"); /* Print root group in object path */
+
+            // Check if the current object is the root group, and if not print the full path name and type.
+
+            if (name.charAt(0) == '.') /* Root group, do not print '.' */
+                System.out.println("  (Group)");
+            else if (info.type == HDF5Constants.H5O_TYPE_GROUP)
+                System.out.println(name + "  (Group)");
+            else if (info.type == HDF5Constants.H5O_TYPE_DATASET)
+                System.out.println(name + "  (Dataset)");
+            else if (info.type == HDF5Constants.H5O_TYPE_NAMED_DATATYPE)
+                System.out.println(name + "  (Datatype)");
+            else
+                System.out.println(name + "  (Unknown)");
+
+            return 0;
+        }
+    }
+
+}
diff --git a/java/examples/groups/Makefile.am b/java/examples/groups/Makefile.am
new file mode 100644
index 0000000..802e2b0
--- /dev/null
+++ b/java/examples/groups/Makefile.am
@@ -0,0 +1,68 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+pkgpath = examples/groups
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+
+jarfile = jar$(PACKAGE_TARNAME)groups.jar
+
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+TESTPACKAGE = 
+
+noinst_JAVA = \
+    H5Ex_G_Create.java \
+    H5Ex_G_Iterate.java \
+    H5Ex_G_Compact.java \
+    H5Ex_G_Corder.java \
+    H5Ex_G_Intermediate.java \
+    H5Ex_G_Phase.java \
+    H5Ex_G_Visit.java
+
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+noinst_DATA = $(jarfile)
+
+.PHONY: classes
+
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/examples/groups/Makefile.in b/java/examples/groups/Makefile.in
new file mode 100644
index 0000000..9e3308a
--- /dev/null
+++ b/java/examples/groups/Makefile.in
@@ -0,0 +1,1298 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(TEST_SCRIPT)
+subdir = java/examples/groups
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES = runExample.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__java_sources = $(noinst_JAVA)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/runExample.sh.in \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+JAVAROOT = .classes
+pkgpath = examples/groups
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+jarfile = jar$(PACKAGE_TARNAME)groups.jar
+TESTPACKAGE = 
+noinst_JAVA = \
+    H5Ex_G_Create.java \
+    H5Ex_G_Iterate.java \
+    H5Ex_G_Compact.java \
+    H5Ex_G_Corder.java \
+    H5Ex_G_Intermediate.java \
+    H5Ex_G_Phase.java \
+    H5Ex_G_Visit.java
+
+noinst_DATA = $(jarfile)
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/examples/groups/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/examples/groups/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+runExample.sh: $(top_builddir)/config.status $(srcdir)/runExample.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classnoinst.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+
+clean-noinstJAVA:
+	-rm -f *.class classnoinst.stamp
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all $(check_SCRIPTS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile classnoinst.stamp $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-noinstJAVA mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+	clean-generic clean-libtool clean-noinstJAVA cscopelist-am \
+	ctags-am distclean distclean-generic distclean-libtool distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: classes
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/groups/h5ex_g_iterate.h5 b/java/examples/groups/h5ex_g_iterate.h5
new file mode 100644
index 0000000..e462703
Binary files /dev/null and b/java/examples/groups/h5ex_g_iterate.h5 differ
diff --git a/java/examples/groups/h5ex_g_visit.h5 b/java/examples/groups/h5ex_g_visit.h5
new file mode 100644
index 0000000..d8267b1
Binary files /dev/null and b/java/examples/groups/h5ex_g_visit.h5 differ
diff --git a/java/examples/groups/runExample.sh.in b/java/examples/groups/runExample.sh.in
new file mode 100644
index 0000000..a59a894
--- /dev/null
+++ b/java/examples/groups/runExample.sh.in
@@ -0,0 +1,349 @@
+#! /bin/sh
+#
+# 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.
+#
+
+top_builddir=@top_builddir@
+top_srcdir=@top_srcdir@
+srcdir=@srcdir@
+
+TESTNAME=EX_Groups
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Set up default variable values if not supplied by the user.
+RM='rm -rf'
+CMP='cmp'
+DIFF='diff -c'
+CP='cp'
+DIRNAME='dirname'
+LS='ls'
+AWK='awk'
+
+nerrors=0
+
+# where the libs exist
+HDFLIB_HOME="$top_srcdir/java/lib"
+BLDLIBDIR="./lib"
+BLDREFDIR="./groups"
+BLDDIR="."
+HDFTEST_HOME="$top_srcdir/java/examples/groups"
+JARFILE=jar at PACKAGE_TARNAME@- at PACKAGE_VERSION@.jar
+TESTJARFILE=jar at PACKAGE_TARNAME@groups.jar
+test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR
+test -d $BLDREFDIR || mkdir -p $BLDREFDIR
+
+######################################################################
+# library files
+# --------------------------------------------------------------------
+# All the library files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_LIBRARY_FILES="
+$HDFLIB_HOME/slf4j-api-1.7.5.jar
+$HDFLIB_HOME/ext/slf4j-simple-1.7.5.jar
+$top_builddir/src/.libs/libhdf5.*
+$top_builddir/java/src/jni/.libs/libhdf5_java.*
+$top_builddir/java/src/$JARFILE
+"
+LIST_REF_FILES="
+$HDFTEST_HOME/h5ex_g_iterate.h5
+$HDFTEST_HOME/h5ex_g_visit.h5
+"
+LIST_DATA_FILES="
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Create.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Iterate.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Compact.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Corder.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Intermediate.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Phase.txt
+$HDFTEST_HOME/../testfiles/examples.groups.H5Ex_G_Visit.txt
+"
+
+#
+# copy files from source dirs to test dir
+#
+COPY_LIBFILES="$LIST_LIBRARY_FILES"
+
+COPY_LIBFILES_TO_BLDLIBDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_LIBFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDLIBDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_LIBFILES_AND_BLDLIBDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDLIBDIR
+    fi
+}
+
+COPY_DATAFILES="$LIST_DATA_FILES"
+
+COPY_DATAFILES_TO_BLDDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_DATAFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_DATAFILES_AND_BLDDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDDIR/*.txt
+        $RM $BLDDIR/*.out
+    fi
+}
+
+COPY_REFFILES="$LIST_REF_FILES"
+
+COPY_REFFILES_TO_BLDREFDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_REFFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDREFDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_REFFILES_AND_BLDREFDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDREFDIR
+    fi
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# where Java is installed (requires jdk1.7.x)
+JAVAEXE=@JAVA@
+JAVAEXEFLAGS=@H5_JAVAFLAGS@
+
+###############################################################################
+#            DO NOT MODIFY BELOW THIS LINE
+###############################################################################
+
+# prepare for test
+COPY_LIBFILES_TO_BLDLIBDIR
+COPY_DATAFILES_TO_BLDDIR
+COPY_REFFILES_TO_BLDREFDIR
+
+CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/slf4j-api-1.7.5.jar:"$BLDLIBDIR"/slf4j-simple-1.7.5.jar:"$TESTJARFILE""
+
+TEST=/usr/bin/test
+if [ ! -x /usr/bin/test ]
+then
+TEST=`which test`
+fi
+
+if $TEST -z "$CLASSPATH"; then
+        CLASSPATH=""
+fi
+CLASSPATH=$CPATH":"$CLASSPATH
+export CLASSPATH
+
+if $TEST -n "$JAVAPATH" ; then
+        PATH=$JAVAPATH":"$PATH
+        export PATH
+fi
+
+if $TEST -e /bin/uname; then
+   os_name=`/bin/uname -s`
+elif $TEST -e /usr/bin/uname; then
+   os_name=`/usr/bin/uname -s`
+else
+   os_name=unknown
+fi
+
+if $TEST -z "$LD_LIBRARY_PATH" ; then
+        LD_LIBRARY_PATH=""
+fi
+
+case  $os_name in
+    Darwin)
+    DYLD_LIBRARY_PATH=$BLDLIBDIR:$DYLD_LIBRARY_PATH
+    export DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+    ;;
+    *)
+    LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH
+    ;;
+esac
+
+export LD_LIBRARY_PATH
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Create"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Create > H5Ex_G_Create.out)
+if diff H5Ex_G_Create.out examples.groups.H5Ex_G_Create.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Create"
+else
+    echo "**FAILED**    groups.H5Ex_G_Create"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Iterate"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Iterate > H5Ex_G_Iterate.out)
+if diff H5Ex_G_Iterate.out examples.groups.H5Ex_G_Iterate.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Iterate"
+else
+    echo "**FAILED**    groups.H5Ex_G_Iterate"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Compact"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Compact > H5Ex_G_Compact.out)
+if diff H5Ex_G_Compact.out examples.groups.H5Ex_G_Compact.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Compact"
+else
+    echo "**FAILED**    groups.H5Ex_G_Compact"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Corder"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Corder > H5Ex_G_Corder.out)
+if diff H5Ex_G_Corder.out examples.groups.H5Ex_G_Corder.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Corder"
+else
+    echo "**FAILED**    groups.H5Ex_G_Corder"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Intermediate"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Intermediate > H5Ex_G_Intermediate.out)
+if diff H5Ex_G_Intermediate.out examples.groups.H5Ex_G_Intermediate.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Intermediate"
+else
+    echo "**FAILED**    groups.H5Ex_G_Intermediate"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Phase"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Phase > H5Ex_G_Phase.out)
+if diff H5Ex_G_Phase.out examples.groups.H5Ex_G_Phase.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Phase"
+else
+    echo "**FAILED**    groups.H5Ex_G_Phase"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Visit"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.groups.H5Ex_G_Visit > H5Ex_G_Visit.out)
+if diff H5Ex_G_Visit.out examples.groups.H5Ex_G_Visit.txt > /dev/null; then
+    echo "  PASSED      groups.H5Ex_G_Visit"
+else
+    echo "**FAILED**    groups.H5Ex_G_Visit"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+# Clean up temporary files/directories
+CLEAN_LIBFILES_AND_BLDLIBDIR
+CLEAN_DATAFILES_AND_BLDDIR
+CLEAN_REFFILES_AND_BLDREFDIR
+
+# Report test results and exit
+if test $nerrors -eq 0 ; then
+    echo "All $TESTNAME tests passed."
+    exit $EXIT_SUCCESS
+else
+    echo "$TESTNAME tests failed with $nerrors errors."
+    exit $EXIT_FAILURE
+fi
diff --git a/java/examples/intro/CMakeLists.txt b/java/examples/intro/CMakeLists.txt
new file mode 100644
index 0000000..ae3f585
--- /dev/null
+++ b/java/examples/intro/CMakeLists.txt
@@ -0,0 +1,112 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDFJAVA_EXAMPLES_INTRO Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_JNI_BINARY_DIR}
+    ${HDF5_JAVA_HDF5_LIB_DIR}
+)
+
+set (HDF_JAVA_EXAMPLES
+    H5_CreateAttribute
+    H5_CreateDataset
+    H5_CreateFile
+    H5_CreateGroup
+    H5_CreateGroupAbsoluteRelative
+    H5_CreateGroupDataset
+    H5_ReadWrite
+)
+
+if (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+else (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+endif (WIN32)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
+endforeach (CMAKE_INCLUDE_PATH)
+
+foreach (example ${HDF_JAVA_EXAMPLES})
+  file (WRITE ${PROJECT_BINARY_DIR}/${example}_Manifest.txt
+  "Main-Class: examples.intro.${example}
+"
+  )
+  add_jar (${example} MANIFEST ${PROJECT_BINARY_DIR}/${example}_Manifest.txt ${example}.java)
+  get_target_property (${example}_JAR_FILE ${example} JAR_FILE)
+#  install_jar (${example} ${HJAVA_INSTALL_DATA_DIR}/examples examples)
+  get_target_property (${example}_CLASSPATH ${example} CLASSDIR)
+  add_dependencies (${example} ${HDF5_JAVA_HDF5_LIB_TARGET})
+endforeach (example ${HDF_JAVA_EXAMPLES})
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_JARS};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_NOP_JAR}")
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (HDFJAVA_JAR ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${HDFJAVA_JAR}")
+endforeach (HDFJAVA_JAR)
+
+foreach (example ${HDF_JAVA_OBJECT_EXAMPLES})
+  file (WRITE ${PROJECT_BINARY_DIR}/${example}_Manifest.txt
+  "Main-Class: examples.intro.${example}
+"
+  )
+  add_jar (${example} MANIFEST ${PROJECT_BINARY_DIR}/${example}_Manifest.txt ${example}.java)
+  get_target_property (${example}_JAR_FILE ${example} JAR_FILE)
+#  install_jar (${example} ${HJAVA_INSTALL_DATA_DIR}/examples examples)
+  get_target_property (${example}_CLASSPATH ${example} CLASSDIR)
+  add_dependencies (${example} ${HDFJAVA_H5_LIB_TARGET})
+endforeach (example ${HDF_JAVA_OBJECT_EXAMPLES})
+
+MACRO (ADD_H5_TEST resultfile resultcode)
+  add_test (
+      NAME JAVA_intro-${resultfile}
+      COMMAND "${CMAKE_COMMAND}"
+          -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
+          -D "TEST_PROGRAM=examples.intro.${resultfile}"
+          -D "TEST_ARGS:STRING=${ARGN}"
+          -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${resultfile}_JAR_FILE}"
+          -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
+          -D "TEST_FOLDER=${HDFJAVA_EXAMPLES_BINARY_DIR}"
+          -D "TEST_OUTPUT=intro/${resultfile}.out"
+          -D "TEST_EXPECT=${resultcode}"
+          -D "TEST_REFERENCE=intro/${resultfile}.txt"
+          -P "${HDF_RESOURCES_DIR}/jrunTest.cmake"
+  )
+  if (NOT "${last_test}" STREQUAL "")
+    set_tests_properties (JAVA_intro-${resultfile} PROPERTIES DEPENDS ${last_test})
+  endif (NOT "${last_test}" STREQUAL "")
+  set (last_test "JAVA_intro-${resultfile}")
+ENDMACRO (ADD_H5_TEST file)
+
+if (BUILD_TESTING)
+
+  foreach (example ${HDF_JAVA_EXAMPLES})
+    add_test (
+        NAME JAVA_intro-${example}-clearall-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E remove
+            ${HDFJAVA_EXAMPLES_BINARY_DIR}/${example}.h5
+            ${example}.out
+            ${example}.out.err
+    )
+    if (NOT "${last_test}" STREQUAL "")
+      set_tests_properties (JAVA_intro-${example}-clearall-objects PROPERTIES DEPENDS ${last_test})
+    endif (NOT "${last_test}" STREQUAL "")
+    add_test (
+        NAME JAVA_intro-${example}-copy-objects
+        COMMAND    ${CMAKE_COMMAND}
+            -E copy_if_different
+            ${HDFJAVA_EXAMPLES_SOURCE_DIR}/testfiles/examples.intro.${example}.txt
+            ${HDFJAVA_EXAMPLES_INTRO_BINARY_DIR}/${example}.txt
+    )
+    set_tests_properties (JAVA_intro-${example}-copy-objects PROPERTIES DEPENDS JAVA_intro-${example}-clearall-objects)
+    set (last_test "JAVA_intro-${example}-copy-objects")
+    ADD_H5_TEST (${example} 0)
+  endforeach (example ${HDF_JAVA_EXAMPLES})
+
+endif (BUILD_TESTING)
diff --git a/java/examples/intro/H5_CreateAttribute.java b/java/examples/intro/H5_CreateAttribute.java
new file mode 100644
index 0000000..16c53d6
--- /dev/null
+++ b/java/examples/intro/H5_CreateAttribute.java
@@ -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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating a dataset attribute.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateAttribute {
+    private static String FILENAME = "H5_CreateAttribute.h5";
+    private static String DATASETNAME = "dset";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    private static String DATASETATTRIBUTE = "Units";
+
+    private static void CreateDatasetAttribute() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long attribute_id = -1;
+        long[] dims1 = { DIM_X, DIM_Y };
+        long[] dims = { 2 };
+        int[] attr_data = { 100, 200 };
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the dataset.
+        try {
+            dataspace_id = H5.H5Screate_simple(2, dims1, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, "/" + DATASETNAME, HDF5Constants.H5T_STD_I32BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the attribute.
+        try {
+            dataspace_id = H5.H5Screate_simple(1, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a dataset attribute.
+        try {
+            if ((dataset_id >= 0) && (dataspace_id >= 0))
+                attribute_id = H5.H5Acreate(dataset_id, DATASETATTRIBUTE, HDF5Constants.H5T_STD_I32BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the attribute data.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Awrite(attribute_id, HDF5Constants.H5T_NATIVE_INT, attr_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the attribute.
+        try {
+            if (attribute_id >= 0)
+                H5.H5Aclose(attribute_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the dataspace.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close to the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5_CreateAttribute.CreateDatasetAttribute();
+    }
+
+}
diff --git a/java/examples/intro/H5_CreateDataset.java b/java/examples/intro/H5_CreateDataset.java
new file mode 100644
index 0000000..a16cfe6
--- /dev/null
+++ b/java/examples/intro/H5_CreateDataset.java
@@ -0,0 +1,97 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating and closing a dataset.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateDataset {
+    private static String FILENAME = "H5_CreateDataset.h5";
+    private static String DATASETNAME = "dset";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+
+    private static void CreateDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the dataset.
+        try {
+            dataspace_id = H5.H5Screate_simple(2, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, "/" + DATASETNAME, HDF5Constants.H5T_STD_I32BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Terminate access to the data space.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5_CreateDataset.CreateDataset();
+    }
+
+}
diff --git a/java/examples/intro/H5_CreateFile.java b/java/examples/intro/H5_CreateFile.java
new file mode 100644
index 0000000..eb9f277
--- /dev/null
+++ b/java/examples/intro/H5_CreateFile.java
@@ -0,0 +1,55 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating and closing a file.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateFile {
+    static final String FILENAME = "H5_CreateFile.h5";
+
+    private static void CreateFile() {
+        long file_id = -1;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5_CreateFile.CreateFile();
+    }
+
+}
diff --git a/java/examples/intro/H5_CreateGroup.java b/java/examples/intro/H5_CreateGroup.java
new file mode 100644
index 0000000..36bd49a
--- /dev/null
+++ b/java/examples/intro/H5_CreateGroup.java
@@ -0,0 +1,76 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Creating and closing a group.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateGroup {
+    private static String FILENAME = "H5_CreateGroup.h5";
+    private static String GROUPNAME = "MyGroup";
+
+    private static void CreateGroup() {
+        long file_id = -1;
+        long group_id = -1;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a group in the file.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gcreate(file_id, "/" + GROUPNAME, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5_CreateGroup.CreateGroup();
+    }
+
+}
diff --git a/java/examples/intro/H5_CreateGroupAbsoluteRelative.java b/java/examples/intro/H5_CreateGroupAbsoluteRelative.java
new file mode 100644
index 0000000..e0127cc
--- /dev/null
+++ b/java/examples/intro/H5_CreateGroupAbsoluteRelative.java
@@ -0,0 +1,118 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+   Creating groups using absolute and relative names.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateGroupAbsoluteRelative {
+    private static String FILENAME = "H5_CreateGroupAbsoluteRelative.h5";
+    private static String GROUPNAME = "MyGroup";
+    private static String GROUPNAME_A = "GroupA";
+    private static String GROUPNAME_B = "GroupB";
+
+    private static void CreateGroupAbsoluteAndRelative() {
+        long file_id = -1;
+        long group1_id = -1;
+        long group2_id = -1;
+        long group3_id = -1;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create a group named "/MyGroup" in the file.
+        try {
+            if (file_id >= 0)
+                group1_id = H5.H5Gcreate(file_id, "/" + GROUPNAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create group "Group_A" in group "MyGroup" using absolute name.
+        try {
+            if (file_id >= 0)
+                group2_id = H5.H5Gcreate(file_id, "/" + GROUPNAME + "/" + GROUPNAME_A, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create group "Group_B" in group "MyGroup" using relative name.
+        try {
+            if (group1_id >= 0)
+                group3_id = H5.H5Gcreate(group1_id, GROUPNAME_B, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group3.
+        try {
+            if (group3_id >= 0)
+                H5.H5Gclose(group3_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group2.
+        try {
+            if (group2_id >= 0)
+                H5.H5Gclose(group2_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group1.
+        try {
+            if (group1_id >= 0)
+                H5.H5Gclose(group1_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void main(String[] args) {
+        H5_CreateGroupAbsoluteRelative.CreateGroupAbsoluteAndRelative();
+    }
+
+}
diff --git a/java/examples/intro/H5_CreateGroupDataset.java b/java/examples/intro/H5_CreateGroupDataset.java
new file mode 100644
index 0000000..0607bbd
--- /dev/null
+++ b/java/examples/intro/H5_CreateGroupDataset.java
@@ -0,0 +1,207 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+    Create two datasets within groups.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_CreateGroupDataset {
+    private static String FILENAME = "H5_CreateGroupDataset.h5";
+    private static String GROUPNAME = "MyGroup";
+    private static String GROUPNAME_A = "GroupA";
+    private static String DATASETNAME1 = "dset1";
+    private static String DATASETNAME2 = "dset2";
+    private static final int DIM1_X = 3;
+    private static final int DIM1_Y = 3;
+    private static final int DIM2_X = 2;
+    private static final int DIM2_Y = 10;
+
+    private static void h5_crtgrpd() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long group_id = -1;
+        long group1_id = -1;
+        long group2_id = -1;
+        int[][] dset1_data = new int[DIM1_X][DIM1_Y];
+        int[][] dset2_data = new int[DIM2_X][DIM2_Y];
+        long[] dims1 = { DIM1_X, DIM1_Y };
+        long[] dims2 = { DIM2_X, DIM2_Y };
+
+        // Initialize the first dataset.
+        for (int indx = 0; indx < DIM1_X; indx++)
+            for (int jndx = 0; jndx < DIM1_Y; jndx++)
+                dset1_data[indx][jndx] = jndx + 1;
+
+        // Initialize the second dataset.
+        for (int indx = 0; indx < DIM2_X; indx++)
+            for (int jndx = 0; jndx < DIM2_Y; jndx++)
+                dset2_data[indx][jndx] = jndx + 1;
+
+        // Create a file.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+            // Create a group named "/MyGroup" in the file.
+            if (file_id >= 0) {
+                group1_id = H5.H5Gcreate(file_id, "/" + GROUPNAME, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                // Create group "Group_A" in group "MyGroup" using absolute name.
+                if (group1_id >= 0) {
+                    group2_id = H5.H5Gcreate(file_id, "/" + GROUPNAME + "/" + GROUPNAME_A, HDF5Constants.H5P_DEFAULT,
+                            HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                    if (group2_id >= 0)
+                        H5.H5Gclose(group2_id);
+                }
+                if (group1_id >= 0)
+                    H5.H5Gclose(group1_id);
+            }
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the first dataset.
+        try {
+            dataspace_id = H5.H5Screate_simple(2, dims1, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset in group "MyGroup".
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, "/" + GROUPNAME + "/" + DATASETNAME1, HDF5Constants.H5T_STD_I32BE,
+                        dataspace_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the first dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset1_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the data space for the first dataset.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+            dataspace_id = -1;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the first dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+            dataset_id = -1;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Open an existing group of the specified file.
+        try {
+            if (file_id >= 0)
+                group_id = H5.H5Gopen(file_id, "/" + GROUPNAME + "/" + GROUPNAME_A, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the second dataset.
+        try {
+            dataspace_id = H5.H5Screate_simple(2, dims2, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the second dataset in group "Group_A".
+        try {
+            if ((group_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(group_id, DATASETNAME2, HDF5Constants.H5T_STD_I32BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the second dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset2_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the data space for the second dataset.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the second dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the group.
+        try {
+            if (group_id >= 0)
+                H5.H5Gclose(group_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5_CreateGroupDataset.h5_crtgrpd();
+    }
+
+}
diff --git a/java/examples/intro/H5_ReadWrite.java b/java/examples/intro/H5_ReadWrite.java
new file mode 100644
index 0000000..0d73884
--- /dev/null
+++ b/java/examples/intro/H5_ReadWrite.java
@@ -0,0 +1,112 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/************************************************************
+   Writing and reading an existing dataset.
+ ************************************************************/
+
+package examples.intro;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+public class H5_ReadWrite {
+    private static String FILENAME = "H5_ReadWrite.h5";
+    private static String DATASETNAME = "dset";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+
+    private static void ReadWriteDataset() {
+        long file_id = -1;
+        long dataspace_id = -1;
+        long dataset_id = -1;
+        long[] dims = { DIM_X, DIM_Y };
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = indx * 6 + jndx + 1;
+
+        // Create a new file using default properties.
+        try {
+            file_id = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the data space for the dataset.
+        try {
+            dataspace_id = H5.H5Screate_simple(2, dims, null);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Create the dataset.
+        try {
+            if ((file_id >= 0) && (dataspace_id >= 0))
+                dataset_id = H5.H5Dcreate(file_id, "/" + DATASETNAME, HDF5Constants.H5T_STD_I32BE, dataspace_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Write the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dwrite(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dread(dataset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the dataset.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Close the file.
+        try {
+            if (file_id >= 0)
+                H5.H5Fclose(file_id);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void main(String[] args) {
+        H5_ReadWrite.ReadWriteDataset();
+    }
+
+}
diff --git a/java/examples/intro/Makefile.am b/java/examples/intro/Makefile.am
new file mode 100644
index 0000000..fef33d2
--- /dev/null
+++ b/java/examples/intro/Makefile.am
@@ -0,0 +1,67 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+pkgpath = examples/intro
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+
+jarfile = jar$(PACKAGE_TARNAME)intro.jar
+
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+TESTPACKAGE = 
+
+noinst_JAVA = \
+    H5_CreateAttribute.java \
+    H5_CreateDataset.java \
+    H5_CreateFile.java \
+    H5_CreateGroup.java \
+    H5_CreateGroupAbsoluteRelative.java \
+    H5_CreateGroupDataset.java \
+    H5_ReadWrite.java
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+noinst_DATA = $(jarfile)
+
+.PHONY: classes
+
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/examples/intro/Makefile.in b/java/examples/intro/Makefile.in
new file mode 100644
index 0000000..da3b27d
--- /dev/null
+++ b/java/examples/intro/Makefile.in
@@ -0,0 +1,1298 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java Library Examples Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(TEST_SCRIPT)
+subdir = java/examples/intro
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES = runExample.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__java_sources = $(noinst_JAVA)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/runExample.sh.in \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+JAVAROOT = .classes
+pkgpath = examples/intro
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+jarfile = jar$(PACKAGE_TARNAME)intro.jar
+TESTPACKAGE = 
+noinst_JAVA = \
+    H5_CreateAttribute.java \
+    H5_CreateDataset.java \
+    H5_CreateFile.java \
+    H5_CreateGroup.java \
+    H5_CreateGroupAbsoluteRelative.java \
+    H5_CreateGroupDataset.java \
+    H5_ReadWrite.java
+
+noinst_DATA = $(jarfile)
+check_SCRIPTS = runExample.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class runExample.sh
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/examples/intro/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/examples/intro/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+runExample.sh: $(top_builddir)/config.status $(srcdir)/runExample.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classnoinst.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+
+clean-noinstJAVA:
+	-rm -f *.class classnoinst.stamp
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all $(check_SCRIPTS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile classnoinst.stamp $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-noinstJAVA mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+	clean-generic clean-libtool clean-noinstJAVA cscopelist-am \
+	ctags-am distclean distclean-generic distclean-libtool distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: classes
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/examples/intro/runExample.sh.in b/java/examples/intro/runExample.sh.in
new file mode 100644
index 0000000..ecc51ca
--- /dev/null
+++ b/java/examples/intro/runExample.sh.in
@@ -0,0 +1,298 @@
+#! /bin/sh
+#
+# 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.
+#
+
+top_builddir=@top_builddir@
+top_srcdir=@top_srcdir@
+srcdir=@srcdir@
+
+TESTNAME=EX_Intro
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Set up default variable values if not supplied by the user.
+RM='rm -rf'
+CMP='cmp'
+DIFF='diff -c'
+CP='cp'
+DIRNAME='dirname'
+LS='ls'
+AWK='awk'
+
+nerrors=0
+
+# where the libs exist
+HDFLIB_HOME="$top_srcdir/java/lib"
+BLDLIBDIR="./lib"
+BLDDIR="."
+HDFTEST_HOME="$top_srcdir/java/examples/intro"
+JARFILE=jar at PACKAGE_TARNAME@- at PACKAGE_VERSION@.jar
+TESTJARFILE=jar at PACKAGE_TARNAME@intro.jar
+test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR
+
+######################################################################
+# library files
+# --------------------------------------------------------------------
+# All the library files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_LIBRARY_FILES="
+$HDFLIB_HOME/slf4j-api-1.7.5.jar
+$HDFLIB_HOME/ext/slf4j-simple-1.7.5.jar
+$top_builddir/src/.libs/libhdf5.*
+$top_builddir/java/src/jni/.libs/libhdf5_java.*
+$top_builddir/java/src/$JARFILE
+"
+LIST_DATA_FILES="
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateDataset.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateAttribute.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateFile.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateGroup.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateGroupAbsoluteRelative.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_CreateGroupDataset.txt
+$HDFTEST_HOME/../testfiles/examples.intro.H5_ReadWrite.txt
+"
+
+#
+# copy files from source dirs to test dir
+#
+COPY_LIBFILES="$LIST_LIBRARY_FILES"
+
+COPY_LIBFILES_TO_BLDLIBDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_LIBFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDLIBDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_LIBFILES_AND_BLDLIBDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDLIBDIR
+    fi
+}
+
+COPY_DATAFILES="$LIST_DATA_FILES"
+
+COPY_DATAFILES_TO_BLDDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_DATAFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_DATAFILES_AND_BLDDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDDIR/*.txt
+        $RM $BLDDIR/*.out
+    fi
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# where Java is installed (requires jdk1.7.x)
+JAVAEXE=@JAVA@
+JAVAEXEFLAGS=@H5_JAVAFLAGS@
+
+###############################################################################
+#            DO NOT MODIFY BELOW THIS LINE
+###############################################################################
+
+# prepare for test
+COPY_LIBFILES_TO_BLDLIBDIR
+COPY_DATAFILES_TO_BLDDIR
+
+CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/slf4j-api-1.7.5.jar:"$BLDLIBDIR"/slf4j-simple-1.7.5.jar:"$TESTJARFILE""
+
+TEST=/usr/bin/test
+if [ ! -x /usr/bin/test ]
+then
+TEST=`which test`
+fi
+
+if $TEST -z "$CLASSPATH"; then
+        CLASSPATH=""
+fi
+CLASSPATH=$CPATH":"$CLASSPATH
+export CLASSPATH
+
+if $TEST -n "$JAVAPATH" ; then
+        PATH=$JAVAPATH":"$PATH
+        export PATH
+fi
+
+if $TEST -e /bin/uname; then
+   os_name=`/bin/uname -s`
+elif $TEST -e /usr/bin/uname; then
+   os_name=`/usr/bin/uname -s`
+else
+   os_name=unknown
+fi
+
+if $TEST -z "$LD_LIBRARY_PATH" ; then
+        LD_LIBRARY_PATH=""
+fi
+
+case  $os_name in
+    Darwin)
+    DYLD_LIBRARY_PATH=$BLDLIBDIR:$DYLD_LIBRARY_PATH
+    export DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+    ;;
+    *)
+    LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH
+    ;;
+esac
+
+export LD_LIBRARY_PATH
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateDataset"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateDataset > H5_CreateDataset.out)
+if diff H5_CreateDataset.out examples.intro.H5_CreateDataset.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateDataset"
+else
+    echo "**FAILED**    intro.H5_CreateDataset"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateAttribute"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateAttribute > H5_CreateAttribute.out)
+if diff H5_CreateAttribute.out examples.intro.H5_CreateAttribute.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateAttribute"
+else
+    echo "**FAILED**    intro.H5_CreateAttribute"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateFile"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateFile > H5_CreateFile.out)
+if diff H5_CreateFile.out examples.intro.H5_CreateFile.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateFile"
+else
+    echo "**FAILED**    intro.H5_CreateFile"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroup"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroup > H5_CreateGroup.out)
+if diff H5_CreateGroup.out examples.intro.H5_CreateGroup.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateGroup"
+else
+    echo "**FAILED**    intro.H5_CreateGroup"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroupAbsoluteRelative"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroupAbsoluteRelative > H5_CreateGroupAbsoluteRelative.out)
+if diff H5_CreateGroupAbsoluteRelative.out examples.intro.H5_CreateGroupAbsoluteRelative.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateGroupAbsoluteRelative"
+else
+    echo "**FAILED**    intro.H5_CreateGroupAbsoluteRelative"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroupDataset"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_CreateGroupDataset > H5_CreateGroupDataset.out)
+if diff H5_CreateGroupDataset.out examples.intro.H5_CreateGroupDataset.txt > /dev/null; then
+    echo "  PASSED      intro.H5_CreateGroupDataset"
+else
+    echo "**FAILED**    intro.H5_CreateGroupDataset"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_ReadWrite"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH examples.intro.H5_ReadWrite > H5_ReadWrite.out)
+if diff H5_ReadWrite.out examples.intro.H5_ReadWrite.txt > /dev/null; then
+    echo "  PASSED      intro.H5_ReadWrite"
+else
+    echo "**FAILED**    intro.H5_ReadWrite"
+    nerrors="`expr $nerrors + 1`"
+fi
+
+# Clean up temporary files/directories
+CLEAN_LIBFILES_AND_BLDLIBDIR
+CLEAN_DATAFILES_AND_BLDDIR
+
+# Report test results and exit
+if test $nerrors -eq 0 ; then
+    echo "All $TESTNAME tests passed."
+    exit $EXIT_SUCCESS
+else
+    echo "$TESTNAME tests failed with $nerrors errors."
+    exit $EXIT_FAILURE
+fi
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Alloc.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Alloc.txt
new file mode 100644
index 0000000..6fd810b
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Alloc.txt
@@ -0,0 +1,16 @@
+Creating datasets...
+DS1 has allocation time H5D_ALLOC_TIME_LATE
+DS2 has allocation time H5D_ALLOC_TIME_EARLY
+
+Space for DS1 has not been allocated.
+Storage size for DS1 is: 0 bytes.
+Space for DS2 has been allocated.
+Storage size for DS2 is: 112 bytes.
+
+Writing data...
+
+Space for DS1 has been allocated.
+Storage size for DS1 is: 112 bytes.
+Space for DS2 has been allocated.
+Storage size for DS2 is: 112 bytes.
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Checksum.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Checksum.txt
new file mode 100644
index 0000000..676aebb
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Checksum.txt
@@ -0,0 +1,3 @@
+Filter type is: H5Z_FILTER_FLETCHER32
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Chunk.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Chunk.txt
new file mode 100644
index 0000000..5f4c2de
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Chunk.txt
@@ -0,0 +1,26 @@
+Original Data:
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+
+Storage layout for DS1 is: H5D_CHUNKED
+
+Data as written to disk by hyberslabs:
+ [ 0 1 0 0 1 0 0 1 ]
+ [ 1 1 0 1 1 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 1 0 0 1 0 0 1 ]
+ [ 1 1 0 1 1 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+
+Data as read from disk by hyberslab:
+ [ 0 1 0 0 0 0 0 1 ]
+ [ 0 1 0 1 0 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 1 0 1 0 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Compact.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Compact.txt
new file mode 100644
index 0000000..e34f3c1
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Compact.txt
@@ -0,0 +1,8 @@
+Storage layout for DS1 is: H5D_COMPACT
+
+Data for DS1 is: 
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_External.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_External.txt
new file mode 100644
index 0000000..5878149
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_External.txt
@@ -0,0 +1,7 @@
+DS1 is stored in file: H5Ex_D_External.data
+DS1:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_FillValue.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_FillValue.txt
new file mode 100644
index 0000000..68d826b
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_FillValue.txt
@@ -0,0 +1,20 @@
+Dataset before being written to:
+ [ 99 99 99 99 99 99 99 ]
+ [ 99 99 99 99 99 99 99 ]
+ [ 99 99 99 99 99 99 99 ]
+ [ 99 99 99 99 99 99 99 ]
+
+Dataset after being written to:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
+Dataset after extension:
+ [ 0 -1 -2 -3 -4 -5 -6 99 99 99 ]
+ [ 0 0 0 0 0 0 0 99 99 99 ]
+ [ 0 1 2 3 4 5 6 99 99 99 ]
+ [ 0 2 4 6 8 10 12 99 99 99 ]
+ [ 99 99 99 99 99 99 99 99 99 99 ]
+ [ 99 99 99 99 99 99 99 99 99 99 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Gzip.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Gzip.txt
new file mode 100644
index 0000000..255a561
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Gzip.txt
@@ -0,0 +1,3 @@
+Filter type is: H5Z_FILTER_DEFLATE
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Hyperslab.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Hyperslab.txt
new file mode 100644
index 0000000..823dfcc
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Hyperslab.txt
@@ -0,0 +1,24 @@
+Original Data:
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+ [ 1 1 1 1 1 1 1 1 ]
+
+Data as written to disk by hyberslabs:
+ [ 0 1 0 0 1 0 0 1 ]
+ [ 1 1 0 1 1 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 1 0 0 1 0 0 1 ]
+ [ 1 1 0 1 1 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+
+Data as read from disk by hyberslab:
+ [ 0 1 0 0 0 0 0 1 ]
+ [ 0 1 0 1 0 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 0 0 0 0 0 0 0 ]
+ [ 0 1 0 1 0 0 1 1 ]
+ [ 0 0 0 0 0 0 0 0 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Nbit.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Nbit.txt
new file mode 100644
index 0000000..a768ba0
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Nbit.txt
@@ -0,0 +1,3 @@
+Filter type is: H5Z_FILTER_NBIT
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_ReadWrite.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_ReadWrite.txt
new file mode 100644
index 0000000..e021029
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_ReadWrite.txt
@@ -0,0 +1,6 @@
+DS1:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Shuffle.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Shuffle.txt
new file mode 100644
index 0000000..ea95f11
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Shuffle.txt
@@ -0,0 +1,5 @@
+Filter 0: Type is: H5Z_FILTER_SHUFFLE
+
+Filter 1: Type is: H5Z_FILTER_DEFLATE
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Sofloat.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Sofloat.txt
new file mode 100644
index 0000000..4d4b5d6
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Sofloat.txt
@@ -0,0 +1,6 @@
+Maximum value in write buffer is: 106.66666666666667
+Minimum value in write buffer is: 1.7692307692307692
+Filter type is: H5Z_FILTER_SCALEOFFSET
+
+Maximum value in DS1 is: 106.66169811320755
+Minimum value in DS1 is: 1.7692307692307692
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Soint.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Soint.txt
new file mode 100644
index 0000000..48d0d8c
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Soint.txt
@@ -0,0 +1,3 @@
+Filter type is: H5Z_FILTER_SCALEOFFSET
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Szip.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Szip.txt
new file mode 100644
index 0000000..a1c0d19
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Szip.txt
@@ -0,0 +1,3 @@
+Filter type is: H5Z_FILTER_SZIP
+
+Maximum value in DS1 is: 1890
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_Transform.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_Transform.txt
new file mode 100644
index 0000000..05257bc
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_Transform.txt
@@ -0,0 +1,15 @@
+Original Data:
+ [ 0  -1  -2  -3  -4  -5  -6 ]
+ [ 0  0  0  0  0  0  0 ]
+ [ 0  1  2  3  4  5  6 ]
+ [ 0  2  4  6  8  10  12 ]
+Data as written with transform 'x+1'
+ [ 1  0  -1  -2  -3  -4  -5 ]
+ [ 1  1  1  1  1  1  1 ]
+ [ 1  2  3  4  5  6  7 ]
+ [ 1  3  5  7  9  11  13 ]
+Data as written with transform  'x+1' and read with transform  'x-1'
+ [ 0  -1  -2  -3  -4  -5  -6 ]
+ [ 0  0  0  0  0  0  0 ]
+ [ 0  1  2  3  4  5  6 ]
+ [ 0  2  4  6  8  10  12 ]
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedAdd.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedAdd.txt
new file mode 100644
index 0000000..d3a7281
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedAdd.txt
@@ -0,0 +1,14 @@
+Dataset before extension:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
+Dataset after extension:
+ [ 0 -1 -2 -3 -4 -5 -6 7 8 9 ]
+ [ 0 0 0 0 0 0 0 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 2 4 6 8 10 12 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedGzip.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedGzip.txt
new file mode 100644
index 0000000..9e36281
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedGzip.txt
@@ -0,0 +1,16 @@
+Dataset before extension:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
+Filter type is: H5Z_FILTER_DEFLATE
+
+Dataset after extension:
+ [ 0 -1 -2 -3 -4 -5 -6 7 8 9 ]
+ [ 0 0 0 0 0 0 0 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 2 4 6 8 10 12 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+
diff --git a/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedMod.txt b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedMod.txt
new file mode 100644
index 0000000..15eee16
--- /dev/null
+++ b/java/examples/testfiles/examples.datasets.H5Ex_D_UnlimitedMod.txt
@@ -0,0 +1,14 @@
+Dataset before extension:
+ [ 0 -1 -2 -3 -4 -5 -6 ]
+ [ 0 0 0 0 0 0 0 ]
+ [ 0 1 2 3 4 5 6 ]
+ [ 0 2 4 6 8 10 12 ]
+
+Dataset after extension:
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+ [ 0 1 2 3 4 5 6 7 8 9 ]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Array.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Array.txt
new file mode 100644
index 0000000..7bcd8fa
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Array.txt
@@ -0,0 +1,21 @@
+DS1 [0]:
+ [0 0 0 0 0 ]
+ [0 -1 -2 -3 -4 ]
+ [0 -2 -4 -6 -8 ]
+
+DS1 [1]:
+ [0 1 2 3 4 ]
+ [1 1 1 1 1 ]
+ [2 1 0 -1 -2 ]
+
+DS1 [2]:
+ [0 2 4 6 8 ]
+ [2 3 4 5 6 ]
+ [4 4 4 4 4 ]
+
+DS1 [3]:
+ [0 3 6 9 12 ]
+ [3 5 7 9 11 ]
+ [6 7 8 9 10 ]
+
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_ArrayAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_ArrayAttribute.txt
new file mode 100644
index 0000000..7d27c0b
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_ArrayAttribute.txt
@@ -0,0 +1,21 @@
+A1 [0]:
+ [0 0 0 0 0 ]
+ [0 -1 -2 -3 -4 ]
+ [0 -2 -4 -6 -8 ]
+
+A1 [1]:
+ [0 1 2 3 4 ]
+ [1 1 1 1 1 ]
+ [2 1 0 -1 -2 ]
+
+A1 [2]:
+ [0 2 4 6 8 ]
+ [2 3 4 5 6 ]
+ [4 4 4 4 4 ]
+
+A1 [3]:
+ [0 3 6 9 12 ]
+ [3 5 7 9 11 ]
+ [6 7 8 9 10 ]
+
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Bit.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Bit.txt
new file mode 100644
index 0000000..57769b2
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Bit.txt
@@ -0,0 +1,6 @@
+DS1:
+ [{0, 0, 0, 0}{3, 0, 1, 1}{2, 0, 2, 2}{1, 0, 3, 3}{0, 0, 0, 0}{3, 0, 1, 1}{2, 0, 2, 2}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_BitAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_BitAttribute.txt
new file mode 100644
index 0000000..683bc7f
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_BitAttribute.txt
@@ -0,0 +1,6 @@
+A1:
+ [{0, 0, 0, 0}{3, 0, 1, 1}{2, 0, 2, 2}{1, 0, 3, 3}{0, 0, 0, 0}{3, 0, 1, 1}{2, 0, 2, 2}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+ [{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}{0, 0, 0, 0}]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Commit.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Commit.txt
new file mode 100644
index 0000000..e6d0bef
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Commit.txt
@@ -0,0 +1,6 @@
+Named datatype:  Sensor_Type:
+   Class: H5T_COMPOUND
+    Serial number
+    Location
+    Temperature (F)
+    Pressure (inHg)
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Compound.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Compound.txt
new file mode 100644
index 0000000..0505c78
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Compound.txt
@@ -0,0 +1,25 @@
+DS1 [0]:
+Serial number   : 1153
+Location        : Exterior (static)
+Temperature (F) : 53.23
+Pressure (inHg) : 24.57
+
+DS1 [1]:
+Serial number   : 1184
+Location        : Intake
+Temperature (F) : 55.12
+Pressure (inHg) : 22.95
+
+DS1 [2]:
+Serial number   : 1027
+Location        : Intake manifold
+Temperature (F) : 103.55
+Pressure (inHg) : 31.23
+
+DS1 [3]:
+Serial number   : 1313
+Location        : Exhaust manifold
+Temperature (F) : 1252.89
+Pressure (inHg) : 84.11
+
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_CompoundAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_CompoundAttribute.txt
new file mode 100644
index 0000000..dd77f8d
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_CompoundAttribute.txt
@@ -0,0 +1,25 @@
+A1 [0]:
+Serial number   : 1153
+Location        : Exterior (static)
+Temperature (F) : 53.23
+Pressure (inHg) : 24.57
+
+A1 [1]:
+Serial number   : 1184
+Location        : Intake
+Temperature (F) : 55.12
+Pressure (inHg) : 22.95
+
+A1 [2]:
+Serial number   : 1027
+Location        : Intake manifold
+Temperature (F) : 103.55
+Pressure (inHg) : 31.23
+
+A1 [3]:
+Serial number   : 1313
+Location        : Exhaust manifold
+Temperature (F) : 1252.89
+Pressure (inHg) : 84.11
+
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Float.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Float.txt
new file mode 100644
index 0000000..85d8ced
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Float.txt
@@ -0,0 +1,6 @@
+DS1:
+ [ 0.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000]
+ [ 2.0000 1.6667 2.4000 3.2857 4.2222 5.1818 6.1538]
+ [ 4.0000 2.3333 2.8000 3.5714 4.4444 5.3636 6.3077]
+ [ 6.0000 3.0000 3.2000 3.8571 4.6667 5.5455 6.4615]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_FloatAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_FloatAttribute.txt
new file mode 100644
index 0000000..cfa1f92
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_FloatAttribute.txt
@@ -0,0 +1,6 @@
+A1:
+ [ 0.0000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000]
+ [ 2.0000 1.6667 2.4000 3.2857 4.2222 5.1818 6.1538]
+ [ 4.0000 2.3333 2.8000 3.5714 4.4444 5.3636 6.3077]
+ [ 6.0000 3.0000 3.2000 3.8571 4.6667 5.5455 6.4615]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Integer.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Integer.txt
new file mode 100644
index 0000000..f686bd1
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Integer.txt
@@ -0,0 +1,6 @@
+DS1:
+ [ 0 -1 -2 -3 -4 -5 -6]
+ [ 0 0 0 0 0 0 0]
+ [ 0 1 2 3 4 5 6]
+ [ 0 2 4 6 8 10 12]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_IntegerAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_IntegerAttribute.txt
new file mode 100644
index 0000000..dccd4a6
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_IntegerAttribute.txt
@@ -0,0 +1,6 @@
+A1:
+ [ 0 -1 -2 -3 -4 -5 -6]
+ [ 0 0 0 0 0 0 0]
+ [ 0 1 2 3 4 5 6]
+ [ 0 2 4 6 8 10 12]
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReference.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReference.txt
new file mode 100644
index 0000000..827c042
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReference.txt
@@ -0,0 +1,4 @@
+DS1[0]:
+  ->H5G_GROUP: 
+DS1[1]:
+  ->H5G_DATASET: 
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt
new file mode 100644
index 0000000..fe3cdc0
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_ObjectReferenceAttribute.txt
@@ -0,0 +1,4 @@
+A1[0]:
+  ->H5G_GROUP: 
+A1[1]:
+  ->H5G_DATASET: 
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_Opaque.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_Opaque.txt
new file mode 100644
index 0000000..fb74236
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_Opaque.txt
@@ -0,0 +1,6 @@
+Datatype tag for DS1 is: "Character array"
+DS1[0]: OPAQUE0
+DS1[1]: OPAQUE1
+DS1[2]: OPAQUE2
+DS1[3]: OPAQUE3
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_OpaqueAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_OpaqueAttribute.txt
new file mode 100644
index 0000000..bc9a730
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_OpaqueAttribute.txt
@@ -0,0 +1,6 @@
+Datatype tag for A1 is: "Character array"
+A1[0]: OPAQUE0
+A1[1]: OPAQUE1
+A1[2]: OPAQUE2
+A1[3]: OPAQUE3
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_String.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_String.txt
new file mode 100644
index 0000000..4df6a41
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_String.txt
@@ -0,0 +1,5 @@
+DS1 [0]: Parting
+DS1 [1]: is such
+DS1 [2]: sweet
+DS1 [3]: sorrow.
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_StringAttribute.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_StringAttribute.txt
new file mode 100644
index 0000000..4df6a41
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_StringAttribute.txt
@@ -0,0 +1,5 @@
+DS1 [0]: Parting
+DS1 [1]: is such
+DS1 [2]: sweet
+DS1 [3]: sorrow.
+
diff --git a/java/examples/testfiles/examples.datatypes.H5Ex_T_VLString.txt b/java/examples/testfiles/examples.datatypes.H5Ex_T_VLString.txt
new file mode 100644
index 0000000..0322953
--- /dev/null
+++ b/java/examples/testfiles/examples.datatypes.H5Ex_T_VLString.txt
@@ -0,0 +1,4 @@
+DS1 [0]: Parting
+DS1 [1]: is such
+DS1 [2]: sweet
+DS1 [3]: sorrow.
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Compact.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Compact.txt
new file mode 100644
index 0000000..0a88d3f
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Compact.txt
@@ -0,0 +1,5 @@
+Group storage type for H5Ex_G_Compact1.h5 is: H5G_STORAGE_TYPE_SYMBOL_TABLE
+File size for H5Ex_G_Compact1.h5 is: 1832 bytes
+
+Group storage type for H5Ex_G_Compact2.h5 is: H5G_STORAGE_TYPE_COMPACT
+File size for H5Ex_G_Compact2.h5 is: 342 bytes
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Corder.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Corder.txt
new file mode 100644
index 0000000..2d959fc
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Corder.txt
@@ -0,0 +1,10 @@
+Traversing group using alphabetical indices:
+Index 0: 5
+Index 1: D
+Index 2: F
+Index 3: H
+Traversing group using creation order indices:
+Index 0: H
+Index 1: D
+Index 2: F
+Index 3: 5
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Create.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Create.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Intermediate.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Intermediate.txt
new file mode 100644
index 0000000..65a0fc2
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Intermediate.txt
@@ -0,0 +1,5 @@
+Objects in the file_id:
+/  (Group)
+/G1  (Group)
+/G1/G2  (Group)
+/G1/G2/G3  (Group)
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Iterate.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Iterate.txt
new file mode 100644
index 0000000..66a4ae9
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Iterate.txt
@@ -0,0 +1,5 @@
+Objects in root group:
+  Dataset: DS1
+  Datatype: DT1
+  Group: G1
+  Dataset: L1
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Phase.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Phase.txt
new file mode 100644
index 0000000..9e666d4
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Phase.txt
@@ -0,0 +1,15 @@
+1 Group : Storage type is H5G_STORAGE_TYPE_COMPACT
+2 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
+3 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
+4 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
+5 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
+6 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+7 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+
+6 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+5 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+4 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+3 Groups: Storage type is H5G_STORAGE_TYPE_DENSE
+2 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
+1 Group : Storage type is H5G_STORAGE_TYPE_COMPACT
+0 Groups: Storage type is H5G_STORAGE_TYPE_COMPACT
diff --git a/java/examples/testfiles/examples.groups.H5Ex_G_Visit.txt b/java/examples/testfiles/examples.groups.H5Ex_G_Visit.txt
new file mode 100644
index 0000000..126a588
--- /dev/null
+++ b/java/examples/testfiles/examples.groups.H5Ex_G_Visit.txt
@@ -0,0 +1,19 @@
+Objects in the file:
+/  (Group)
+/group1  (Group)
+/group1/dset1  (Dataset)
+/group1/group3  (Group)
+/group1/group3/group4  (Group)
+/group1/group3/group4/group1  (Group)
+/group1/group3/group4/group2  (Group)
+
+Links in the file:
+/group1  (Group)
+/group1/dset1  (Dataset)
+/group1/group3  (Group)
+/group1/group3/dset2  (Dataset)
+/group1/group3/group4  (Group)
+/group1/group3/group4/group1  (Group)
+/group1/group3/group4/group1/group5  (Group)
+/group1/group3/group4/group2  (Group)
+/group2  (Group)
diff --git a/java/examples/testfiles/examples.intro.H5_CreateAttribute.txt b/java/examples/testfiles/examples.intro.H5_CreateAttribute.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_CreateDataset.txt b/java/examples/testfiles/examples.intro.H5_CreateDataset.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_CreateFile.txt b/java/examples/testfiles/examples.intro.H5_CreateFile.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_CreateGroup.txt b/java/examples/testfiles/examples.intro.H5_CreateGroup.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_CreateGroupAbsoluteRelative.txt b/java/examples/testfiles/examples.intro.H5_CreateGroupAbsoluteRelative.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_CreateGroupDataset.txt b/java/examples/testfiles/examples.intro.H5_CreateGroupDataset.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/examples/testfiles/examples.intro.H5_ReadWrite.txt b/java/examples/testfiles/examples.intro.H5_ReadWrite.txt
new file mode 100644
index 0000000..e69de29
diff --git a/java/lib/ext/slf4j-nop-1.7.5.jar b/java/lib/ext/slf4j-nop-1.7.5.jar
new file mode 100644
index 0000000..e55bdd8
Binary files /dev/null and b/java/lib/ext/slf4j-nop-1.7.5.jar differ
diff --git a/java/lib/ext/slf4j-simple-1.7.5.jar b/java/lib/ext/slf4j-simple-1.7.5.jar
new file mode 100644
index 0000000..9dece31
Binary files /dev/null and b/java/lib/ext/slf4j-simple-1.7.5.jar differ
diff --git a/java/lib/hamcrest-core.jar b/java/lib/hamcrest-core.jar
new file mode 100644
index 0000000..9d5fe16
Binary files /dev/null and b/java/lib/hamcrest-core.jar differ
diff --git a/java/lib/junit.jar b/java/lib/junit.jar
new file mode 100644
index 0000000..aaf7444
Binary files /dev/null and b/java/lib/junit.jar differ
diff --git a/java/lib/simplelogger.properties b/java/lib/simplelogger.properties
new file mode 100644
index 0000000..119ee92
--- /dev/null
+++ b/java/lib/simplelogger.properties
@@ -0,0 +1,36 @@
+# SLF4J's SimpleLogger configuration file
+# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
+
+org.slf4j.simpleLogger.logFile=slf4j.simpleLogger.log
+
+# Default logging detail level for all instances of SimpleLogger.
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, defaults to "info".
+org.slf4j.simpleLogger.defaultLog=trace
+
+# Logging detail level for a SimpleLogger instance named "xxxxx".
+# Must be one of ("trace", "debug", "info", "warn", or "error").
+# If not specified, the default logging detail level is used.
+#org.slf4j.simpleLogger.log.xxxxx=
+
+# Set to true if you want the current date and time to be included in output messages.
+# Default is false, and will output the number of milliseconds elapsed since startup.
+#org.slf4j.simpleLogger.showDateTime=false
+
+# The date and time format to be used in the output messages.
+# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
+# If the format is not specified or is invalid, the default format is used.
+# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
+org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z
+
+# Set to true if you want to output the current thread name.
+# Defaults to true.
+org.slf4j.simpleLogger.showThreadName=true
+
+# Set to true if you want the Logger instance name to be included in output messages.
+# Defaults to true.
+org.slf4j.simpleLogger.showLogName=true
+
+# Set to true if you want the last component of the name to be included in output messages.
+# Defaults to false.
+org.slf4j.simpleLogger.showShortLogName=false
diff --git a/java/lib/slf4j-api-1.7.5.jar b/java/lib/slf4j-api-1.7.5.jar
new file mode 100644
index 0000000..8766455
Binary files /dev/null and b/java/lib/slf4j-api-1.7.5.jar differ
diff --git a/java/src/CMakeLists.txt b/java/src/CMakeLists.txt
new file mode 100644
index 0000000..ae78201
--- /dev/null
+++ b/java/src/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.1.0)
+PROJECT ( HDF5_JAVA_SRC C Java )
+
+#-----------------------------------------------------------------------------
+# Traverse source subdirectory
+#-----------------------------------------------------------------------------
+add_subdirectory (${HDF5_JAVA_SRC_SOURCE_DIR}/jni ${HDF5_JAVA_SRC_BINARY_DIR}/jni)
+add_subdirectory (${HDF5_JAVA_SRC_SOURCE_DIR}/hdf ${HDF5_JAVA_SRC_BINARY_DIR}/hdf)
diff --git a/java/src/Makefile.am b/java/src/Makefile.am
new file mode 100644
index 0000000..ff8b01a
--- /dev/null
+++ b/java/src/Makefile.am
@@ -0,0 +1,139 @@
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+SUBDIRS=jni
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+jarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+hdf5_javadir = $(libdir)
+
+pkgpath = hdf/hdf5lib
+CLASSPATH_ENV=CLASSPATH=.:$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$$CLASSPATH
+
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+hdf5_java_JAVA =  \
+	${pkgpath}/callbacks/Callbacks.java \
+	${pkgpath}/callbacks/H5A_iterate_cb.java \
+	${pkgpath}/callbacks/H5A_iterate_t.java \
+	${pkgpath}/callbacks/H5D_append_cb.java \
+	${pkgpath}/callbacks/H5D_append_t.java \
+	${pkgpath}/callbacks/H5D_iterate_cb.java \
+	${pkgpath}/callbacks/H5D_iterate_t.java \
+	${pkgpath}/callbacks/H5E_walk_cb.java \
+	${pkgpath}/callbacks/H5E_walk_t.java \
+	${pkgpath}/callbacks/H5L_iterate_cb.java \
+	${pkgpath}/callbacks/H5L_iterate_t.java \
+	${pkgpath}/callbacks/H5O_iterate_cb.java \
+	${pkgpath}/callbacks/H5O_iterate_t.java \
+    ${pkgpath}/callbacks/H5P_cls_close_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_close_func_t.java \
+    ${pkgpath}/callbacks/H5P_cls_copy_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_copy_func_t.java \
+    ${pkgpath}/callbacks/H5P_cls_create_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_create_func_t.java \
+    ${pkgpath}/callbacks/H5P_prp_close_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_compare_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_copy_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_create_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_delete_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_get_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_set_func_cb.java \
+ 	${pkgpath}/callbacks/H5P_iterate_cb.java \
+	${pkgpath}/callbacks/H5P_iterate_t.java \
+	${pkgpath}/exceptions/HDF5AtomException.java  \
+	${pkgpath}/exceptions/HDF5AttributeException.java  \
+	${pkgpath}/exceptions/HDF5BtreeException.java  \
+	${pkgpath}/exceptions/HDF5DataFiltersException.java  \
+	${pkgpath}/exceptions/HDF5DataStorageException.java  \
+	${pkgpath}/exceptions/HDF5DatasetInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5DataspaceInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5DatatypeInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5Exception.java  \
+	${pkgpath}/exceptions/HDF5ExternalFileListException.java  \
+	${pkgpath}/exceptions/HDF5FileInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5FunctionArgumentException.java  \
+	${pkgpath}/exceptions/HDF5FunctionEntryExitException.java  \
+	${pkgpath}/exceptions/HDF5HeapException.java  \
+	${pkgpath}/exceptions/HDF5InternalErrorException.java  \
+	${pkgpath}/exceptions/HDF5JavaException.java  \
+	${pkgpath}/exceptions/HDF5LibraryException.java  \
+	${pkgpath}/exceptions/HDF5LowLevelIOException.java  \
+	${pkgpath}/exceptions/HDF5MetaDataCacheException.java  \
+	${pkgpath}/exceptions/HDF5ObjectHeaderException.java  \
+	${pkgpath}/exceptions/HDF5PropertyListInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5ReferenceException.java  \
+	${pkgpath}/exceptions/HDF5ResourceUnavailableException.java  \
+	${pkgpath}/exceptions/HDF5SymbolTableException.java \
+	${pkgpath}/structs/H5_ih_info_t.java \
+	${pkgpath}/structs/H5A_info_t.java \
+	${pkgpath}/structs/H5E_error2_t.java \
+	${pkgpath}/structs/H5F_info2_t.java \
+	${pkgpath}/structs/H5G_info_t.java \
+	${pkgpath}/structs/H5L_info_t.java \
+	${pkgpath}/structs/H5O_info_t.java \
+	${pkgpath}/structs/H5O_hdr_info_t.java \
+	${pkgpath}/structs/H5AC_cache_config_t.java \
+	${pkgpath}/H5.java  \
+	${pkgpath}/HDF5Constants.java  \
+	${pkgpath}/HDF5GroupInfo.java  \
+	${pkgpath}/HDFArray.java  \
+	${pkgpath}/HDFNativeData.java
+
+$(jarfile): classhdf5_java.stamp classes docs
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+hdf5_java_DATA = $(jarfile)
+
+.PHONY: docs classes
+
+WINDOWTITLE = 'HDF5 Java'
+DOCTITLE = '<h1>HDF5 Java Wrapper</h1>'
+SRCDIR = '$(pkgpath)'
+
+docs:
+	$(JAVADOC) -sourcepath $(srcdir) -d javadoc -use -splitIndex -windowtitle $(WINDOWTITLE) -doctitle $(DOCTITLE) -J-Xmx180m -verbose -overview $(top_srcdir)/java/src/hdf/overview.html -classpath $(CLASSPATH_ENV) hdf.hdf5lib
+
+CLEANFILES = classhdf5_java.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/callbacks/*.class $(JAVAROOT)/$(pkgpath)/exceptions/*.class $(JAVAROOT)/$(pkgpath)/structs/*.class $(JAVAROOT)/$(pkgpath)/*.class
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classhdf5_java.stamp
+
+
+# Clean examples when check-clean is invoked
+check-clean :: ;
+
+#include $(top_srcdir)/config/conclude.am
diff --git a/java/src/Makefile.in b/java/src/Makefile.in
new file mode 100644
index 0000000..5d7667d
--- /dev/null
+++ b/java/src/Makefile.in
@@ -0,0 +1,1050 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+# but does so in the correct order.  You can alternatively invoke make from
+# each subdirectory manually.
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = java/src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__installdirs = "$(DESTDIR)$(hdf5_javadir)" \
+	"$(DESTDIR)$(hdf5_javadir)"
+am__java_sources = $(hdf5_java_JAVA)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+DATA = $(hdf5_java_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/config/commence.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+SUBDIRS = jni
+JAVAROOT = .classes
+jarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+hdf5_javadir = $(libdir)
+pkgpath = hdf/hdf5lib
+CLASSPATH_ENV = CLASSPATH=.:$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$$CLASSPATH
+hdf5_java_JAVA = \
+	${pkgpath}/callbacks/Callbacks.java \
+	${pkgpath}/callbacks/H5A_iterate_cb.java \
+	${pkgpath}/callbacks/H5A_iterate_t.java \
+	${pkgpath}/callbacks/H5D_append_cb.java \
+	${pkgpath}/callbacks/H5D_append_t.java \
+	${pkgpath}/callbacks/H5D_iterate_cb.java \
+	${pkgpath}/callbacks/H5D_iterate_t.java \
+	${pkgpath}/callbacks/H5E_walk_cb.java \
+	${pkgpath}/callbacks/H5E_walk_t.java \
+	${pkgpath}/callbacks/H5L_iterate_cb.java \
+	${pkgpath}/callbacks/H5L_iterate_t.java \
+	${pkgpath}/callbacks/H5O_iterate_cb.java \
+	${pkgpath}/callbacks/H5O_iterate_t.java \
+    ${pkgpath}/callbacks/H5P_cls_close_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_close_func_t.java \
+    ${pkgpath}/callbacks/H5P_cls_copy_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_copy_func_t.java \
+    ${pkgpath}/callbacks/H5P_cls_create_func_cb.java \
+    ${pkgpath}/callbacks/H5P_cls_create_func_t.java \
+    ${pkgpath}/callbacks/H5P_prp_close_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_compare_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_copy_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_create_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_delete_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_get_func_cb.java \
+    ${pkgpath}/callbacks/H5P_prp_set_func_cb.java \
+ 	${pkgpath}/callbacks/H5P_iterate_cb.java \
+	${pkgpath}/callbacks/H5P_iterate_t.java \
+	${pkgpath}/exceptions/HDF5AtomException.java  \
+	${pkgpath}/exceptions/HDF5AttributeException.java  \
+	${pkgpath}/exceptions/HDF5BtreeException.java  \
+	${pkgpath}/exceptions/HDF5DataFiltersException.java  \
+	${pkgpath}/exceptions/HDF5DataStorageException.java  \
+	${pkgpath}/exceptions/HDF5DatasetInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5DataspaceInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5DatatypeInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5Exception.java  \
+	${pkgpath}/exceptions/HDF5ExternalFileListException.java  \
+	${pkgpath}/exceptions/HDF5FileInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5FunctionArgumentException.java  \
+	${pkgpath}/exceptions/HDF5FunctionEntryExitException.java  \
+	${pkgpath}/exceptions/HDF5HeapException.java  \
+	${pkgpath}/exceptions/HDF5InternalErrorException.java  \
+	${pkgpath}/exceptions/HDF5JavaException.java  \
+	${pkgpath}/exceptions/HDF5LibraryException.java  \
+	${pkgpath}/exceptions/HDF5LowLevelIOException.java  \
+	${pkgpath}/exceptions/HDF5MetaDataCacheException.java  \
+	${pkgpath}/exceptions/HDF5ObjectHeaderException.java  \
+	${pkgpath}/exceptions/HDF5PropertyListInterfaceException.java  \
+	${pkgpath}/exceptions/HDF5ReferenceException.java  \
+	${pkgpath}/exceptions/HDF5ResourceUnavailableException.java  \
+	${pkgpath}/exceptions/HDF5SymbolTableException.java \
+	${pkgpath}/structs/H5_ih_info_t.java \
+	${pkgpath}/structs/H5A_info_t.java \
+	${pkgpath}/structs/H5E_error2_t.java \
+	${pkgpath}/structs/H5F_info2_t.java \
+	${pkgpath}/structs/H5G_info_t.java \
+	${pkgpath}/structs/H5L_info_t.java \
+	${pkgpath}/structs/H5O_info_t.java \
+	${pkgpath}/structs/H5O_hdr_info_t.java \
+	${pkgpath}/structs/H5AC_cache_config_t.java \
+	${pkgpath}/H5.java  \
+	${pkgpath}/HDF5Constants.java  \
+	${pkgpath}/HDF5GroupInfo.java  \
+	${pkgpath}/HDFArray.java  \
+	${pkgpath}/HDFNativeData.java
+
+hdf5_java_DATA = $(jarfile)
+WINDOWTITLE = 'HDF5 Java'
+DOCTITLE = '<h1>HDF5 Java Wrapper</h1>'
+SRCDIR = '$(pkgpath)'
+CLEANFILES = classhdf5_java.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/callbacks/*.class $(JAVAROOT)/$(pkgpath)/exceptions/*.class $(JAVAROOT)/$(pkgpath)/structs/*.class $(JAVAROOT)/$(pkgpath)/*.class
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classhdf5_java.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+install-hdf5_javaJAVA: classhdf5_java.stamp
+	@$(NORMAL_INSTALL)
+	@test -n "$(hdf5_java_JAVA)" && test -n "$(hdf5_javadir)" || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(hdf5_javadir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(hdf5_javadir)"; \
+	set x *.class; shift; test "$$1" != "*.class" || exit 0; \
+	echo " $(INSTALL_DATA)" "$$@" "'$(DESTDIR)$(hdf5_javadir)/$$p'"; \
+	$(INSTALL_DATA) "$$@" "$(DESTDIR)$(hdf5_javadir)"
+
+uninstall-hdf5_javaJAVA:
+	@$(NORMAL_UNINSTALL)
+	@test -n "$(hdf5_java_JAVA)" && test -n "$(hdf5_javadir)" || exit 0; \
+	set x *.class; shift; test "$$1" != "*.class" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(hdf5_javadir)' && rm -f" "$$@" ")"; \
+	cd "$(DESTDIR)$(hdf5_javadir)" && rm -f "$$@"
+
+clean-hdf5_javaJAVA:
+	-rm -f *.class classhdf5_java.stamp
+install-hdf5_javaDATA: $(hdf5_java_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(hdf5_java_DATA)'; test -n "$(hdf5_javadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(hdf5_javadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(hdf5_javadir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hdf5_javadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(hdf5_javadir)" || exit $$?; \
+	done
+
+uninstall-hdf5_javaDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(hdf5_java_DATA)'; test -n "$(hdf5_javadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(hdf5_javadir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile classhdf5_java.stamp $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(hdf5_javadir)" "$(DESTDIR)$(hdf5_javadir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-hdf5_javaJAVA clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-hdf5_javaDATA install-hdf5_javaJAVA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-hdf5_javaDATA uninstall-hdf5_javaJAVA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-hdf5_javaJAVA clean-libtool \
+	cscopelist-am ctags ctags-am distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-hdf5_javaDATA install-hdf5_javaJAVA \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-hdf5_javaDATA uninstall-hdf5_javaJAVA
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classhdf5_java.stamp classes docs
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: docs classes
+
+docs:
+	$(JAVADOC) -sourcepath $(srcdir) -d javadoc -use -splitIndex -windowtitle $(WINDOWTITLE) -doctitle $(DOCTITLE) -J-Xmx180m -verbose -overview $(top_srcdir)/java/src/hdf/overview.html -classpath $(CLASSPATH_ENV) hdf.hdf5lib
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classhdf5_java.stamp
+
+# Clean examples when check-clean is invoked
+check-clean :: ;
+
+#include $(top_srcdir)/config/conclude.am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/src/hdf/CMakeLists.txt b/java/src/hdf/CMakeLists.txt
new file mode 100644
index 0000000..f465da9
--- /dev/null
+++ b/java/src/hdf/CMakeLists.txt
@@ -0,0 +1,4 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDF5_JAVA_HDF)
+
+add_subdirectory (${HDF5_JAVA_HDF_SOURCE_DIR}/hdf5lib     hdf5lib)
diff --git a/java/src/hdf/hdf5lib/CMakeLists.txt b/java/src/hdf/hdf5lib/CMakeLists.txt
new file mode 100644
index 0000000..3f70bce
--- /dev/null
+++ b/java/src/hdf/hdf5lib/CMakeLists.txt
@@ -0,0 +1,127 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDF5_JAVA_HDF_HDF5 Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_HDF_HDF5_SOURCE_DIR}
+    ${HDF5_JAVA_HDF_HDF5_BINARY_DIR}
+    ${HDF5_JAVA_LIB_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${HDF5_JAVA_HDF5_LIB_CORENAME}.dir/hdf/hdf5lib
+)
+
+SET_GLOBAL_VARIABLE (HDF5_JAVA_SOURCE_PACKAGES
+    "${HDFJAVA_SOURCE_PACKAGES};hdf.hdf5lib.callbacks;hdf.hdf5lib.exceptions;hdf.hdf5lib.structs;hdf.hdf5lib"
+)
+
+set (HDF5_JAVA_HDF_HDF5_CALLBACKS_SRCS
+    callbacks/H5A_iterate_cb.java
+    callbacks/H5A_iterate_t.java
+    callbacks/H5D_append_cb.java
+    callbacks/H5D_append_t.java
+    callbacks/H5D_iterate_cb.java
+    callbacks/H5D_iterate_t.java
+    callbacks/H5E_walk_cb.java
+    callbacks/H5E_walk_t.java
+    callbacks/H5L_iterate_cb.java
+    callbacks/H5L_iterate_t.java
+    callbacks/H5O_iterate_cb.java
+    callbacks/H5O_iterate_t.java
+    callbacks/H5P_cls_close_func_cb.java
+    callbacks/H5P_cls_close_func_t.java
+    callbacks/H5P_cls_copy_func_cb.java
+    callbacks/H5P_cls_copy_func_t.java
+    callbacks/H5P_cls_create_func_cb.java
+    callbacks/H5P_cls_create_func_t.java
+    callbacks/H5P_prp_close_func_cb.java
+    callbacks/H5P_prp_compare_func_cb.java
+    callbacks/H5P_prp_copy_func_cb.java
+    callbacks/H5P_prp_create_func_cb.java
+    callbacks/H5P_prp_delete_func_cb.java
+    callbacks/H5P_prp_get_func_cb.java
+    callbacks/H5P_prp_set_func_cb.java
+    callbacks/H5P_iterate_cb.java
+    callbacks/H5P_iterate_t.java
+    callbacks/Callbacks.java
+)
+
+set (HDF5_JAVA_HDF_HDF5_EXCEPTIONS_SRCS
+    exceptions/HDF5Exception.java
+    exceptions/HDF5AtomException.java
+    exceptions/HDF5AttributeException.java
+    exceptions/HDF5BtreeException.java
+    exceptions/HDF5DataFiltersException.java
+    exceptions/HDF5DatasetInterfaceException.java
+    exceptions/HDF5DataspaceInterfaceException.java
+    exceptions/HDF5DataStorageException.java
+    exceptions/HDF5DatatypeInterfaceException.java
+    exceptions/HDF5ExternalFileListException.java
+    exceptions/HDF5FileInterfaceException.java
+    exceptions/HDF5FunctionArgumentException.java
+    exceptions/HDF5FunctionEntryExitException.java
+    exceptions/HDF5HeapException.java
+    exceptions/HDF5InternalErrorException.java
+    exceptions/HDF5JavaException.java
+    exceptions/HDF5LibraryException.java
+    exceptions/HDF5LowLevelIOException.java
+    exceptions/HDF5MetaDataCacheException.java
+    exceptions/HDF5ObjectHeaderException.java
+    exceptions/HDF5PropertyListInterfaceException.java
+    exceptions/HDF5ReferenceException.java
+    exceptions/HDF5ResourceUnavailableException.java
+    exceptions/HDF5SymbolTableException.java
+)
+
+set (HDF5_JAVA_HDF_HDF5_STRUCTS_SRCS
+    structs/H5_ih_info_t.java
+    structs/H5A_info_t.java
+    structs/H5AC_cache_config_t.java
+    structs/H5E_error2_t.java
+    structs/H5F_info2_t.java
+    structs/H5G_info_t.java
+    structs/H5L_info_t.java
+    structs/H5O_hdr_info_t.java
+    structs/H5O_info_t.java
+)
+
+set (HDF5_JAVA_HDF_HDF5_SRCS
+    HDFArray.java
+    HDF5Constants.java
+    HDF5GroupInfo.java
+    HDFNativeData.java
+    H5.java
+)
+
+set (CMAKE_JNI_TARGET TRUE)
+
+file (WRITE ${PROJECT_BINARY_DIR}/Manifest.txt
+"
+"
+)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_LOGGING_JAR}")
+
+add_jar (${HDF5_JAVA_HDF5_LIB_TARGET} OUTPUT_NAME "${HDF5_JAVA_HDF5_LIB_TARGET}-${HDF5_PACKAGE_VERSION}" OUTPUT_DIR ${CMAKE_JAVA_TARGET_OUTPUT_DIR} MANIFEST ${PROJECT_BINARY_DIR}/Manifest.txt ${HDF5_JAVA_HDF_HDF5_CALLBACKS_SRCS} ${HDF5_JAVA_HDF_HDF5_EXCEPTIONS_SRCS} ${HDF5_JAVA_HDF_HDF5_STRUCTS_SRCS} ${HDF5_JAVA_HDF_HDF5_SRCS})
+install_jar (${HDF5_JAVA_HDF5_LIB_TARGET} LIBRARY DESTINATION ${HDF5_INSTALL_JAR_DIR} COMPONENT libraries)
+#if (NOT WIN32)
+#  install_jni_symlink (${HDF5_JAVA_HDF5_LIB_TARGET} ${HDF5_INSTALL_JAR_DIR} libraries)
+#endif (NOT WIN32)
+
+get_target_property (${HDF5_JAVA_HDF5_LIB_TARGET}_JAR_FILE ${HDF5_JAVA_HDF5_LIB_TARGET} JAR_FILE)
+SET_GLOBAL_VARIABLE (HDF5_JAVA_JARS_TO_EXPORT "${HDF5_JAVA_JARS_TO_EXPORT};${${HDF5_JAVA_HDF5_LIB_TARGET}_JAR_FILE}")
+SET_GLOBAL_VARIABLE (HDF5_JAVA_JARS ${${HDF5_JAVA_HDF5_LIB_TARGET}_JAR_FILE})
+
+add_dependencies (${HDF5_JAVA_HDF5_LIB_TARGET} ${HDF5_JAVA_JNI_LIB_TARGET})
+set_target_properties (${HDF5_JAVA_HDF5_LIB_TARGET} PROPERTIES FOLDER libraries/java)
+
+create_javadoc(hdf5_java_doc
+    FILES ${HDF5_JAVA_HDF_HDF5_CALLBACKS_SRCS} ${HDF5_JAVA_HDF_HDF5_EXCEPTIONS_SRCS} ${HDF5_JAVA_HDF_HDF5_STRUCTS_SRCS} ${HDF5_JAVA_HDF_HDF5_SRCS}
+    OVERVIEW ${HDF5_JAVA_HDF5_SRC_DIR}/overview.html
+    CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH}
+    WINDOWTITLE "HDF5 Java"
+    DOCTITLE "<h1>HDF5 Java Wrapper</h1>"
+    INSTALLPATH ${HDF5_INSTALL_DATA_DIR}
+    AUTHOR TRUE
+    USE TRUE
+    VERSION TRUE
+)
diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java
new file mode 100644
index 0000000..7a14f8c
--- /dev/null
+++ b/java/src/hdf/hdf5lib/H5.java
@@ -0,0 +1,9283 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+package hdf.hdf5lib;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import hdf.hdf5lib.callbacks.H5A_iterate_cb;
+import hdf.hdf5lib.callbacks.H5A_iterate_t;
+import hdf.hdf5lib.callbacks.H5D_iterate_cb;
+import hdf.hdf5lib.callbacks.H5D_iterate_t;
+import hdf.hdf5lib.callbacks.H5E_walk_cb;
+import hdf.hdf5lib.callbacks.H5E_walk_t;
+import hdf.hdf5lib.callbacks.H5L_iterate_cb;
+import hdf.hdf5lib.callbacks.H5L_iterate_t;
+import hdf.hdf5lib.callbacks.H5O_iterate_cb;
+import hdf.hdf5lib.callbacks.H5O_iterate_t;
+import hdf.hdf5lib.callbacks.H5P_cls_close_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_close_func_t;
+import hdf.hdf5lib.callbacks.H5P_cls_copy_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_copy_func_t;
+import hdf.hdf5lib.callbacks.H5P_cls_create_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_create_func_t;
+import hdf.hdf5lib.callbacks.H5P_prp_set_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_get_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_delete_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_copy_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_compare_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_close_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_create_func_cb;
+import hdf.hdf5lib.callbacks.H5P_iterate_cb;
+import hdf.hdf5lib.callbacks.H5P_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5JavaException;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5AC_cache_config_t;
+import hdf.hdf5lib.structs.H5A_info_t;
+import hdf.hdf5lib.structs.H5E_error2_t;
+import hdf.hdf5lib.structs.H5F_info2_t;
+import hdf.hdf5lib.structs.H5G_info_t;
+import hdf.hdf5lib.structs.H5L_info_t;
+import hdf.hdf5lib.structs.H5O_info_t;
+
+/**
+ * This class is the Java interface for the HDF5 library.
+ * <p>
+ * This code is the called by Java programs to access the entry points of the HDF5 library. Each routine wraps a single
+ * HDF5 entry point, generally with the arguments and return codes analogous to the C interface.
+ * <p>
+ * For details of the HDF5 library, see the HDF5 Documentation at: <a
+ * href="http://hdfgroup.org/HDF5/">http://hdfgroup.org/HDF5/</a>
+ * <hr>
+ * <p>
+ * <b>Mapping of arguments for Java</b>
+ *
+ * <p>
+ * In general, arguments to the HDF Java API are straightforward translations from the 'C' API described in the HDF
+ * Reference Manual.
+ *
+ * <center>
+ * <table border=2 cellpadding=2>
+ * <caption><b>HDF-5 C types to Java types</b> </caption>
+ * <tr>
+ * <td><b>HDF-5</b></td>
+ * <td><b>Java</b></td>
+ * </tr>
+ * <tr>
+ * <td>H5T_NATIVE_INT</td>
+ * <td>int, Integer</td>
+ * </tr>
+ * <tr>
+ * <td>H5T_NATIVE_SHORT</td>
+ * <td>short, Short</td>
+ * </tr>
+ * <tr>
+ * <td>H5T_NATIVE_FLOAT</td>
+ * <td>float, Float</td>
+ * </tr>
+ * <tr>
+ * <td>H5T_NATIVE_DOUBLE</td>
+ * <td>double, Double</td>
+ * </tr>
+ * <tr>
+ * <td>H5T_NATIVE_CHAR</td>
+ * <td>byte, Byte</td>
+ * </tr>
+ * <tr>
+ * <td>H5T_C_S1</td>
+ * <td>java.lang.String</td>
+ * </tr>
+ * <tr>
+ * <td>void * <BR>
+ * (i.e., pointer to `Any')</td>
+ * <td>Special -- see HDFArray</td>
+ * </tr>
+ * </table>
+ * </center>
+ * <center> <b>General Rules for Passing Arguments and Results</b> </center>
+ * <p>
+ * In general, arguments passed <b>IN</b> to Java are the analogous basic types, as above. The exception is for arrays,
+ * which are discussed below.
+ * <p>
+ * The <i>return value</i> of Java methods is also the analogous type, as above. A major exception to that rule is that
+ * all HDF functions that return SUCCEED/FAIL are declared <i>boolean</i> in the Java version, rather than <i>int</i> as
+ * in the C. Functions that return a value or else FAIL are declared the equivalent to the C function. However, in most
+ * cases the Java method will raise an exception instead of returning an error code. See <a href="#ERRORS">Errors and
+ * Exceptions</a> below.
+ * <p>
+ * Java does not support pass by reference of arguments, so arguments that are returned through <b>OUT</b> parameters
+ * must be wrapped in an object or array. The Java API for HDF consistently wraps arguments in arrays.
+ * <p>
+ * For instance, a function that returns two integers is declared:
+ *
+ * <pre>
+ *       h_err_t HDF5dummy( int *a1, int *a2)
+ * </pre>
+ *
+ * For the Java interface, this would be declared:
+ *
+ * <pre>
+ * public synchronized static native int HDF5dummy(int args[]);
+ * </pre>
+ *
+ * where <i>a1</i> is <i>args[0]</i> and <i>a2</i> is <i>args[1]</i>, and would be invoked:
+ *
+ * <pre>
+ * H5.HDF5dummy(a);
+ * </pre>
+ *
+ * <p>
+ * All the routines where this convention is used will have specific documentation of the details, given below.
+ * <p>
+ * <a NAME="ARRAYS"> <b>Arrays</b> </a>
+ * <p>
+ * HDF5 needs to read and write multi-dimensional arrays of any number type (and records). The HDF5 API describes the
+ * layout of the source and destination, and the data for the array passed as a block of bytes, for instance,
+ *
+ * <pre>
+ *      herr_t H5Dread(int fid, int filetype, int memtype, int memspace,
+ *      void * data);
+ * </pre>
+ *
+ * <p>
+ * where ``void *'' means that the data may be any valid numeric type, and is a contiguous block of bytes that is the
+ * data for a multi-dimensional array. The other parameters describe the dimensions, rank, and datatype of the array on
+ * disk (source) and in memory (destination).
+ * <p>
+ * For Java, this ``ANY'' is a problem, as the type of data must always be declared. Furthermore, multidimensional
+ * arrays are definitely <i>not</i> layed out contiguously in memory. It would be infeasible to declare a separate
+ * routine for every combination of number type and dimensionality. For that reason, the <a
+ * href="./hdf.hdf5lib.HDFArray.html"><b>HDFArray</b></a> class is used to discover the type, shape, and size of the
+ * data array at run time, and to convert to and from a contiguous array of bytes in synchronized static native C order.
+ * <p>
+ * The upshot is that any Java array of numbers (either primitive or sub-classes of type <b>Number</b>) can be passed as
+ * an ``Object'', and the Java API will translate to and from the appropriate packed array of bytes needed by the C
+ * library. So the function above would be declared:
+ *
+ * <pre>
+ * public synchronized static native int H5Dread(int fid, int filetype, int memtype, int memspace, Object data);
+ * </pre>
+ *            OPEN_IDS.addElement(id);
+
+ * and the parameter <i>data</i> can be any multi-dimensional array of numbers, such as float[][], or int[][][], or
+ * Double[][].
+ * <p>
+ * <a NAME="CONSTANTS"> <b>HDF-5 Constants</b></a>
+ * <p>
+ * The HDF-5 API defines a set of constants and enumerated values. Most of these values are available to Java programs
+ * via the class <a href="./hdf.hdf5lib.HDF5Constants.html"> <b>HDF5Constants</b></a>. For example, the parameters for
+ * the h5open() call include two numeric values, <b><i>HDFConstants.H5F_ACC_RDWR</i></b> and
+ * <b><i>HDF5Constants.H5P_DEFAULT</i></b>. As would be expected, these numbers correspond to the C constants
+ * <b><i>H5F_ACC_RDWR</i></b> and <b><i>H5P_DEFAULT</i></b>.
+ * <p>
+ * The HDF-5 API defines a set of values that describe number types and sizes, such as "H5T_NATIVE_INT" and "hsize_t".
+ * These values are determined at run time by the HDF-5 C library. To support these parameters, the Java class <a
+ * href="./hdf.hdf5lib.HDF5CDataTypes.html"> <b>HDF5CDataTypes</b></a> looks up the values when initiated. The values
+ * can be accessed as public variables of the Java class, such as:
+ *
+ * <pre>
+ * int data_type = HDF5CDataTypes.JH5T_NATIVE_INT;
+ * </pre>
+ *
+ * The Java application uses both types of constants the same way, the only difference is that the
+ * <b><i>HDF5CDataTypes</i></b> may have different values on different platforms.
+ * <p>
+ * <a NAME="ERRORS"> <b>Error handling and Exceptions</b></a>
+ * <p>
+ * The HDF5 error API (H5E) manages the behavior of the error stack in the HDF-5 library. This API is omitted from the
+ * JHI5. Errors are converted into Java exceptions. This is totally different from the C interface, but is very natural
+ * for Java programming.
+ * <p>
+ * The exceptions of the JHI5 are organized as sub-classes of the class <a
+ * href="./hdf.hdf5lib.exceptions.HDF5Exception.html"> <b>HDF5Exception</b></a>. There are two subclasses of
+ * <b>HDF5Exception</b>, <a href="./hdf.hdf5lib.exceptions.HDF5LibraryException.html"> <b>HDF5LibraryException</b></a>
+ * and <a href="./hdf.hdf5lib.exceptions.HDF5JavaException.html"> <b>HDF5JavaException</b></a>. The sub-classes of the
+ * former represent errors from the HDF-5 C library, while sub-classes of the latter represent errors in the JHI5
+ * wrapper and support code.
+ * <p>
+ * The super-class <b><i>HDF5LibraryException</i></b> implements the method '<b><i>printStackTrace()</i></b>', which
+ * prints out the HDF-5 error stack, as described in the HDF-5 C API <i><b>H5Eprint()</b>.</i> This may be used by Java
+ * exception handlers to print out the HDF-5 error stack.
+ * <hr>
+ *
+ * @version HDF5 1.10 <BR>
+ *          <b>See also: <a href ="./hdf.hdf5lib.HDFArray.html"> hdf.hdf5lib.HDFArray</a> </b><BR>
+ *          <a href ="./hdf.hdf5lib.HDF5Constants.html"> hdf.hdf5lib.HDF5Constants</a><BR>
+ *          <a href ="./hdf.hdf5lib.HDF5CDataTypes.html"> hdf.hdf5lib.HDF5CDataTypes</a><BR>
+ *          <a href ="./hdf.hdf5lib.HDF5Exception.html"> hdf.hdf5lib.HDF5Exception</a><BR>
+ *          <a href="http://hdfgroup.org/HDF5/"> http://hdfgroup.org/HDF5"</a>
+ **/
+public class H5 implements java.io.Serializable {
+    /**
+     *
+     */
+    private static final long serialVersionUID = 6129888282117053288L;
+
+    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(H5.class);
+
+    /**
+     * The version number of the HDF5 library:
+     * LIB_VERSION[0]: The major version of the library.
+     * LIB_VERSION[1]: The minor version of the library.
+     * LIB_VERSION[2]: The release number of the library.
+     *
+     * Make sure to update the versions number when a different library is used.
+     */
+    public final static int LIB_VERSION[] = { 1, 10, 0 };
+
+    public final static String H5PATH_PROPERTY_KEY = "hdf.hdf5lib.H5.hdf5lib";
+
+    // add system property to load library by name from library path, via
+    // System.loadLibrary()
+    public final static String H5_LIBRARY_NAME_PROPERTY_KEY = "hdf.hdf5lib.H5.loadLibraryName";
+    private static String s_libraryName;
+    private static boolean isLibraryLoaded = false;
+
+    private final static boolean IS_CRITICAL_PINNING = true;
+    // change from Vector to LinkedHashSet - jp 6-Oct-2014
+    private final static LinkedHashSet<Long> OPEN_IDS = new LinkedHashSet<Long>();
+
+    static {
+        loadH5Lib();
+    }
+
+    public static void loadH5Lib() {
+        // Make sure that the library is loaded only once
+        if (isLibraryLoaded)
+            return;
+
+        // first try loading library by name from user supplied library path
+        s_libraryName = System.getProperty(H5_LIBRARY_NAME_PROPERTY_KEY, null);
+        String mappedName = null;
+        if ((s_libraryName != null) && (s_libraryName.length() > 0)) {
+            try {
+                mappedName = System.mapLibraryName(s_libraryName);
+                System.loadLibrary(s_libraryName);
+                isLibraryLoaded = true;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                isLibraryLoaded = false;
+            }
+            finally {
+                log.info("HDF5 library: " + s_libraryName);
+                log.debug(" resolved to: " + mappedName + "; ");
+                log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded from system property");
+            }
+        }
+
+        if (!isLibraryLoaded) {
+            // else try loading library via full path
+            String filename = System.getProperty(H5PATH_PROPERTY_KEY, null);
+            if ((filename != null) && (filename.length() > 0)) {
+                File h5dll = new File(filename);
+                if (h5dll.exists() && h5dll.canRead() && h5dll.isFile()) {
+                    try {
+                        System.load(filename);
+                        isLibraryLoaded = true;
+                    }
+                    catch (Throwable err) {
+                        err.printStackTrace();
+                        isLibraryLoaded = false;
+                    }
+                    finally {
+                        log.info("HDF5 library: ");
+                        log.debug(filename);
+                        log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded.");
+                    }
+                }
+                else {
+                    isLibraryLoaded = false;
+                    throw (new UnsatisfiedLinkError("Invalid HDF5 library, " + filename));
+                }
+            }
+        }
+
+        // else load standard library
+        if (!isLibraryLoaded) {
+            try {
+                s_libraryName = "hdf5_java";
+                mappedName = System.mapLibraryName(s_libraryName);
+                System.loadLibrary("hdf5_java");
+                isLibraryLoaded = true;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                isLibraryLoaded = false;
+            }
+            finally {
+                log.info("HDF5 library: " + s_libraryName);
+                log.debug(" resolved to: " + mappedName + "; ");
+                log.info((isLibraryLoaded ? "" : " NOT") + " successfully loaded from java.library.path");
+            }
+        }
+
+        /* Important! Exit quietly */
+        try {
+            H5.H5dont_atexit();
+        }
+        catch (HDF5LibraryException e) {
+            System.exit(1);
+        }
+
+        /* Important! Disable error output to C stdout */
+        if (!log.isDebugEnabled())
+            H5.H5error_off();
+
+        /*
+         * Optional: confirm the version This will crash immediately if not the specified version.
+         */
+        Integer majnum = Integer.getInteger("hdf.hdf5lib.H5.hdf5maj", null);
+        Integer minnum = Integer.getInteger("hdf.hdf5lib.H5.hdf5min", null);
+        Integer relnum = Integer.getInteger("hdf.hdf5lib.H5.hdf5rel", null);
+        if ((majnum != null) && (minnum != null) && (relnum != null)) {
+            H5.H5check_version(majnum.intValue(), minnum.intValue(), relnum.intValue());
+        }
+    }
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5: General Library Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * Get number of open IDs.
+     *
+     * @return Returns a count of open IDs
+     */
+    public final static int getOpenIDCount() {
+        return OPEN_IDS.size();
+    }
+
+    /**
+     * Get the open IDs
+     *
+     * @return Returns a collection of open IDs
+     */
+    public final static Collection<Long> getOpenIDs() {
+        return OPEN_IDS;
+    }
+
+    /**
+     * H5check_version verifies that the arguments match the version numbers compiled into the library.
+     *
+     * @param majnum
+     *            The major version of the library.
+     * @param minnum
+     *            The minor version of the library.
+     * @param relnum
+     *            The release number of the library.
+     * @return a non-negative value if successful. Upon failure (when the versions do not match), this function causes
+     *         the application to abort (i.e., crash)
+     *
+     *         See C API function: herr_t H5check_version()
+     **/
+    public synchronized static native int H5check_version(int majnum, int minnum, int relnum);
+
+    /**
+     * H5close flushes all data to disk, closes all file identifiers, and cleans up all memory used by the library.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5close() throws HDF5LibraryException;
+
+    /**
+     * H5open initialize the library.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5open() throws HDF5LibraryException;
+
+    /**
+     * H5dont_atexit indicates to the library that an atexit() cleanup routine should not be installed. In order to be
+     * effective, this routine must be called before any other HDF function calls, and must be called each time the
+     * library is loaded/linked into the application (the first time and after it's been unloaded).
+     * <P>
+     * This is called by the static initializer, so this should never need to be explicitly called by a Java program.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    private synchronized static native int H5dont_atexit() throws HDF5LibraryException;
+
+    /**
+     * Turn off error handling By default, the C library prints the error stack of the HDF-5 C library on stdout. This
+     * behavior may be disabled by calling H5error_off().
+     *
+     * @return a non-negative value if successful
+     */
+    public synchronized static native int H5error_off();
+
+    /**
+     * H5garbage_collect collects on all free-lists of all types.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5garbage_collect() throws HDF5LibraryException;
+
+    /**
+     * H5get_libversion retrieves the major, minor, and release numbers of the version of the HDF library which is
+     * linked to the application.
+     *
+     * @param libversion
+     *            The version information of the HDF library.
+     *
+     *            <pre>
+     *      libversion[0] = The major version of the library.
+     *      libversion[1] = The minor version of the library.
+     *      libversion[2] = The release number of the library.
+     * </pre>
+     * @return a non-negative value if successful, along with the version information.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5get_libversion(int[] libversion) throws HDF5LibraryException;
+
+    public synchronized static native int H5set_free_list_limits(int reg_global_lim, int reg_list_lim,
+            int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim) throws HDF5LibraryException;
+
+    /**
+     * H5export_dataset is a utility function to save data in a file.
+     *
+     * @param file_export_name
+     *            The file name to export data into.
+     * @param file_name
+     *            The name of the HDF5 file containing the dataset.
+     * @param object_path
+     *            The full path of the dataset to be exported.
+     * @param binary_order
+     *            99 - export data as text.
+     *            1 - export data as binary Native Order.
+     *            2 - export data as binary Little Endian.
+     *            3 - export data as binary Big Endian.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5export_dataset(String file_export_name, String file_name,
+            String object_path, int binary_order) throws HDF5LibraryException;
+
+    /**
+     * H5is_library_threadsafe Checks to see if the library was built with thread-safety enabled.
+     *
+     * @return true if hdf5 library implements threadsafe
+     *
+     **/
+    private synchronized static native boolean H5is_library_threadsafe();
+
+    // /////// unimplemented ////////
+    // H5_DLL herr_t H5free_memory(void *mem);
+    // H5_DLL void *H5allocate_memory(size_t size, hbool_t clear);
+    // H5_DLL void *H5resize_memory(void *mem, size_t size);
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5A: HDF5 1.8 Attribute Interface API Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Aclose terminates access to the attribute specified by its identifier, attr_id.
+     *
+     * @param attr_id
+     *            IN: Attribute to release access to.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Aclose(long attr_id) throws HDF5LibraryException {
+        if (attr_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Aclose remove {}", attr_id);
+        OPEN_IDS.remove(attr_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Aclose(attr_id);
+    }
+
+    private synchronized static native int _H5Aclose(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Acopy copies the content of one attribute to another.
+     *
+     * @param src_aid
+     *            the identifier of the source attribute
+     * @param dst_aid
+     *            the identifier of the destination attribute
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Acopy(long src_aid, long dst_aid) throws HDF5LibraryException;
+
+    /**
+     * H5Acreate creates an attribute, attr_name, which is attached to the object specified by the identifier loc_id.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param attr_name
+     *            IN: Attribute name
+     * @param type_id
+     *            IN: Attribute datatype identifier
+     * @param space_id
+     *            IN: Attribute dataspace identifier
+     * @param acpl_id
+     *            IN: Attribute creation property list identifier
+     * @param aapl_id
+     *            IN: Attribute access property list identifier
+     *
+     * @return An attribute identifier if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - Name is null.
+     **/
+    public static long H5Acreate(long loc_id, String attr_name, long type_id, long space_id, long acpl_id, long aapl_id)
+            throws HDF5LibraryException, NullPointerException {
+        long id = _H5Acreate2(loc_id, attr_name, type_id, space_id, acpl_id, aapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5A create add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    /**
+     * H5Acreate2 an attribute, attr_name, which is attached to the object specified by the identifier loc_id.
+     *
+     * @see public static long H5Acreate( long loc_id, String attr_name, long type_id, long space_id, long acpl_id, long
+     *      aapl_id )
+     **/
+    private synchronized static native long _H5Acreate2(long loc_id, String attr_name, long type_id, long space_id,
+            long acpl_id, long aapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Acreate_by_name creates an attribute, attr_name, which is attached to the object specified by loc_id and
+     * obj_name.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param obj_name
+     *            IN: Name, relative to loc_id, of object that attribute is to be attached to
+     * @param attr_name
+     *            IN: Attribute name
+     * @param type_id
+     *            IN: Attribute datatype identifier
+     * @param space_id
+     *            IN: Attribute dataspace identifier
+     * @param acpl_id
+     *            IN: Attribute creation property list identifier (currently not used).
+     * @param aapl_id
+     *            IN: Attribute access property list identifier (currently not used).
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return An attribute identifier if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Acreate_by_name(long loc_id, String obj_name, String attr_name, long type_id, long space_id,
+            long acpl_id, long aapl_id, long lapl_id) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Acreate_by_name(loc_id, obj_name, attr_name, type_id, space_id, acpl_id, aapl_id, lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Acreate_by_name add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Acreate_by_name(long loc_id, String obj_name, String attr_name,
+            long type_id, long space_id, long acpl_id, long aapl_id, long lapl_id) throws HDF5LibraryException,
+            NullPointerException;
+
+    /**
+     * H5Adelete removes the attribute specified by its name, name, from a dataset, group, or named datatype.
+     *
+     * @param loc_id
+     *            IN: Identifier of the dataset, group, or named datatype.
+     * @param name
+     *            IN: Name of the attribute to delete.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Adelete(long loc_id, String name) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Adelete_by_idx removes an attribute, specified by its location in an index, from an object.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param obj_name
+     *            IN: Name of object, relative to location, from which attribute is to be removed
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order in which to iterate over index
+     * @param n
+     *            IN: Offset within index
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - obj_name is null.
+     **/
+    public synchronized static native void H5Adelete_by_idx(long loc_id, String obj_name, int idx_type, int order,
+            long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Adelete_by_name removes the attribute attr_name from an object specified by location and name, loc_id and
+     * obj_name, respectively.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param obj_name
+     *            IN: Name of object, relative to location, from which attribute is to be removed
+     * @param attr_name
+     *            IN: Name of attribute to delete
+     * @param lapl_id
+     *            IN: Link access property list identifier.
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Adelete_by_name(long loc_id, String obj_name, String attr_name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aexists determines whether the attribute attr_name exists on the object specified by obj_id.
+     *
+     * @param obj_id
+     *            IN: Object identifier.
+     * @param attr_name
+     *            IN: Name of the attribute.
+     *
+     * @return boolean true if an attribute with a given name exists.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - attr_name is null.
+     **/
+    public synchronized static native boolean H5Aexists(long obj_id, String attr_name) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Aexists_by_name determines whether the attribute attr_name exists on an object. That object is specified by its
+     * location and name, loc_id and obj_name, respectively.
+     *
+     * @param loc_id
+     *            IN: Location of object to which attribute is attached .
+     * @param obj_name
+     *            IN: Name, relative to loc_id, of object that attribute is attached to.
+     * @param attr_name
+     *            IN: Name of attribute.
+     * @param lapl_id
+     *            IN: Link access property list identifier.
+     *
+     * @return boolean true if an attribute with a given name exists, otherwise returns false.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native boolean H5Aexists_by_name(long loc_id, String obj_name, String attr_name,
+            long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aget_info retrieves attribute information, by attribute identifier.
+     *
+     * @param attr_id
+     *            IN: Attribute identifier
+     *
+     * @return A buffer(H5A_info_t) for Attribute information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native H5A_info_t H5Aget_info(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Aget_info_by_idx Retrieves attribute information, by attribute index position.
+     *
+     * @param loc_id
+     *            IN: Location of object to which attribute is attached
+     * @param obj_name
+     *            IN: Name of object to which attribute is attached, relative to location
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Index traversal order
+     * @param n
+     *            IN: Attribute's position in index
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return A buffer(H5A_info_t) for Attribute information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - obj_name is null.
+     **/
+    public synchronized static native H5A_info_t H5Aget_info_by_idx(long loc_id, String obj_name, int idx_type,
+            int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aget_info_by_name Retrieves attribute information, by attribute name.
+     *
+     * @param loc_id
+     *            IN: Location of object to which attribute is attached
+     * @param obj_name
+     *            IN: Name of object to which attribute is attached, relative to location
+     * @param attr_name
+     *            IN: Attribute name
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return A buffer(H5A_info_t) for Attribute information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - obj_name is null.
+     **/
+    public synchronized static native H5A_info_t H5Aget_info_by_name(long loc_id, String obj_name, String attr_name,
+            long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aget_name retrieves the name of an attribute specified by the identifier, attr_id.
+     *
+     * @param attr_id
+     *            IN: Identifier of the attribute.
+     *
+     * @return String for Attribute name.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Aget_name(long attr_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Aget_name_by_idx retrieves the name of an attribute that is attached to an object, which is specified by its
+     * location and name, loc_id and obj_name, respectively.
+     *
+     * @param attr_id
+     *            IN: Attribute identifier
+     * @param obj_name
+     *            IN: Name of object to which attribute is attached, relative to location
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Index traversal order
+     * @param n
+     *            IN: Attribute's position in index
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return String for Attribute name.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF5 Library.
+     * @exception NullPointerException
+     *                - obj_name is null.
+     **/
+    public synchronized static native String H5Aget_name_by_idx(long attr_id, String obj_name, int idx_type, int order,
+            long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aget_space retrieves a copy of the dataspace for an attribute.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute.
+     *
+     * @return attribute dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Aget_space(long attr_id) throws HDF5LibraryException {
+        long id = _H5Aget_space(attr_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aget_space add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aget_space(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Aget_storage_size returns the amount of storage that is required for the specified attribute, attr_id.
+     *
+     * @param attr_id
+     *            IN: Identifier of the attribute to query.
+     *
+     * @return the amount of storage size allocated for the attribute; otherwise returns 0 (zero)
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Aget_storage_size(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Aget_type retrieves a copy of the datatype for an attribute.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute.
+     *
+     * @return a datatype identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Aget_type(long attr_id) throws HDF5LibraryException {
+        long id = _H5Aget_type(attr_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aget_type add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aget_type(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Aopen opens an existing attribute, attr_name, that is attached to an object specified an object identifier,
+     * object_id.
+     *
+     * @param obj_id
+     *            IN: Identifier for object to which attribute is attached
+     * @param attr_name
+     *            IN: Name of attribute to open
+     * @param aapl_id
+     *            IN: Attribute access property list identifier
+     *
+     * @return An attribute identifier if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - Name is null.
+     **/
+    public static long H5Aopen(long obj_id, String attr_name, long aapl_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Aopen(obj_id, attr_name, aapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aopen(long obj_id, String attr_name, long aapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aopen_by_idx opens an existing attribute that is attached to an object specified by location and name, loc_id
+     * and obj_name, respectively
+     *
+     * @param loc_id
+     *            IN: Location of object to which attribute is attached
+     * @param obj_name
+     *            IN: Name of object to which attribute is attached, relative to location
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Index traversal order
+     * @param n
+     *            IN: Attribute's position in index
+     * @param aapl_id
+     *            IN: Attribute access property list
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return An attribute identifier if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - Name is null.
+     **/
+    public static long H5Aopen_by_idx(long loc_id, String obj_name, int idx_type, int order, long n, long aapl_id,
+            long lapl_id) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Aopen_by_idx(loc_id, obj_name, idx_type, order, n, aapl_id, lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aopen_by_idx add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aopen_by_idx(long loc_id, String obj_name, int idx_type, int order,
+            long n, long aapl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aopen_by_name Opens an attribute for an object by object name and attribute name
+     *
+     * @param loc_id
+     *            IN: Location from which to find object to which attribute is attached
+     * @param obj_name
+     *            IN: Name of object to which attribute is attached, relative to loc_id
+     * @param attr_name
+     *            IN: Name of attribute to open
+     * @param aapl_id
+     *            IN: Attribute access property list
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return Returns an attribute identifier if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - obj_name is null.
+     **/
+    public static long H5Aopen_by_name(long loc_id, String obj_name, String attr_name, long aapl_id, long lapl_id)
+            throws HDF5LibraryException, NullPointerException {
+        long id = _H5Aopen_by_name(loc_id, obj_name, attr_name, aapl_id, lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aopen_by_name add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aopen_by_name(long loc_id, String obj_name, String attr_name,
+            long aapl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aread reads an attribute, specified with attr_id. The attribute's memory datatype is specified with
+     * mem_type_id. The entire attribute is read into buf from the file.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute to read.
+     * @param mem_type_id
+     *            IN: Identifier of the attribute datatype (in memory).
+     * @param buf
+     *            IN: Buffer for data to be read.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data buffer is null.
+     **/
+    public synchronized static native int H5Aread(long attr_id, long mem_type_id, byte[] buf)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aread reads an attribute, specified with attr_id. The attribute's memory datatype is specified with
+     * mem_type_id. The entire attribute is read into data object from the file.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute to read.
+     * @param mem_type_id
+     *            IN: Identifier of the attribute datatype (in memory).
+     * @param obj
+     *            IN: Object for data to be read.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data buffer is null. See public synchronized static native int H5Aread( )
+     **/
+    public synchronized static int H5Aread(long attr_id, long mem_type_id, Object obj) throws HDF5Exception,
+    NullPointerException {
+        HDFArray theArray = new HDFArray(obj);
+        byte[] buf = theArray.emptyBytes();
+
+        // This will raise an exception if there is an error
+        int status = H5Aread(attr_id, mem_type_id, buf);
+
+        // No exception: status really ought to be OK
+        if (status >= 0) {
+            obj = theArray.arrayify(buf);
+        }
+
+        return status;
+    }
+
+    public synchronized static native int H5AreadVL(long attr_id, long mem_type_id, String[] buf)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Arename changes the name of attribute that is attached to the object specified by loc_id. The attribute named
+     * old_attr_name is renamed new_attr_name.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param old_attr_name
+     *            IN: Prior attribute name
+     * @param new_attr_name
+     *            IN: New attribute name
+     *
+     * @return A non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - Name is null.
+     **/
+    public synchronized static native int H5Arename(long loc_id, String old_attr_name, String new_attr_name)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Arename_by_name changes the name of attribute that is attached to the object specified by loc_id and obj_name.
+     * The attribute named old_attr_name is renamed new_attr_name.
+     *
+     * @param loc_id
+     *            IN: Location or object identifier; may be dataset or group
+     * @param obj_name
+     *            IN: Name of object, relative to location, whose attribute is to be renamed
+     * @param old_attr_name
+     *            IN: Prior attribute name
+     * @param new_attr_name
+     *            IN: New attribute name
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return A non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - Name is null.
+     **/
+    public synchronized static native int H5Arename_by_name(long loc_id, String obj_name, String old_attr_name,
+            String new_attr_name, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Awrite writes an attribute, specified with attr_id. The attribute's memory datatype is specified with
+     * mem_type_id. The entire attribute is written from buf to the file.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute to write.
+     * @param mem_type_id
+     *            IN: Identifier of the attribute datatype (in memory).
+     * @param buf
+     *            IN: Data to be written.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data is null.
+     **/
+    public synchronized static native int H5Awrite(long attr_id, long mem_type_id, byte[] buf)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Awrite writes an attribute, specified with attr_id. The attribute's memory datatype is specified with
+     * mem_type_id. The entire attribute is written from data object to the file.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute to write.
+     * @param mem_type_id
+     *            IN: Identifier of the attribute datatype (in memory).
+     * @param obj
+     *            IN: Data object to be written.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data object is null. See public synchronized static native int H5Awrite(int attr_id, int
+     *                mem_type_id, byte[] buf);
+     **/
+    public synchronized static int H5Awrite(long attr_id, long mem_type_id, Object obj)
+            throws HDF5Exception, NullPointerException
+    {
+        HDFArray theArray = new HDFArray(obj);
+        byte[] buf = theArray.byteify();
+
+        int retVal = H5Awrite(attr_id, mem_type_id, buf);
+        buf = null;
+        theArray = null;
+        return retVal;
+    }
+
+    public synchronized static native int H5AwriteVL(long attr_id, long mem_type_id, String[] buf)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aget_create_plist retrieves a copy of the attribute creation property list identifier.
+     *
+     * @param attr_id
+     *            IN: Identifier of an attribute.
+     *
+     * @return identifier for the attribute's creation property list if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Aget_create_plist(long attr_id)
+            throws HDF5LibraryException
+    {
+        long id = _H5Aget_create_plist(attr_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Aget_create_plist add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Aget_create_plist(long attr_id) throws HDF5LibraryException;
+
+    /**
+     * H5Aiterate2 iterates over the attributes attached to a dataset, named datatype, or group, as
+     * specified by obj_id. For each attribute, user-provided data, op_data, with additional information
+     * as defined below, is passed to a user-defined function, op, which operates on that attribute.
+     *
+     * @param loc_id
+     *            IN: Identifier for object to which attributes are attached; may be group, dataset, or named datatype.
+     * @param idx_type
+     *            IN: The type of index specified by idx_type can be one of the following:
+     *                      H5_INDEX_NAME             An alpha-numeric index by attribute name.
+     *                      H5_INDEX_CRT_ORDER        An index by creation order.
+     * @param order
+     *            IN: The order in which the index is to be traversed, as specified by order, can be one of the following:
+     *                      H5_ITER_INC     Iteration is from beginning to end, i.e., a top-down iteration
+     *                                      incrementing the index position at each step.
+     *                      H5_ITER_DEC     Iteration starts at the end of the index, i.e., a bottom-up iteration
+     *                                      decrementing the index position at each step.
+     *                      H5_ITER_NATIVE  HDF5 iterates in the fastest-available order. No information is provided
+     *                                      as to the order, but HDF5 ensures that each element in the index will be
+     *                                      visited if the iteration completes successfully.
+     * @param idx
+     *            IN/OUT: Initial and returned offset within index.
+     * @param op
+     *            IN: Callback function to operate on each value.
+     * @param op_data
+     *            IN/OUT: Pointer to any user-efined data for use by operator function.
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+     public synchronized static native int H5Aiterate(long loc_id, int idx_type, int order, long idx,
+                 H5A_iterate_cb op, H5A_iterate_t op_data) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Aiterate_by_name iterates over the attributes attached to the dataset or group specified with loc_id
+     * and obj_name. For each attribute, user-provided data, op_data, with additional information as defined
+     * below, is passed to a user-defined function, op, which operates on that attribute.
+     *
+     * @param loc_id
+     *            IN: Identifier for object to which attributes are attached; may be group, dataset, or named datatype.
+     * @param obj_name
+     *            IN: Name of object, relative to location.
+     * @param idx_type
+     *            IN: The type of index specified by idx_type can be one of the following:
+     *                      H5_INDEX_NAME             An alpha-numeric index by attribute name.
+     *                      H5_INDEX_CRT_ORDER        An index by creation order.
+     * @param order
+     *            IN: The order in which the index is to be traversed, as specified by order, can be one of the following:
+     *                      H5_ITER_INC     Iteration is from beginning to end, i.e., a top-down iteration
+     *                                      incrementing the index position at each step.
+     *                      H5_ITER_DEC     Iteration starts at the end of the index, i.e., a bottom-up iteration
+     *                                      decrementing the index position at each step.
+     *                      H5_ITER_NATIVE  HDF5 iterates in the fastest-available order. No information is provided
+     *                                      as to the order, but HDF5 ensures that each element in the index will be
+     *                                      visited if the iteration completes successfully.
+     * @param idx
+     *            IN/OUT: Initial and returned offset within index.
+     * @param op
+     *            IN: Callback function to operate on each value.
+     * @param op_data
+     *            IN/OUT: Pointer to any user-efined data for use by operator function.
+     * @param lapl_id
+     *            IN: Link access property list
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+     public synchronized static native int H5Aiterate_by_name(long loc_id, String obj_name, int idx_type,
+                        int order, long idx, H5A_iterate_cb op, H5A_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5D: Datasets Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Dcopy copies the content of one dataset to another dataset.
+     *
+     * @param src_did
+     *            the identifier of the source dataset
+     * @param dst_did
+     *            the identifier of the destinaiton dataset
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Dcopy(long src_did, long dst_did) throws HDF5LibraryException;
+
+    /**
+     * H5Dclose ends access to a dataset specified by dataset_id and releases resources used by it.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset to finish access to.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Dclose(long dataset_id) throws HDF5LibraryException {
+        if (dataset_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");
+
+        log.trace("OPEN_IDS: H5Dclose remove {}", dataset_id);
+        OPEN_IDS.remove(dataset_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Dclose(dataset_id);
+    }
+
+    private synchronized static native int _H5Dclose(long dataset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dcreate creates a new dataset named name at the location specified by loc_id.
+     *
+     * @param loc_id
+     *            IN: Location identifier
+     * @param name
+     *            IN: Dataset name
+     * @param type_id
+     *            IN: Datatype identifier
+     * @param space_id
+     *            IN: Dataspace identifier
+     * @param lcpl_id
+     *            IN: Identifier of link creation property list.
+     * @param dcpl_id
+     *            IN: Identifier of dataset creation property list.
+     * @param dapl_id
+     *            IN: Identifier of dataset access property list.
+     *
+     * @return a dataset identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Dcreate(long loc_id, String name, long type_id, long space_id, long lcpl_id, long dcpl_id,
+            long dapl_id) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Dcreate2(loc_id, name, type_id, space_id, lcpl_id, dcpl_id, dapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dcreate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    /**
+     * H5Dcreate2 creates a new dataset named name at the location specified by loc_id.
+     *
+     * @see public static int H5Dcreate(int loc_id, String name, int type_id, int space_id, int lcpl_id, int dcpl_id,
+     *      int dapl_id)
+     **/
+    private synchronized static native long _H5Dcreate2(long loc_id, String name, long type_id, long space_id,
+            long lcpl_id, long dcpl_id, long dapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dcreate_anon creates a dataset in the file specified by loc_id.
+     *
+     * @param loc_id
+     *            IN: Location identifier
+     * @param type_id
+     *            IN: Datatype identifier
+     * @param space_id
+     *            IN: Dataspace identifier
+     * @param dcpl_id
+     *            IN: Identifier of dataset creation property list.
+     * @param dapl_id
+     *            IN: Identifier of dataset access property list.
+     *
+     * @return a dataset identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Dcreate_anon(long loc_id, long type_id, long space_id, long dcpl_id, long dapl_id)
+            throws HDF5LibraryException {
+        long id = _H5Dcreate_anon(loc_id, type_id, space_id, dcpl_id, dapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dcreate_anon add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Dcreate_anon(long loc_id, long type_id, long space_id, long dcpl_id,
+            long dapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dfill explicitly fills the dataspace selection in memory, space_id, with the fill value specified in fill.
+     *
+     * @param fill
+     *            IN: Pointer to the fill value to be used.
+     * @param fill_type
+     *            IN: Fill value datatype identifier.
+     * @param buf
+     *            IN/OUT: Pointer to the memory buffer containing the selection to be filled.
+     * @param buf_type
+     *            IN: Datatype of dataspace elements to be filled.
+     * @param space_id
+     *            IN: Dataspace describing memory buffer and containing the selection to be filled.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native void H5Dfill(byte[] fill, long fill_type, byte[] buf, long buf_type, long space_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dget_access_plist returns an identifier for a copy of the dataset access property list for a dataset.
+     *
+     * @param dset_id
+     *            IN: Identifier of the dataset to query.
+     *
+     * @return a dataset access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Dget_access_plist(long dset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dget_create_plist returns an identifier for a copy of the dataset creation property list for a dataset.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset to query.
+     * @return a dataset creation property list identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Dget_create_plist(long dataset_id) throws HDF5LibraryException {
+        long id = _H5Dget_create_plist(dataset_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dget_create_plist add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Dget_create_plist(long dataset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dget_offset returns the address in the file of the dataset dset_id.
+     *
+     * @param dset_id
+     *            IN: Identifier of the dataset in question
+     *
+     * @return the offset in bytes.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Dget_offset(long dset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dget_space returns an identifier for a copy of the dataspace for a dataset.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset to query.
+     *
+     * @return a dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Dget_space(long dataset_id) throws HDF5LibraryException {
+        long id = _H5Dget_space(dataset_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dget_space add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Dget_space(long dataset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dget_space_status determines whether space has been allocated for the dataset dset_id.
+     *
+     * @param dset_id
+     *            IN: Identifier of the dataset to query.
+     *
+     * @return the space allocation status
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Dget_space_status(long dset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Dget_storage_size returns the amount of storage that is required for the dataset.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset in question
+     *
+     * @return he amount of storage space allocated for the dataset.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Dget_storage_size(long dataset_id) throws HDF5LibraryException,
+    IllegalArgumentException;
+
+    /**
+     * H5Dget_type returns an identifier for a copy of the datatype for a dataset.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset to query.
+     *
+     * @return a datatype identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Dget_type(long dataset_id) throws HDF5LibraryException {
+        long id = _H5Dget_type(dataset_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dget_type add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Dget_type(long dataset_id) throws HDF5LibraryException;
+
+    /**
+     * H5Diterate iterates over all the data elements in the memory buffer buf, executing the callback function operator
+     * once for each such data element.
+     *
+     * @param buf
+     *            IN/OUT: Pointer to the memory containing the elements to iterate over.
+     * @param buf_type
+     *            IN: Buffer datatype identifier.
+     * @param space_id
+     *            IN: Dataspace describing memory buffer.
+     * @param op
+     *            IN: Callback function to operate on each value.
+     * @param op_data
+     *            IN/OUT: Pointer to any user-efined data for use by operator function.
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native int H5Diterate(byte[] buf, long buf_type, long space_id, H5D_iterate_cb op,
+            H5D_iterate_t op_data) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dopen opens the existing dataset specified by a location identifier and name, loc_id and name, respectively.
+     *
+     * @param loc_id
+     *            IN: Location identifier
+     * @param name
+     *            IN: Dataset name
+     * @param dapl_id
+     *            IN: Identifier of dataset access property list.
+     *
+     * @return a dataset identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Dopen(long loc_id, String name, long dapl_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Dopen2(loc_id, name, dapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Dopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    /**
+     * H5Dopen2 opens the existing dataset specified by a location identifier and name, loc_id and name, respectively.
+     *
+     * @see public static int H5Dopen(int loc_id, String name, int dapl_id)
+     **/
+    private synchronized static native long _H5Dopen2(long loc_id, String name, long dapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dread reads a (partial) dataset, specified by its identifier dataset_id, from the file into the application
+     * memory buffer buf.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset read from.
+     * @param mem_type_id
+     *            Identifier of the memory datatype.
+     * @param mem_space_id
+     *            Identifier of the memory dataspace.
+     * @param file_space_id
+     *            Identifier of the dataset's dataspace in the file.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param obj
+     *            Buffer to store data read from the file.
+     * @param isCriticalPinning
+     *            request lock on data reference.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data buffer is null.
+     **/
+    public synchronized static native int H5Dread(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, byte[] obj, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dread(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, byte[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static int H5Dread(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, Object obj) throws HDF5Exception, HDF5LibraryException, NullPointerException {
+        return H5Dread(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, obj, true);
+    }
+
+    /**
+     * H5Dread reads a (partial) dataset, specified by its identifier dataset_id, from the file into the application
+     * data object.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset read from.
+     * @param mem_type_id
+     *            Identifier of the memory datatype.
+     * @param mem_space_id
+     *            Identifier of the memory dataspace.
+     * @param file_space_id
+     *            Identifier of the dataset's dataspace in the file.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param obj
+     *            Object to store data read from the file.
+     * @param isCriticalPinning
+     *            request lock on data reference.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Failure in the data conversion.
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data object is null.
+     **/
+    public synchronized static int H5Dread(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, Object obj, boolean isCriticalPinning) throws HDF5Exception, HDF5LibraryException,
+            NullPointerException {
+        int status = -1;
+        boolean is1D = false;
+
+        Class dataClass = obj.getClass();
+        if (!dataClass.isArray()) {
+            throw (new HDF5JavaException("H5Dread: data is not an array"));
+        }
+
+        String cname = dataClass.getName();
+        is1D = (cname.lastIndexOf('[') == cname.indexOf('['));
+        char dname = cname.charAt(cname.lastIndexOf("[") + 1);
+        log.trace("H5Dread: cname={} is1D={} dname={}", cname, is1D, dname);
+
+        if (is1D && (dname == 'B')) {
+            log.trace("H5Dread_dname_B");
+            status = H5Dread(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (byte[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'S')) {
+            log.trace("H5Dread_dname_S");
+            status = H5Dread_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (short[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'I')) {
+            log.trace("H5Dread_dname_I");
+            status = H5Dread_int(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (int[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'J')) {
+            log.trace("H5Dread_dname_J");
+            status = H5Dread_long(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (long[]) obj);
+        }
+        else if (is1D && (dname == 'F')) {
+            log.trace("H5Dread_dname_F");
+            status = H5Dread_float(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (float[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'D')) {
+            log.trace("H5Dread_dname_D");
+            status = H5Dread_double(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id,
+                    (double[]) obj, isCriticalPinning);
+        }
+        else if (H5.H5Tequal(mem_type_id, HDF5Constants.H5T_STD_REF_DSETREG)) {
+            log.trace("H5Dread_reg_ref");
+            status = H5Dread_reg_ref(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id,
+                    (String[]) obj);
+        }
+        else if (is1D && (dataClass.getComponentType() == String.class)) {
+            log.trace("H5Dread_string type");
+            if (H5.H5Tis_variable_str(mem_type_id)) {
+                status = H5Dread_VLStrings(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (Object[]) obj);
+            }
+            else {
+                status = H5Dread_string(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id,
+                        (String[]) obj);
+            }
+        }
+        else {
+            // Create a data buffer to hold the data into a Java Array
+            HDFArray theArray = new HDFArray(obj);
+            byte[] buf = theArray.emptyBytes();
+            log.trace("H5Dread_else");
+
+            // will raise exception if read fails
+            status = H5Dread(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf,
+                    isCriticalPinning);
+            if (status >= 0) {
+                // convert the data into a Java Array */
+                obj = theArray.arrayify(buf);
+            }
+
+            // clean up these: assign 'null' as hint to gc()
+            buf = null;
+            theArray = null;
+        }
+
+        return status;
+    }
+
+    public synchronized static native int H5Dread_double(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, double[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dread_double(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, double[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread_double(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dread_float(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, float[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dread_float(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, float[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread_float(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dread_int(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, int[] buf, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dread_int(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, int[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread_int(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dread_long(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, long[] buf, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dread_long(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, long[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread_long(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dread_reg_ref(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Dread_reg_ref_data(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Dread_short(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, short[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dread_short(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, short[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dread_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dread_string(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Dread_VLStrings(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, Object[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dset_extent sets the current dimensions of the chunked dataset dset_id to the sizes specified in size.
+     *
+     * @param dset_id
+     *            IN: Chunked dataset identifier.
+     * @param size
+     *            IN: Array containing the new magnitude of each dimension of the dataset.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     **/
+    public synchronized static native void H5Dset_extent(long dset_id, long size[]) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Dvlen_get_buf_size determines the number of bytes required to store the VL data from the dataset, using the
+     * space_id for the selection in the dataset on disk and the type_id for the memory representation of the VL data in
+     * memory.
+     *
+     * @param dset_id
+     *            IN: Identifier of the dataset read from.
+     * @param type_id
+     *            IN: Identifier of the datatype.
+     * @param space_id
+     *            IN: Identifier of the dataspace.
+     *
+     * @return the size in bytes of the memory buffer required to store the VL data.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native long H5Dvlen_get_buf_size(long dset_id, long type_id, long space_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Dvlen_reclaim reclaims buffer used for VL data.
+     *
+     * @param type_id
+     *            Identifier of the datatype.
+     * @param space_id
+     *            Identifier of the dataspace.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param buf
+     *            Buffer with data to be reclaimed.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native int H5Dvlen_reclaim(long type_id, long space_id, long xfer_plist_id, byte[] buf)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dwrite writes a (partial) dataset, specified by its identifier dataset_id, from the application memory buffer
+     * buf into the file.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset read from.
+     * @param mem_type_id
+     *            Identifier of the memory datatype.
+     * @param mem_space_id
+     *            Identifier of the memory dataspace.
+     * @param file_space_id
+     *            Identifier of the dataset's dataspace in the file.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param buf
+     *            Buffer with data to be written to the file.
+     * @param isCriticalPinning
+     *            request lock on data reference.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Dwrite(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, byte[] buf, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dwrite(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, byte[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static int H5Dwrite(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, Object obj) throws HDF5Exception, HDF5LibraryException, NullPointerException {
+        return H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, obj, true);
+    }
+
+    /**
+     * H5Dwrite writes a (partial) dataset, specified by its identifier dataset_id, from the application memory data
+     * object into the file.
+     *
+     * @param dataset_id
+     *            Identifier of the dataset read from.
+     * @param mem_type_id
+     *            Identifier of the memory datatype.
+     * @param mem_space_id
+     *            Identifier of the memory dataspace.
+     * @param file_space_id
+     *            Identifier of the dataset's dataspace in the file.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param obj
+     *            Object with data to be written to the file.
+     * @param isCriticalPinning
+     *            request lock on data reference.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Failure in the data conversion.
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - data object is null.
+     **/
+    public synchronized static int H5Dwrite(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id,
+            long xfer_plist_id, Object obj, boolean isCriticalPinning) throws HDF5Exception, HDF5LibraryException,
+            NullPointerException {
+        int status = -1;
+        boolean is1D = false;
+
+        Class dataClass = obj.getClass();
+        if (!dataClass.isArray()) {
+            throw (new HDF5JavaException("H5Dread: data is not an array"));
+        }
+
+        String cname = dataClass.getName();
+        is1D = (cname.lastIndexOf('[') == cname.indexOf('['));
+        char dname = cname.charAt(cname.lastIndexOf("[") + 1);
+
+        if (is1D && (dname == 'B')) {
+            status = H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (byte[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'S')) {
+            status = H5Dwrite_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (short[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'I')) {
+            status = H5Dwrite_int(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (int[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'J')) {
+            status = H5Dwrite_long(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (long[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'F')) {
+            status = H5Dwrite_float(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (float[]) obj,
+                    isCriticalPinning);
+        }
+        else if (is1D && (dname == 'D')) {
+            status = H5Dwrite_double(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id,
+                    (double[]) obj, isCriticalPinning);
+        }
+        else if (is1D && (dataClass.getComponentType() == String.class)) {
+            log.trace("H5Dwrite_string type");
+            if (H5.H5Tis_variable_str(mem_type_id)) {
+                status = H5Dwrite_VLStrings(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, (Object[]) obj);
+            }
+            else {
+                status = H5Dwrite_string(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id,
+                        (String[]) obj);
+            }
+        }
+        else {
+            HDFArray theArray = new HDFArray(obj);
+            byte[] buf = theArray.byteify();
+
+            // will raise exception on error
+            status = H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf,
+                    isCriticalPinning);
+
+            // clean up these: assign 'null' as hint to gc()
+            buf = null;
+            theArray = null;
+        }
+
+        return status;
+    }
+
+    public synchronized static native int H5Dwrite_double(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, double[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dwrite_double(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, double[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite_double(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dwrite_float(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, float[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dwrite_float(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, float[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite_float(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dwrite_int(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, int[] buf, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dwrite_int(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, int[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite_int(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dwrite_long(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, long[] buf, boolean isCriticalPinning) throws HDF5LibraryException,
+            NullPointerException;
+
+    public synchronized static int H5Dwrite_long(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, long[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite_long(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dwrite_short(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, short[] buf, boolean isCriticalPinning)
+                    throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static int H5Dwrite_short(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, short[] buf) throws HDF5LibraryException, NullPointerException {
+        return H5Dwrite_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
+    }
+
+    public synchronized static native int H5Dwrite_string(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Dwrite_VLStrings writes a (partial) variable length String dataset, specified by its identifier dataset_id, from
+     * the application memory buffer buf into the file.
+     *
+     * ---- contributed by Rosetta Biosoftware
+     *
+     * @param dataset_id
+     *            Identifier of the dataset read from.
+     * @param mem_type_id
+     *            Identifier of the memory datatype.
+     * @param mem_space_id
+     *            Identifier of the memory dataspace.
+     * @param file_space_id
+     *            Identifier of the dataset's dataspace in the file.
+     * @param xfer_plist_id
+     *            Identifier of a transfer property list for this I/O operation.
+     * @param buf
+     *            Buffer with data to be written to the file.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+
+    public synchronized static native int H5Dwrite_VLStrings(long dataset_id, long mem_type_id, long mem_space_id,
+            long file_space_id, long xfer_plist_id, Object[] buf) throws HDF5LibraryException, NullPointerException;
+
+    // /////// unimplemented ////////
+    // H5_DLL herr_t H5Ddebug(hid_t dset_id);
+    // herr_t H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id,
+    //                  size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
+    // herr_t H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_id, void *dst_buf);
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5E: Error Stack //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Eauto_is_v2 determines whether the error auto reporting function for an error stack conforms to the H5E_auto2_t
+     * typedef or the H5E_auto1_t typedef.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @return boolean true if the error stack conforms to H5E_auto2_t and false if it conforms to H5E_auto1_t.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Eauto_is_v2(long stack_id) throws HDF5LibraryException;
+
+    /**
+     * H5Eclear clears the error stack for the current thread. H5Eclear can fail if there are problems initializing the
+     * library.
+     * <p>
+     * This may be used by exception handlers to assure that the error condition in the HDF-5 library has been reset.
+     *
+     * @return Returns a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Eclear() throws HDF5LibraryException {
+        H5Eclear2(HDF5Constants.H5E_DEFAULT);
+        return 0;
+    }
+
+    /**
+     * H5Eclear clears the error stack specified by estack_id, or, if estack_id is set to H5E_DEFAULT, the error stack
+     * for the current thread.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static void H5Eclear(long stack_id) throws HDF5LibraryException {
+        H5Eclear2(stack_id);
+    }
+
+    /**
+     * H5Eclear2 clears the error stack specified by estack_id, or, if estack_id is set to H5E_DEFAULT, the error stack
+     * for the current thread.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eclear2(long stack_id) throws HDF5LibraryException;
+
+    /**
+     * H5Eclose_msg closes an error message identifier, which can be either a major or minor message.
+     *
+     * @param err_id
+     *            IN: Error message identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eclose_msg(long err_id) throws HDF5LibraryException;
+
+    /**
+     * H5Eclose_stack closes the object handle for an error stack and releases its resources.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eclose_stack(long stack_id) throws HDF5LibraryException;
+
+    /**
+     * H5Ecreate_msg adds an error message to an error class defined by client library or application program.
+     *
+     * @param cls_id
+     *            IN: Error class identifier.
+     * @param msg_type
+     *            IN: The type of the error message.
+     * @param msg
+     *            IN: The error message.
+     *
+     * @return a message identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - msg is null.
+     **/
+    public synchronized static native long H5Ecreate_msg(long cls_id, int msg_type, String msg)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Ecreate_stack creates a new empty error stack and returns the new stack's identifier.
+     *
+     * @return an error stack identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Ecreate_stack() throws HDF5LibraryException;
+
+    /**
+     * H5Eget_class_name retrieves the name of the error class specified by the class identifier.
+     *
+     * @param class_id
+     *            IN: Error class identifier.
+     *
+     * @return the name of the error class
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Eget_class_name(long class_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Eget_current_stack copies the current error stack and returns an error stack identifier for the new copy.
+     *
+     * @return an error stack identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Eget_current_stack() throws HDF5LibraryException;
+
+    /**
+     * H5Eset_current_stack replaces the content of the current error stack with a copy of the content of the error
+     * stack specified by estack_id.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eset_current_stack(long stack_id) throws HDF5LibraryException;
+
+    /**
+     * H5Eget_msg retrieves the error message including its length and type.
+     *
+     * @param msg_id
+     *            IN: Name of the error class.
+     * @param type_list
+     *            OUT: The type of the error message. Valid values are H5E_MAJOR and H5E_MINOR.
+     *
+     * @return the error message
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Eget_msg(long msg_id, int[] type_list) throws HDF5LibraryException;
+
+    /**
+     * H5Eget_num retrieves the number of error records in the error stack specified by estack_id (including major,
+     * minor messages and description).
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     *
+     * @return the number of error messages
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Eget_num(long stack_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Eprint2 prints the error stack specified by estack_id on the specified stream, stream.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.If the identifier is H5E_DEFAULT, the current error stack will be printed.
+     * @param stream
+     *            IN: File pointer, or stderr if null.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eprint2(long stack_id, Object stream) throws HDF5LibraryException;
+
+    /**
+     * H5Epop deletes the number of error records specified in count from the top of the error stack specified by
+     * estack_id (including major, minor messages and description).
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     * @param count
+     *            IN: Version of the client library or application to which the error class belongs.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Epop(long stack_id, long count) throws HDF5LibraryException;
+
+
+    /**
+     * H5Epush2 pushes a new error record onto the error stack specified by estack_id.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     * @param file
+     *            IN: Name of the file in which the error was detected.
+     * @param func
+     *            IN: Name of the function in which the error was detected.
+     * @param line
+     *            IN: Line number within the file at which the error was detected.
+     * @param cls_id
+     *            IN: Error class identifier.
+     * @param maj_id
+     *            IN: Major error identifier.
+     * @param min_id
+     *            IN: Minor error identifier.
+     * @param msg
+     *            IN: Error description string.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - file, func, or msg is null.
+      **/
+    public static void H5Epush(long stack_id, String file, String func, int line,
+                long cls_id, long maj_id, long min_id, String msg) throws HDF5LibraryException, NullPointerException
+    {
+             H5Epush2(stack_id, file, func, line, cls_id, maj_id, min_id, msg);
+    }
+    public synchronized static native void H5Epush2(long stack_id, String file, String func, int line,
+                long cls_id, long maj_id, long min_id, String msg) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Eregister_class registers a client library or application program to the HDF5 error API so that the client
+     * library or application program can report errors together with HDF5 library.
+     *
+     * @param cls_name
+     *            IN: Name of the error class.
+     * @param lib_name
+     *            IN: Name of the client library or application to which the error class belongs.
+     * @param version
+     *            IN: Version of the client library or application to which the error class belongs.
+     *
+     * @return a class identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native long H5Eregister_class(String cls_name, String lib_name, String version)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Eunregister_class removes the error class specified by class_id.
+     *
+     * @param class_id
+     *            IN: Error class identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Eunregister_class(long class_id) throws HDF5LibraryException;
+
+    /**
+     * H5Ewalk walks the error stack specified by estack_id for the current thread and calls the
+     * function specified in func for each error along the way.
+     *
+     * @param stack_id
+     *            IN: Error stack identifier.
+     * @param direction
+     *            IN: Direction in which the error stack is to be walked.
+     * @param func
+     *            IN: Function to be called for each error encountered.
+     * @param client_data
+     *            IN: Data to be passed with func.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - func is null.
+     **/
+    public static void H5Ewalk(long stack_id, long direction, H5E_walk_cb func, H5E_walk_t client_data) throws HDF5LibraryException, NullPointerException
+    {
+            H5Ewalk2(stack_id, direction, func, client_data);
+    }
+    public synchronized static native void H5Ewalk2(long stack_id, long direction, H5E_walk_cb func, H5E_walk_t client_data)
+            throws HDF5LibraryException, NullPointerException;
+
+    // /////// unimplemented ////////
+    // public interface H5E_auto2_t extends Callback
+    // {
+    //         int callback(int estack, Pointer client_data);
+    // }
+
+    // int H5Eget_auto(long estack_id, H5E_auto2_t func, PointerByReference client_data);
+    // {
+    //         return H5Eget_auto2(estack_id, func, client_data);
+    // }
+    // int H5Eget_auto2(long estack_id, H5E_auto2_t func, PointerByReference client_data);
+
+    // int H5Eset_auto(long estack_id, H5E_auto2_t func, Pointer client_data);
+    // {
+    //         return H5Eset_auto2(estack_id, func, client_data);
+    // }
+    // int H5Eset_auto2(long estack_id, H5E_auto2_t func, Pointer client_data);
+
+    // public static void H5Epush(long err_stack, String file, String func, int line,
+    //             long cls_id, long maj_id, long min_id, String msg, ...)
+    // {
+    //         H5Epush2(err_stack, file, func, line, cls_id, maj_id, min_id, msg, ...);
+    // }
+    // public synchronized static native void H5Epush2(long err_stack, String file, String func, int line,
+    //             long cls_id, long maj_id, long min_id, String msg, ...);
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5F: File Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Fclose terminates access to an HDF5 file.
+     *
+     * @param file_id
+     *            Identifier of a file to terminate access to.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Fclose(long file_id) throws HDF5LibraryException {
+        if (file_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Fclose remove {}", file_id);
+        OPEN_IDS.remove(file_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Fclose(file_id);
+    }
+
+    private synchronized static native int _H5Fclose(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fopen opens an existing file and is the primary function for accessing existing HDF5 files.
+     *
+     * @param name
+     *            Name of the file to access.
+     * @param flags
+     *            File access flags.
+     * @param access_id
+     *            Identifier for the file access properties list.
+     *
+     * @return a file identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Fopen(String name, int flags, long access_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Fopen(name, flags, access_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Fopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Fopen(String name, int flags, long access_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Freopen reopens an HDF5 file.
+     *
+     * @param file_id
+     *            Identifier of a file to terminate and reopen access to.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @return a new file identifier if successful
+     **/
+    public static long H5Freopen(long file_id) throws HDF5LibraryException {
+        long id = _H5Freopen(file_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Freopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Freopen(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fcreate is the primary function for creating HDF5 files.
+     *
+     * @param name
+     *            Name of the file to access.
+     * @param flags
+     *            File access flags. Possible values include:
+     *            <UL>
+     *            <LI>
+     *            H5F_ACC_RDWR Allow read and write access to file.</LI>
+     *            <LI>
+     *            H5F_ACC_RDONLY Allow read-only access to file.</LI>
+     *            <LI>
+     *            H5F_ACC_TRUNC Truncate file, if it already exists, erasing all data previously stored in the file.</LI>
+     *            <LI>
+     *            H5F_ACC_EXCL Fail if file already exists.</LI>
+     *            <LI>
+     *            H5P_DEFAULT Apply default file access and creation properties.</LI>
+     *            </UL>
+     *
+     * @param create_id
+     *            File creation property list identifier, used when modifying default file meta-data. Use H5P_DEFAULT
+     *            for default access properties.
+     * @param access_id
+     *            File access property list identifier. If parallel file access is desired, this is a collective call
+     *            according to the communicator stored in the access_id (not supported in Java). Use H5P_DEFAULT for
+     *            default access properties.
+     *
+     * @return a file identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Fcreate(String name, int flags, long create_id, long access_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Fcreate(name, flags, create_id, access_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Fcreate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Fcreate(String name, int flags, long create_id, long access_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Fflush causes all buffers associated with a file or object to be immediately flushed (written) to disk without
+     * removing the data from the (memory) cache.
+     * <P>
+     * After this call completes, the file (or object) is in a consistent state and all data written to date is assured
+     * to be permanent.
+     *
+     * @param object_id
+     *            Identifier of object used to identify the file. <b>object_id</b> can be any object associated with the
+     *            file, including the file itself, a dataset, a group, an attribute, or a named data type.
+     * @param scope
+     *            specifies the scope of the flushing action, in the case that the HDF-5 file is not a single physical
+     *            file.
+     *            <P>
+     *            Valid values are:
+     *            <UL>
+     *            <LI>
+     *            H5F_SCOPE_GLOBAL Flushes the entire virtual file.</LI>
+     *            <LI>
+     *            H5F_SCOPE_LOCAL Flushes only the specified file.</LI>
+     *            </UL>
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Fflush(long object_id, int scope) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_access_plist returns the file access property list identifier of the specified file.
+     *
+     * @param file_id
+     *            Identifier of file to get access property list of
+     *
+     * @return a file access property list identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Fget_access_plist(long file_id) throws HDF5LibraryException {
+        long id = _H5Fget_access_plist(file_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Fget_access_plist add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Fget_access_plist(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_create_plist returns a file creation property list identifier identifying the creation properties used to
+     * create this file.
+     *
+     * @param file_id
+     *            Identifier of the file to get creation property list
+     *
+     * @return a file creation property list identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Fget_create_plist(long file_id) throws HDF5LibraryException {
+        long id = _H5Fget_create_plist(file_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Fget_create_plist add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Fget_create_plist(long file_id) throws HDF5LibraryException;
+
+    public synchronized static native long H5Fget_filesize(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_freespace returns the amount of space that is unused by any objects in the file.
+     *
+     * @param file_id
+     *            IN: File identifier for a currently-open HDF5 file
+     *
+     * @return the amount of free space in the file
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Fget_freespace(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_intent retrieves the intended access mode flag passed with H5Fopen when the file was opened.
+     *
+     * @param file_id
+     *            IN: File identifier for a currently-open HDF5 file
+     *
+     * @return the intended access mode flag, as originally passed with H5Fopen.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Fget_intent(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_mdc_hit_rate queries the metadata cache of the target file to obtain its hit rate (cache hits / (cache
+     * hits + cache misses)) since the last time hit rate statistics were reset.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @return the double in which the hit rate is returned.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native double H5Fget_mdc_hit_rate(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_mdc_size queries the metadata cache of the target file for the desired size information.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     * @param metadata_cache
+     *            OUT: Current metadata cache information
+     *            <ul>
+     *            <li>metadata_cache[0] = max_size_ptr // current cache maximum size</li>
+     *            <li>metadata_cache[1] = min_clean_size_ptr // current cache minimum clean size</li>
+     *            <li>metadata_cache[2] = cur_size_ptr // current cache size</li>
+     *            </ul>
+     *
+     * @return current number of entries in the cache
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - metadata_cache is null.
+     **/
+    public synchronized static native int H5Fget_mdc_size(long file_id, long[] metadata_cache)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Fget_name retrieves the name of the file to which the object obj_id belongs.
+     *
+     * @param obj_id
+     *            IN: Identifier of the object for which the associated filename is sought.
+     *
+     * @return the filename.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Fget_name(long obj_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_obj_count returns the number of open object identifiers for the file.
+     *
+     * @param file_id
+     *            IN: File identifier for a currently-open HDF5 file
+     * @param types
+     *            IN: Type of object for which identifiers are to be returned.
+     *            <ul>
+     *            <li>H5F_OBJ_FILE Files only</li>
+     *            <li>H5F_OBJ_DATASET Datasets only</li>
+     *            <li>H5F_OBJ_GROUP Groups only</li>
+     *            <li>H5F_OBJ_DATATYPE Named datatypes only</li>
+     *            <li>H5F_OBJ_ATTR Attributes only</li>
+     *            <li>H5F_OBJ_ALL All of the above</li>
+     *            <li>H5F_OBJ_LOCAL Restrict search to objects opened through current file identifier.</li>
+     *            </ul>
+     *
+     * @return the number of open objects.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Fget_obj_count(long file_id, int types) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_obj_ids returns the list of identifiers for all open HDF5 objects fitting the specified criteria.
+     *
+     * @param file_id
+     *            IN: File identifier for a currently-open HDF5 file
+     * @param types
+     *            IN: Type of object for which identifiers are to be returned.
+     * @param max_objs
+     *            IN: Maximum number of object identifiers to place into obj_id_list.
+     * @param obj_id_list
+     *            OUT: Pointer to the returned list of open object identifiers.
+     *
+     * @return the number of objects placed into obj_id_list.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - obj_id_list is null.
+     **/
+    public synchronized static native long H5Fget_obj_ids(long file_id, int types, long max_objs, long[] obj_id_list)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Fis_hdf5 determines whether a file is in the HDF5 format.
+     *
+     * @param name
+     *            File name to check format.
+     *
+     * @return true if is HDF-5, false if not.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native boolean H5Fis_hdf5(String name) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Fmount mounts the file specified by child_id onto the group specified by loc_id and name using the mount
+     * properties plist_id.
+     *
+     * @param loc_id
+     *            The identifier for the group onto which the file specified by child_id is to be mounted.
+     * @param name
+     *            The name of the group onto which the file specified by child_id is to be mounted.
+     * @param child_id
+     *            The identifier of the file to be mounted.
+     * @param plist_id
+     *            The identifier of the property list to be used.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Fmount(long loc_id, String name, long child_id, long plist_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * Given a mount point, H5Funmount dissassociates the mount point's file from the file mounted there.
+     *
+     * @param loc_id
+     *            The identifier for the location at which the specified file is to be unmounted.
+     * @param name
+     *            The name of the file to be unmounted.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Funmount(long loc_id, String name) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Freset_mdc_hit_rate_stats resets the hit rate statistics counters in the metadata cache associated with the
+     * specified file.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Freset_mdc_hit_rate_stats(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_info returns global information for the file associated with the
+     * object identifier obj_id.
+     *
+     * @param obj_id IN: Object identifier for any object in the file.
+     *
+     * @return A buffer(H5F_info2_t) for current "global" information about file
+     *
+     * @exception HDF5LibraryException - Error from the HDF-5 Library.
+     **/
+    public synchronized static native H5F_info2_t H5Fget_info(long obj_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fclear_elink_file_cache evicts all the cached child files in the specified file's external file
+     * cache, causing them to be closed if there is nothing else holding them open.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Fclear_elink_file_cache(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fstart_swmr_write will activate SWMR writing mode for a file associated with file_id. This routine will
+     * prepare and ensure the file is safe for SWMR writing.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Fstart_swmr_write(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fstart_mdc_logging starts logging metadata cache events if logging was previously enabled.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Fstart_mdc_logging(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fstop_mdc_logging stops logging metadata cache events if logging was previously enabled and is currently ongoing.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Fstop_mdc_logging(long file_id) throws HDF5LibraryException;
+
+    /**
+     * H5Fget_mdc_logging_status gets the current metadata cache logging status.
+     *
+     * @param file_id
+     *            IN: Identifier of the target file.
+     *
+     * @param mdc_logging_status, the status
+     *             mdc_logging_status[0] = is_enabled, whether logging is enabled
+     *             mdc_logging_status[1] = is_currently_logging, whether events are currently being logged
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - mdc_logging_status is null.
+     **/
+    public synchronized static native void H5Fget_mdc_logging_status(long file_id, boolean[] mdc_logging_status)
+            throws HDF5LibraryException, NullPointerException;
+
+
+
+    // /////// unimplemented ////////
+    // ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
+    // herr_t H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info);
+    // ssize_t H5Fget_free_sections(hid_t file_id, H5F_mem_t type, size_t nsects, H5F_sect_info_t *sect_info/*out*/);
+
+    // /**
+    // * H5Fget_vfd_handle returns a pointer to the file handle from the
+    // low-level file driver
+    // * currently being used by the HDF5 library for file I/O.
+    // *
+    // * @param file_id IN: Identifier of the file to be queried.
+    // * @param fapl IN: File access property list identifier.
+    // *
+    // * @return a pointer to the file handle being used by the low-level
+    // virtual file driver.
+    // *
+    // * @exception HDF5LibraryException - Error from the HDF-5 Library.
+    // **/
+    // public synchronized static native Pointer file_handle
+    // H5Fget_vfd_handle(int file_id, int fapl)
+    //             throws HDF5LibraryException;
+
+    // /**
+    // * H5Fget_mdc_config loads the current metadata cache configuration into
+    // * the instance of H5AC_cache_config_t pointed to by the config_ptr
+    // parameter.
+    // *
+    // * @param file_id IN: Identifier of the target file
+    // * @param config_ptr IN/OUT: Pointer to the instance of
+    // H5AC_cache_config_t in which the current metadata cache configuration is to be reported.
+    // *
+    // * @return none
+    // *
+    // * @exception HDF5LibraryException - Error from the HDF-5 Library.
+    // * @exception NullPointerException - config_ptr is null.
+    // **/
+    // public synchronized static native void H5Fget_mdc_config(int file_id, H5AC_cache_config_t config_ptr)
+    //             throws HDF5LibraryException, NullPointerException;
+
+    // /**
+    // * H5Fset_mdc_config attempts to configure the file's metadata cache
+    // according to the configuration supplied.
+    // *
+    // * @param file_id IN: Identifier of the target file
+    // * @param config_ptr IN: Pointer to the instance of H5AC_cache_config_t
+    // containing the desired configuration.
+    // *
+    // * @return none
+    // *
+    // * @exception HDF5LibraryException - Error from the HDF-5 Library.
+    // * @exception NullPointerException - config_ptr is null.
+    // **/
+    // public synchronized static native int H5Fset_mdc_config(int file_id, H5AC_cache_config_t config_ptr)
+    //             throws HDF5LibraryException, NullPointerException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5G: Group Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Gclose releases resources used by a group which was opened by a call to H5Gcreate() or H5Gopen().
+     *
+     * @param group_id
+     *            Group identifier to release.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Gclose(long group_id) throws HDF5LibraryException {
+        if (group_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Gclose remove {}", group_id);
+        OPEN_IDS.remove(group_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Gclose(group_id);
+    }
+
+    private synchronized static native int _H5Gclose(long group_id) throws HDF5LibraryException;
+
+    /**
+     * H5Gcreate creates a new group with the specified name at the specified location, loc_id.
+     *
+     * @param loc_id
+     *            IN: The file or group identifier.
+     * @param name
+     *            IN: The absolute or relative name of the new group.
+     * @param lcpl_id
+     *            IN: Identifier of link creation property list.
+     * @param gcpl_id
+     *            IN: Identifier of group creation property list.
+     * @param gapl_id
+     *            IN: Identifier of group access property list. (No group access properties have been implemented at
+     *            this time; use H5P_DEFAULT.)
+     *
+     * @return a valid group identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Gcreate(long loc_id, String name, long lcpl_id, long gcpl_id, long gapl_id)
+            throws HDF5LibraryException, NullPointerException {
+        long id = _H5Gcreate2(loc_id, name, lcpl_id, gcpl_id, gapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Gcreate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Gcreate2(long loc_id, String name, long lcpl_id, long gcpl_id,
+            long gapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Gcreate_anon creates a new empty group in the file specified by loc_id.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying the file in which the new group is to be created.
+     * @param gcpl_id
+     *            IN: Identifier of group creation property list.
+     * @param gapl_id
+     *            IN: Identifier of group access property list. (No group access properties have been implemented at
+     *            this time; use H5P_DEFAULT.)
+     *
+     * @return a valid group identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Gcreate_anon(long loc_id, long gcpl_id, long gapl_id) throws HDF5LibraryException {
+        long id = _H5Gcreate_anon(loc_id, gcpl_id, gapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Gcreate_anon add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Gcreate_anon(long loc_id, long gcpl_id, long gapl_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Gget_create_plist returns an identifier for the group creation property list associated with the group
+     * specified by group_id.
+     *
+     * @param group_id
+     *            IN: Identifier of the group.
+     *
+     * @return an identifier for the group's creation property list
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Gget_create_plist(long group_id) throws HDF5LibraryException;
+
+    /**
+     * H5Gget_info retrieves information about the group specified by group_id. The information is returned in the
+     * group_info struct.
+     *
+     * @param group_id
+     *            IN: Identifier of the group.
+     *
+     * @return a structure in which group information is returned
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native H5G_info_t H5Gget_info(long group_id) throws HDF5LibraryException;
+
+    /**
+     * H5Gget_info_by_idx retrieves information about a group, according to the group's position within an index.
+     *
+     * @param group_id
+     *            IN: File or group identifier.
+     * @param group_name
+     *            IN: Name of group for which information is to be retrieved.
+     * @param idx_type
+     *            IN: Type of index by which objects are ordered
+     * @param order
+     *            IN: Order of iteration within index
+     * @param n
+     *            IN: Attribute's position in index
+     * @param lapl_id
+     *            IN: Link access property list.
+     *
+     * @return a structure in which group information is returned
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5G_info_t H5Gget_info_by_idx(long group_id, String group_name, int idx_type,
+            int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Gget_info_by_name retrieves information about the group group_name located in the file or group specified by
+     * loc_id.
+     *
+     * @param group_id
+     *            IN: File or group identifier.
+     * @param name
+     *            IN: Name of group for which information is to be retrieved.
+     * @param lapl_id
+     *            IN: Link access property list.
+     *
+     * @return a structure in which group information is returned
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5G_info_t H5Gget_info_by_name(long group_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * retrieves information of all objects under the group (name) located in the file or group specified by loc_id.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param name
+     *            IN: Name of group for which information is to be retrieved
+     * @param objNames
+     *            OUT: Names of all objects under the group, name.
+     * @param objTypes
+     *            OUT: Types of all objects under the group, name.
+     * @param objRef
+     *            OUT: Reference number of all objects under the group, name.
+     *
+     * @return the number of items found
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     */
+    public synchronized static int H5Gget_obj_info_all(long loc_id, String name, String[] objNames, int[] objTypes,
+            long[] objRef) throws HDF5LibraryException, NullPointerException {
+        if (objNames == null) {
+            throw new NullPointerException("H5Gget_obj_info_all(): name array is null");
+        }
+
+        return H5Gget_obj_info_all(loc_id, name, objNames, objTypes, null, null, objRef, HDF5Constants.H5_INDEX_NAME);
+    }
+
+    public synchronized static int H5Gget_obj_info_all(long loc_id, String name, String[] oname, int[] otype,
+            int[] ltype, long[] ref, int indx_type) throws HDF5LibraryException, NullPointerException {
+        return H5Gget_obj_info_full(loc_id, name, oname, otype, ltype, null, ref, indx_type, -1);
+    }
+
+    public synchronized static int H5Gget_obj_info_all(long loc_id, String name, String[] oname, int[] otype,
+            int[] ltype, long[] fno, long[] ref, int indx_type) throws HDF5LibraryException, NullPointerException {
+        return H5Gget_obj_info_full(loc_id, name, oname, otype, ltype, fno, ref, oname.length, indx_type, -1);
+    }
+
+    public synchronized static int H5Gget_obj_info_full(long loc_id, String name, String[] oname, int[] otype,
+            int[] ltype, long[] fno, long[] ref, int indx_type, int indx_order) throws HDF5LibraryException,
+            NullPointerException {
+        if (oname == null) {
+            throw new NullPointerException("H5Gget_obj_info_full(): name array is null");
+        }
+
+        if (otype == null) {
+            throw new NullPointerException("H5Gget_obj_info_full(): object type array is null");
+        }
+
+        if (oname.length == 0) {
+            throw new HDF5LibraryException("H5Gget_obj_info_full(): array size is zero");
+        }
+
+        if (oname.length != otype.length) {
+            throw new HDF5LibraryException("H5Gget_obj_info_full(): name and type array sizes are different");
+        }
+
+        if (ltype == null)
+            ltype = new int[otype.length];
+
+        if (fno == null)
+            fno = new long[ref.length];
+
+        if (indx_type < 0)
+            indx_type = HDF5Constants.H5_INDEX_NAME;
+
+        if (indx_order < 0)
+            indx_order = HDF5Constants.H5_ITER_INC;
+
+        log.trace("H5Gget_obj_info_full: oname_len={}", oname.length);
+        int status = H5Gget_obj_info_full(loc_id, name, oname, otype, ltype, fno, ref, oname.length, indx_type,
+                indx_order);
+        for (int indx = 0; indx < oname.length; indx++)
+            log.trace("H5Gget_obj_info_full: oname={}", oname[indx]);
+        return status;
+    }
+
+    private synchronized static native int H5Gget_obj_info_full(long loc_id, String name, String[] oname, int[] otype,
+            int[] ltype, long[] fno, long[] ref, int n, int indx_type, int indx_order) throws HDF5LibraryException,
+            NullPointerException;
+
+    /**
+     * H5Gget_obj_info_idx report the name and type of object with index 'idx' in a Group. The 'idx' corresponds to the
+     * index maintained by H5Giterate. Each link is returned, so objects with multiple links will be counted once for
+     * each link.
+     *
+     * @param loc_id
+     *            IN: file or group ID.
+     * @param name
+     *            IN: name of the group to iterate, relative to the loc_id
+     * @param idx
+     *            IN: the index of the object to iterate.
+     * @param oname
+     *            the name of the object [OUT]
+     * @param type
+     *            the type of the object [OUT]
+     *
+     * @return non-negative if successful, -1 if not.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     */
+    public synchronized static int H5Gget_obj_info_idx(long loc_id, String name, int idx, String[] oname, int[] type)
+            throws HDF5LibraryException, NullPointerException {
+        String n[] = new String[1];
+        n[0] = new String("");
+        oname[0] = H5Lget_name_by_idx(loc_id, name, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, idx,
+                HDF5Constants.H5P_DEFAULT);
+        H5L_info_t info = H5Lget_info_by_idx(loc_id, name, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, idx,
+                HDF5Constants.H5P_DEFAULT);
+        type[0] = info.type;
+        return 0;
+    }
+
+    /*
+     * Add these methods so that we don't need to call
+     * in a loop to get information for all the object in a group, which takes
+     * a lot of time to finish if the number of objects is more than 10,000
+     */
+    /**
+     * retrieves information of all objects (recurvisely) under the group (name) located in the file or group specified
+     * by loc_id upto maximum specified by objMax.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param objNames
+     *            OUT: Names of all objects under the group, name.
+     * @param objTypes
+     *            OUT: Types of all objects under the group, name.
+     * @param lnkTypes
+     *            OUT: Types of all links under the group, name.
+     * @param objRef
+     *            OUT: Reference number of all objects under the group, name.
+     * @param objMax
+     *            IN: Maximum number of all objects under the group, name.
+     *
+     * @return the number of items found
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     */
+    public synchronized static int H5Gget_obj_info_max(long loc_id, String[] objNames, int[] objTypes, int[] lnkTypes,
+            long[] objRef, long objMax) throws HDF5LibraryException, NullPointerException {
+        if (objNames == null) {
+            throw new NullPointerException("H5Gget_obj_info_max(): name array is null");
+        }
+
+        if (objTypes == null) {
+            throw new NullPointerException("H5Gget_obj_info_max(): object type array is null");
+        }
+
+        if (lnkTypes == null) {
+            throw new NullPointerException("H5Gget_obj_info_max(): link type array is null");
+        }
+
+        if (objNames.length <= 0) {
+            throw new HDF5LibraryException("H5Gget_obj_info_max(): array size is zero");
+        }
+
+        if (objMax <= 0) {
+            throw new HDF5LibraryException("H5Gget_obj_info_max(): maximum array size is zero");
+        }
+
+        if (objNames.length != objTypes.length) {
+            throw new HDF5LibraryException("H5Gget_obj_info_max(): name and type array sizes are different");
+        }
+
+        return H5Gget_obj_info_max(loc_id, objNames, objTypes, lnkTypes, objRef, objMax, objNames.length);
+    }
+
+    private synchronized static native int H5Gget_obj_info_max(long loc_id, String[] oname, int[] otype, int[] ltype,
+            long[] ref, long amax, int n) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Gn_members report the number of objects in a Group. The 'objects' include everything that will be visited by
+     * H5Giterate. Each link is returned, so objects with multiple links will be counted once for each link.
+     *
+     * @param loc_id
+     *            file or group ID.
+     * @param name
+     *            name of the group to iterate, relative to the loc_id
+     *
+     * @return the number of members in the group or -1 if error.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     */
+    public synchronized static long H5Gn_members(long loc_id, String name) throws HDF5LibraryException,
+    NullPointerException {
+        long grp_id = H5Gopen(loc_id, name, HDF5Constants.H5P_DEFAULT);
+        long n = -1;
+
+        try {
+            H5G_info_t info = H5.H5Gget_info(grp_id);
+            n = info.nlinks;
+        }
+        finally {
+            H5Gclose(grp_id);
+        }
+
+        return n;
+    }
+
+    /**
+     * H5Gopen opens an existing group, name, at the location specified by loc_id.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying the location of the group to be opened.
+     * @param name
+     *            IN: Name of group to open.
+     * @param gapl_id
+     *            IN: Identifier of group access property list.
+     *
+     * @return a valid group identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Gopen(long loc_id, String name, long gapl_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Gopen2(loc_id, name, gapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Gopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Gopen2(long loc_id, String name, long gapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5I: HDF5 1.8 Identifier Interface API Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    public synchronized static native long H5Iget_file_id(long obj_id) throws HDF5LibraryException;
+
+    public synchronized static native long H5Iget_name(long obj_id, String[] name, long size)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Iget_ref(long obj_id) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Idec_ref(long obj_id) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Iinc_ref(long obj_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Iget_type retrieves the type of the object identified by obj_id.
+     *
+     * @param obj_id
+     *            IN: Object identifier whose type is to be determined.
+     *
+     * @return the object type if successful; otherwise H5I_BADID.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Iget_type(long obj_id) throws HDF5LibraryException;
+
+    /**
+     * H5Iget_type_ref retrieves the reference count on an ID type. The reference count is used by the library to
+     * indicate when an ID type can be destroyed.
+     *
+     * @param type_id
+     *            IN: The identifier of the type whose reference count is to be retrieved
+     *
+     * @return The current reference count on success, negative on failure.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Iget_type_ref(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Idec_type_ref decrements the reference count on an identifier type. The reference count is used by the
+     * library to indicate when an identifier type can be destroyed. If the reference count reaches zero,
+     * this function will destroy it.
+     *
+     * @param type_id
+     *            IN: The identifier of the type whose reference count is to be decremented
+     *
+     * @return The current reference count on success, negative on failure.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Idec_type_ref(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Iinc_type_ref increments the reference count on an ID type. The reference count is used by the library
+     * to indicate when an ID type can be destroyed.
+     *
+     * @param type_id
+     *            IN: The identifier of the type whose reference count is to be incremented
+     *
+     * @return The current reference count on success, negative on failure.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Iinc_type_ref(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Inmembers returns the number of identifiers of the identifier type specified in type.
+     *
+     * @param type_id
+     *            IN: Identifier for the identifier type whose member count will be retrieved
+     *
+     * @return Number of identifiers of the specified identifier type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Inmembers(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Iis_valid indicates if the identifier type specified in obj_id is valid.
+     *
+     * @param obj_id
+     *            IN: Identifier to be checked
+     *
+     * @return a boolean, true if the specified identifier id is valid
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Iis_valid(long obj_id) throws HDF5LibraryException;
+
+    /**
+     * H5Itype_exists indicates if the identifier type specified in type exists.
+     *
+     * @param type_id
+     *            IN: the identifier type to be checked
+     *
+     * @return a boolean, true if the specified identifier type exists
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Itype_exists(int type_id) throws HDF5LibraryException;
+
+
+    /**
+     * H5Iclear_type deletes all identifiers of the type identified by the argument type.
+     *
+     * @param type_id
+     *            IN: Identifier of identifier type which is to be cleared of identifiers
+     * @param force
+     *            IN: Whether or not to force deletion of all identifiers
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Iclear_type(int type_id, boolean force) throws HDF5LibraryException;
+
+    /**
+     * H5Idestroy_type deletes an entire identifier type. All identifiers of this type are destroyed
+     * and no new identifiers of this type can be registered.
+     *
+     * @param type_id
+     *            IN: Identifier of identifier type which is to be destroyed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Idestroy_type(int type_id) throws HDF5LibraryException;
+
+    // /////// unimplemented ////////
+
+    // void *H5Iobject_verify(hid_t id, H5I_type_t id_type);
+
+    // hid_t H5Iregister(H5I_type_t type, const void *object);
+
+    // H5I_type_t H5Iregister_type(size_t hash_size, unsigned reserved, H5I_free_t free_func);
+
+    // void *H5Iremove_verify(hid_t id, H5I_type_t id_type);
+
+    // void *H5Isearch(H5I_type_t type, H5I_search_func_t func, void *key);
+
+    // //////////////////////////////////////////////////////////////////
+    // H5L: Link Interface Functions //
+    // //////////////////////////////////////////////////////////////////
+
+    /**
+     * H5Lcopy copies a link from one location to another.
+     *
+     * @param src_loc
+     *            IN: Location identifier of the source link
+     * @param src_name
+     *            IN: Name of the link to be copied
+     * @param dst_loc
+     *            IN: Location identifier specifying the destination of the copy
+     * @param dst_name
+     *            IN: Name to be assigned to the new copy
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Lcopy(long src_loc, String src_name, long dst_loc, String dst_name,
+            long lcpl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lcreate_external creates a new soft link to an external object, which is an object in a different HDF5 file
+     * from the location of the link.
+     *
+     * @param file_name
+     *            IN: Name of the target file containing the target object.
+     * @param obj_name
+     *            IN: Path within the target file to the target object.
+     * @param link_loc_id
+     *            IN: The file or group identifier for the new link.
+     * @param link_name
+     *            IN: The name of the new link.
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Lcreate_external(String file_name, String obj_name, long link_loc_id,
+            String link_name, long lcpl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lcreate_hard creates a new hard link to a pre-existing object in an HDF5 file.
+     *
+     * @param cur_loc
+     *            IN: The file or group identifier for the target object.
+     * @param cur_name
+     *            IN: Name of the target object, which must already exist.
+     * @param dst_loc
+     *            IN: The file or group identifier for the new link.
+     * @param dst_name
+     *            IN: The name of the new link.
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - cur_name or dst_name is null.
+     **/
+    public synchronized static native void H5Lcreate_hard(long cur_loc, String cur_name, long dst_loc, String dst_name,
+            long lcpl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lcreate_soft creates a new soft link to an object in an HDF5 file.
+     *
+     * @param link_target
+     *            IN: Path to the target object, which is not required to exist.
+     * @param link_loc_id
+     *            IN: The file or group identifier for the new link.
+     * @param link_name
+     *            IN: The name of the new link.
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - link_name is null.
+     **/
+    public synchronized static native void H5Lcreate_soft(String link_target, long link_loc_id, String link_name,
+            long lcpl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Ldelete removes the link specified from a group.
+     *
+     * @param loc_id
+     *            IN: Identifier of the file or group containing the object.
+     * @param name
+     *            IN: Name of the link to delete.
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Ldelete(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Ldelete_by_idx removes the nth link in a group according to the specified order and in the specified index.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying location of subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Index or field which determines the order
+     * @param order
+     *            IN: Order within field or index
+     * @param n
+     *            IN: Link for which to retrieve information
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native void H5Ldelete_by_idx(long loc_id, String group_name, int idx_type, int order,
+            long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lexists checks if a link with a particular name exists in a group.
+     *
+     * @param loc_id
+     *            IN: Identifier of the file or group to query.
+     * @param name
+     *            IN: The name of the link to check.
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return a boolean, true if the name exists, otherwise false.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native boolean H5Lexists(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lget_info returns information about the specified link.
+     *
+     * @param loc_id
+     *            IN: Identifier of the file or group.
+     * @param name
+     *            IN: Name of the link for which information is being sought.
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return a buffer(H5L_info_t) for the link information.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5L_info_t H5Lget_info(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lget_info_by_idx opens a named datatype at the location specified by loc_id and return an identifier for the
+     * datatype.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying location of subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order within field or index
+     * @param n
+     *            IN: Link for which to retrieve information
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return a buffer(H5L_info_t) for the link information.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native H5L_info_t H5Lget_info_by_idx(long loc_id, String group_name, int idx_type,
+            int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lget_name_by_idx retrieves name of the nth link in a group, according to the order within a specified field or
+     * index.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying location of subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order within field or index
+     * @param n
+     *            IN: Link for which to retrieve information
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return a String for the link name.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native String H5Lget_name_by_idx(long loc_id, String group_name, int idx_type,
+            int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lget_value returns the link value of a symbolic link. Note that this function is a combination
+     * of H5Lget_info(), H5Lget_val() and for external links, H5Lunpack_elink_val.
+     *
+     * @param loc_id
+     *            IN: Identifier of the file or group containing the object.
+     * @param name
+     *            IN: Name of the symbolic link.
+     * @param link_value
+     *            OUT: Path of the symbolic link, or the file_name and path of an external file.
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return the link type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Lget_value(long loc_id, String name, String[] link_value, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lget_value_by_idx retrieves value of the nth link in a group, according to the order within an index.
+     * Note that this function is a combination of H5Lget_info(), H5Lget_val() and for external links,
+     * H5Lunpack_elink_val.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying location of subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order within field or index
+     * @param n
+     *            IN: Link for which to retrieve information
+     * @param link_value
+     *            OUT: Path of the symbolic link, or the file_name and path of an external file.
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return the link type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native int H5Lget_value_by_idx(long loc_id, String group_name, int idx_type, int order,
+            long n, String[] link_value, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Literate iterates through links in a group.
+     *
+     * @param grp_id
+     *            IN: Identifier specifying subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param idx
+     *            IN: Iteration position at which to start
+     * @param op
+     *            IN: Callback function passing data regarding the link to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the link
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Literate(long grp_id, int idx_type, int order, long idx, H5L_iterate_cb op,
+            H5L_iterate_t op_data) throws HDF5LibraryException;
+
+    /**
+     * H5Literate_by_name iterates through links in a group.
+     *
+     * @param grp_id
+     *            IN: Identifier specifying subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param idx
+     *            IN: Iteration position at which to start
+     * @param op
+     *            IN: Callback function passing data regarding the link to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the link
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native int H5Literate_by_name(long grp_id, String group_name, int idx_type, int order,
+            long idx, H5L_iterate_cb op, H5L_iterate_t op_data, long lapl_id) throws HDF5LibraryException,
+            NullPointerException;
+
+    /**
+     * H5Lmove renames a link within an HDF5 file.
+     *
+     * @param src_loc
+     *            IN: Original file or group identifier.
+     * @param src_name
+     *            IN: Original link name.
+     * @param dst_loc
+     *            IN: Destination file or group identifier.
+     * @param dst_name
+     *            IN: New link name.
+     * @param lcpl_id
+     *            IN: Link creation property list identifier to be associated with the new link.
+     * @param lapl_id
+     *            IN: Link access property list identifier to be associated with the new link.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Lmove(long src_loc, String src_name, long dst_loc, String dst_name,
+            long lcpl_id, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Lvisit recursively visits all links starting from a specified group.
+     *
+     * @param grp_id
+     *            IN: Identifier specifying subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param op
+     *            IN: Callback function passing data regarding the link to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the link
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Lvisit(long grp_id, int idx_type, int order, H5L_iterate_cb op,
+            H5L_iterate_t op_data) throws HDF5LibraryException;
+
+    /**
+     * H5Lvisit_by_name recursively visits all links starting from a specified group.
+     *
+     * @param loc_id
+     *            IN: Identifier specifying subject group
+     * @param group_name
+     *            IN: Name of subject group
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param op
+     *            IN: Callback function passing data regarding the link to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the link
+     * @param lapl_id
+     *            IN: link access property
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - group_name is null.
+     **/
+    public synchronized static native int H5Lvisit_by_name(long loc_id, String group_name, int idx_type, int order,
+            H5L_iterate_cb op, H5L_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+
+    /**
+     * H5Lis_registered tests whether a user-defined link class is currently registered,
+     * either by the HDF5 Library or by the user through the use of H5Lregister.
+     *
+     * @param link_cls_id
+     *            IN: User-defined link class identifier
+     *
+     * @return Returns a positive value if the link class has been registered and zero if it is unregistered.
+     *         Otherwise returns a negative value; this may mean that the identifier is not a valid user-defined class identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Lis_registered(int link_cls_id) throws HDF5LibraryException;
+
+    /**
+     * H5Lunregister unregisters a class of user-defined links, preventing them from being traversed, queried, moved, etc.
+     *
+     * @param link_cls_id
+     *            IN: User-defined link class identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Lunregister(int link_cls_id) throws HDF5LibraryException;
+
+    // /////// unimplemented ////////
+    // herr_t H5Lcreate_ud(hid_t link_loc_id, const char *link_name,
+    //         H5L_type_t link_type, const void *udata, size_t udata_size, hid_t lcpl_id,
+    //         hid_t lapl_id);
+
+    // herr_t H5Lregister(const H5L_class_t *cls);
+
+    // herr_t H5Lunpack_elink_val(const void *ext_linkval/*in*/, size_t link_size,
+    //         unsigned *flags, const char **filename/*out*/, const char **obj_path /*out*/);
+    // herr_t H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/,
+    //        size_t size, hid_t lapl_id);
+    // herr_t H5Lget_val_by_idx(hid_t loc_id, const char *group_name,
+    //        H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
+    //        void *buf/*out*/, size_t size, hid_t lapl_id);
+
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5O: HDF5 1.8 Object Interface API Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Oclose closes the group, dataset, or named datatype specified.
+     *
+     * @param object_id
+     *            IN: Object identifier
+     *
+     * @return non-negative on success
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Oclose(long object_id) throws HDF5LibraryException {
+        if (object_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Oclose remove {}", object_id);
+        OPEN_IDS.remove(object_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Oclose(object_id);
+    }
+
+    private synchronized static native int _H5Oclose(long object_id) throws HDF5LibraryException;
+
+    /**
+     * H5Ocopy copies the group, dataset or named datatype specified from the file or group specified by source location
+     * to the destination location.
+     *
+     * @param src_loc_id
+     *            IN: Object identifier indicating the location of the source object to be copied
+     * @param src_name
+     *            IN: Name of the source object to be copied
+     * @param dst_loc_id
+     *            IN: Location identifier specifying the destination
+     * @param dst_name
+     *            IN: Name to be assigned to the new copy
+     * @param ocpypl_id
+     *            IN: Object copy property list
+     * @param lcpl_id
+     *            IN: Link creation property list for the new hard link
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Ocopy(long src_loc_id, String src_name, long dst_loc_id, String dst_name,
+            long ocpypl_id, long lcpl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Oget_comment retrieves the comment for the specified object.
+     *
+     * @param obj_id
+     *            IN: File or group identifier
+     *
+     * @return the comment
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Oget_comment(long obj_id) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Oset_comment sets the comment for the specified object.
+     *
+     * @param obj_id
+     *            IN: Identifier of the target object
+     * @param comment
+     *            IN: The new comment.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     * @deprecated As of HDF5 1.8 in favor of object attributes.
+     **/
+    @Deprecated
+    public synchronized static native void H5Oset_comment(long obj_id, String comment) throws HDF5LibraryException;
+
+    /**
+     * H5Oget_comment_by_name retrieves the comment for an object.
+     *
+     * @param loc_id
+     *            IN: Identifier of a file, group, dataset, or named datatype.
+     * @param name
+     *            IN: Relative name of the object whose comment is to be set or reset.
+     * @param lapl_id
+     *            IN: Link access property list identifier.
+     *
+     * @return the comment
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native String H5Oget_comment_by_name(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, IllegalArgumentException, NullPointerException;
+
+    // long H5Oget_comment_by_name(int loc_id, String name, String comment, long bufsize, int lapl_id);
+
+    /**
+     * H5Oset_comment_by_name sets the comment for the specified object.
+     *
+     * @param loc_id
+     *            IN: Identifier of a file, group, dataset, or named datatype.
+     * @param name
+     *            IN: Relative name of the object whose comment is to be set or reset.
+     * @param comment
+     *            IN: The new comment.
+     * @param lapl_id
+     *            IN: Link access property list identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     *
+     * @deprecated As of HDF5 1.8 in favor of object attributes.
+     **/
+    @Deprecated
+    public synchronized static native void H5Oset_comment_by_name(long loc_id, String name, String comment, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Oget_info retrieves the metadata for an object specified by an identifier.
+     *
+     * @param loc_id
+     *            IN: Identifier for target object
+     *
+     * @return object information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5O_info_t H5Oget_info(long loc_id) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Oget_info_by_idx retrieves the metadata for an object, identifying the object by an index position.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param group_name
+     *            IN: Name of group, relative to loc_id, in which object is located
+     * @param idx_type
+     *            IN: Type of index by which objects are ordered
+     * @param order
+     *            IN: Order of iteration within index
+     * @param n
+     *            IN: Object to open
+     * @param lapl_id
+     *            IN: Access property list identifier for the link pointing to the object (Not currently used; pass as
+     *            H5P_DEFAULT.)
+     *
+     * @return object information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5O_info_t H5Oget_info_by_idx(long loc_id, String group_name, int idx_type,
+            int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Oget_info_by_name retrieves the metadata for an object, identifying the object by location and relative name.
+     *
+     * @param loc_id
+     *            IN: File or group identifier specifying location of group in which object is located
+     * @param name
+     *            IN: Relative name of group
+     * @param lapl_id
+     *            IN: Access property list identifier for the link pointing to the object (Not currently used; pass as
+     *            H5P_DEFAULT.)
+     *
+     * @return object information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native H5O_info_t H5Oget_info_by_name(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Olink creates a new hard link to an object in an HDF5 file.
+     *
+     * @param obj_id
+     *            IN: Object to be linked.
+     * @param new_loc_id
+     *            IN: File or group identifier specifying location at which object is to be linked.
+     * @param new_name
+     *            IN: Relative name of link to be created.
+     * @param lcpl_id
+     *            IN: Link creation property list identifier.
+     * @param lapl_id
+     *            IN: Access property list identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Olink(long obj_id, long new_loc_id, String new_name, long lcpl_id,
+            long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Oopen opens a group, dataset, or named datatype specified by a location and a path name.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param name
+     *            IN: Relative path to the object
+     * @param lapl_id
+     *            IN: Access property list identifier for the link pointing to the object
+     *
+     * @return an object identifier for the opened object
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Oopen(long loc_id, String name, long lapl_id) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Oopen(loc_id, name, lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Oopen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Oopen(long loc_id, String name, long lapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Ovisit recursively visits all objects accessible from a specified object.
+     *
+     * @param obj_id
+     *            IN: Identifier of the object at which the recursive iteration begins.
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param op
+     *            IN: Callback function passing data regarding the object to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the object
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Ovisit(long obj_id, int idx_type, int order, H5O_iterate_cb op,
+            H5O_iterate_t op_data) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Ovisit_by_name recursively visits all objects starting from a specified object.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param obj_name
+     *            IN: Relative path to the object
+     * @param idx_type
+     *            IN: Type of index
+     * @param order
+     *            IN: Order of iteration within index
+     * @param op
+     *            IN: Callback function passing data regarding the object to the calling application
+     * @param op_data
+     *            IN: User-defined pointer to data required by the application for its processing of the object
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return 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.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Ovisit_by_name(long loc_id, String obj_name, int idx_type, int order,
+            H5O_iterate_cb op, H5O_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+
+    /**
+     * H5Oexists_by_name is used by an application to check that an existing link resolves to an object.
+     * Primarily, it is designed to check for dangling soft, external, or user-defined links.
+     *
+     * @param loc_id
+     *            IN: File or group identifier
+     * @param obj_name
+     *            IN: Relative path to the object
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return Returns TRUE or FALSE if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native boolean H5Oexists_by_name(long loc_id, String obj_name, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Odecr_refcount decrements the hard link reference count for an object.
+     *
+     * @param object_id IN: Object identifier
+     *
+     * @exception HDF5LibraryException - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Odecr_refcount(long object_id) throws HDF5LibraryException;
+
+    /**
+     * H5Oincr_refcount increments the hard link reference count for an object.
+     *
+     * @param object_id IN: Object identifier
+     *
+     * @exception HDF5LibraryException - Error from the HDF-5 Library.
+     **/
+     public synchronized static native void H5Oincr_refcount(long object_id) throws HDF5LibraryException;
+
+    /**
+     * H5Oopen_by_addr opens a group, dataset, or named datatype using its address within an HDF5 file.
+     *
+     * @param loc_id IN: File or group identifier
+     * @param addr IN: Object's address in the file
+     *
+     * @return an object identifier for the opened object
+     *
+     * @exception HDF5LibraryException - Error from the HDF-5 Library.
+     **/
+    public static long H5Oopen_by_addr(long loc_id, long addr) throws HDF5LibraryException {
+        long id = _H5Oopen_by_addr(loc_id, addr);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Oopen_by_addr add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Oopen_by_addr(long loc_id, long addr)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Oopen_by_idx opens the nth object in the group specified.
+     *
+     * @param loc_id IN: File or group identifier
+     * @param group_name IN: Name of group, relative to loc_id, in which object is located
+     * @param idx_type IN: Type of index by which objects are ordered
+     * @param order IN: Order of iteration within index
+     * @param n IN: Object to open
+     * @param lapl_id IN: Access property list identifier for the link pointing to the object
+     *
+     * @return an object identifier for the opened object
+     *
+     * @exception HDF5LibraryException - Error from the HDF-5 Library.
+     * @exception NullPointerException - group_name is null.
+     **/
+    public static long H5Oopen_by_idx(long loc_id, String group_name,
+            int idx_type, int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Oopen_by_idx(loc_id, group_name, idx_type, order, n, lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Oopen_by_idx add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    public synchronized static native long _H5Oopen_by_idx(long loc_id, String group_name,
+            int idx_type, int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
+
+    // /////// unimplemented ////////
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5P: Property List Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    // Generic property list routines
+
+    /**
+     * H5Pget_class_name retrieves the name of a generic property list class
+     *
+     * @param plid
+     *            IN: Identifier of property object to query
+     * @return name of a property list if successful; null if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native String H5Pget_class_name(long plid) throws HDF5LibraryException;
+
+    /**
+     * H5Pcreate creates a new property as an instance of some property list class.
+     *
+     * @param type
+     *            IN: The type of property list to create.
+     *
+     * @return a property list identifier (plist) if successful; otherwise Fail (-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Pcreate(long type) throws HDF5LibraryException {
+        long id = _H5Pcreate(type);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Pcreate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Pcreate(long type) throws HDF5LibraryException;
+
+    /**
+     * Sets a property list value (support integer only)
+     *
+     * @param plid
+     *            IN: Property list identifier to modify
+     * @param name
+     *            IN: Name of property to modify
+     * @param value
+     *            IN: value to set the property to
+     * @return a non-negative value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Pset(long plid, String name, int value) throws HDF5LibraryException;
+
+    /**
+     * H5Pexist determines whether a property exists within a property list or class
+     *
+     * @param plid
+     *            IN: Identifier for the property to query
+     * @param name
+     *            IN: Name of property to check for
+     * @return a true value if the property exists in the property object; false if the property does not exist;
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native boolean H5Pexist(long plid, String name) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_size retrieves the size of a property's value in bytes
+     *
+     * @param plid
+     *            IN: Identifier of property object to query
+     * @param name
+     *            IN: Name of property to query
+     * @return size of a property's value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native long H5Pget_size(long plid, String name) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_nprops retrieves the number of properties in a property list or class
+     *
+     * @param plid
+     *            IN: Identifier of property object to query
+     * @return number of properties if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native long H5Pget_nprops(long plid) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_class returns the property list class for the property list identified by the plist parameter.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @return a property list class if successful. Otherwise returns H5P_ROOT (-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Pget_class(long plist) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_class_parent retrieves an identifier for the parent class of a property class
+     *
+     * @param plid
+     *            IN: Identifier of the property class to query
+     * @return a valid parent class object identifier if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native long H5Pget_class_parent(long plid) throws HDF5LibraryException;
+
+    /**
+     * H5Pget retrieves a copy of the value for a property in a property list (support integer only)
+     *
+     * @param plid
+     *            IN: Identifier of property object to query
+     * @param name
+     *            IN: Name of property to query
+     * @return value for a property if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Pget(long plid, String name) throws HDF5LibraryException;
+
+    /**
+     * H5Pequal determines if two property lists or classes are equal
+     *
+     * @param plid1
+     *            IN: First property object to be compared
+     * @param plid2
+     *            IN: Second property object to be compared
+     * @return positive value if equal; zero if unequal, a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Pequal(long plid1, long plid2) throws HDF5LibraryException;
+
+    public static boolean H5P_equal(long plid1, long plid2) throws HDF5LibraryException {
+        if (H5Pequal(plid1, plid2) == 1)
+            return true;
+        return false;
+    }
+
+    /**
+     * H5Pisa_class checks to determine whether a property list is a member of the specified class
+     *
+     * @param plist
+     *            IN: Identifier of the property list
+     * @param pclass
+     *            IN: Identifier of the property class
+     * @return a positive value if equal; zero if unequal; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Pisa_class(long plist, long pclass) throws HDF5LibraryException;
+
+    /**
+     * H5Pcopy_prop copies a property from one property list or class to another
+     *
+     * @param dst_id
+     *            IN: Identifier of the destination property list or class
+     * @param src_id
+     *            IN: Identifier of the source property list or class
+     * @param name
+     *            IN: Name of the property to copy
+     * @return a non-negative value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Pcopy_prop(long dst_id, long src_id, String name)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Premove removes a property from a property list
+     *
+     * @param plid
+     *            IN: Identifier of the property list to modify
+     * @param name
+     *            IN: Name of property to remove
+     * @return a non-negative value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Premove(long plid, String name) throws HDF5LibraryException;
+
+    /**
+     * H5Punregister removes a property from a property list class
+     *
+     * @param plid
+     *            IN: Property list class from which to remove permanent property
+     * @param name
+     *            IN: Name of property to remove
+     * @return a non-negative value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native int H5Punregister(long plid, String name) throws HDF5LibraryException;
+
+    /**
+     * Closes an existing property list class
+     *
+     * @param plid
+     *            IN: Property list class to close
+     * @return a non-negative value if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public static int H5Pclose_class(long plid) throws HDF5LibraryException {
+        if (plid < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Pclose_class remove {}", plid);
+        OPEN_IDS.remove(plid);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Pclose_class(plid);
+    }
+
+    public synchronized static native int _H5Pclose_class(long plid) throws HDF5LibraryException;
+
+    /**
+     * H5Pclose terminates access to a property list.
+     *
+     * @param plist
+     *            IN: Identifier of the property list to terminate access to.
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Pclose(long plist) throws HDF5LibraryException {
+        if (plist < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Pclose remove {}", plist);
+        OPEN_IDS.remove(plist);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Pclose(plist);
+    }
+
+    private synchronized static native int _H5Pclose(long plist) throws HDF5LibraryException;
+
+    /**
+     * H5Pcopy copies an existing property list to create a new property list.
+     *
+     * @param plist
+     *            IN: Identifier of property list to duplicate.
+     *
+     * @return a property list identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Pcopy(long plist) throws HDF5LibraryException {
+        long id = _H5Pcopy(plist);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Pcopy add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Pcopy(long plist) throws HDF5LibraryException;
+
+    public static long H5Pcreate_class_nocb(long parent_class, String name) throws HDF5LibraryException {
+        long id = _H5Pcreate_class_nocb(parent_class, name);
+          if (id > 0) {
+            log.trace("OPEN_IDS: H5Pcreate_class_nocb add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Pcreate_class_nocb(long parent_class, String name) throws HDF5LibraryException;
+
+//    public static long H5Pcreate_class(long parent_class, String name, H5P_cls_create_func_cb create_op, H5P_cls_create_func_t create_data,
+//             H5P_cls_copy_func_cb copy_op, H5P_cls_copy_func_t copy_data, H5P_cls_close_func_cb close_op, H5P_cls_close_func_t close_data) throws HDF5LibraryException {
+//        long id = _H5Pcreate_class(parent_class, name, create_op, create_data, copy_op, copy_data, close_op, close_data);
+//          if (id > 0) {
+//            log.trace("OPEN_IDS: H5Pcreate_class add {}", id);
+//            OPEN_IDS.add(id);
+//            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+//        }
+//        return id;
+//    }
+//
+//    private synchronized static native long _H5Pcreate_class(long parent_class, String name, H5P_cls_create_func_cb create_op, H5P_cls_create_func_t create_data,
+//            H5P_cls_copy_func_cb copy_op, H5P_cls_copy_func_t copy_data, H5P_cls_close_func_cb close_op, H5P_cls_close_func_t close_data) throws HDF5LibraryException;
+
+    public synchronized static native void H5Pregister2_nocb(long plist_class, String name, long size, byte[] def_value) throws HDF5LibraryException;
+
+//    public synchronized static native void H5Pregister2(long plist_class, String name, long size, byte[] def_value, H5P_prp_create_func_cb prp_create, H5P_prp_set_func_cb prp_set,
+//          H5P_prp_get_func_cb prp_get, H5P_prp_delete_func_cb prp_delete, H5P_prp_copy_func_cb prp_copy, H5P_prp_compare_func_cb prp_cmp, H5P_prp_close_func_cb prp_close) throws HDF5LibraryException;
+
+     public synchronized static native void H5Pinsert2_nocb(long plist, String name, long size,  byte[] value) throws HDF5LibraryException;
+
+
+    // public synchronized static native void H5Pinsert2(long plist, String name, long size,  byte[] value, H5P_prp_set_func_cb prp_set, H5P_prp_get_func_cb prp_get,
+    //      H5P_prp_delete_func_cb prp_delete, H5P_prp_copy_func_cb prp_copy, H5P_prp_compare_func_cb prp_cmp, H5P_prp_close_func_cb prp_close) throws HDF5LibraryException;
+
+    public synchronized static native int H5Piterate(long plist, int[] idx, H5P_iterate_cb op, H5P_iterate_t op_data) throws HDF5LibraryException;
+
+    // Object creation property list (OCPL) routines
+
+    /**
+     * H5Pget_attr_phase_change retrieves attribute storage phase change thresholds.
+     *
+     * @param ocpl_id
+     *            IN: : Object (dataset or group) creation property list identifier
+     * @param attributes
+     *            The maximun and minimum no. of attributes to be stored.
+     *
+     *            <pre>
+     *      attributes[0] =  The maximum number of attributes to be stored in compact storage
+     *      attributes[1] =  The minimum number of attributes to be stored in dense storage
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     *
+     **/
+    public synchronized static native int H5Pget_attr_phase_change(long ocpl_id, int[] attributes)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_attr_phase_change sets threshold values for attribute storage on an object. These
+     *      thresholds determine the point at which attribute storage changes
+     *      from compact storage (i.e., storage in the object header)
+     *      to dense storage (i.e., storage in a heap and indexed with a B-tree).
+     *
+     * @param ocpl_id
+     *            IN: : Object (dataset or group) creation property list identifier
+     * @param max_compact
+     *            IN: Maximum number of attributes to be stored in compact storage (Default: 8)
+     * @param min_dense
+     *            IN: Minimum number of attributes to be stored in dense storage (Default: 6)
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native void H5Pset_attr_phase_change(long ocpl_id, int max_compact, int min_dense)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_attr_creation_order retrieves the settings for tracking and indexing attribute creation order on an object
+     *
+     * @param ocpl_id
+     *            IN: Object (group or dataset) creation property list identifier
+     *
+     * @return Flags specifying whether to track and index attribute creation order
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_attr_creation_order(long ocpl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_attr_creation_order sets flags specifying whether to track and index attribute creation order on an
+     * object.
+     *
+     * @param ocpl_id
+     *            IN: Object creation property list identifier
+     * @param crt_order_flags
+     *            IN: Flags specifying whether to track and index attribute creation order
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_attr_creation_order(long ocpl_id, int crt_order_flags)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_obj_track_times queries the object creation property list, ocpl_id, to determine whether object times are
+     * being recorded.
+     *
+     * @param ocpl_id
+     *            IN: Object creation property list identifier
+     *
+     * @return TRUE or FALSE, specifying whether object times are being recorded
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native boolean H5Pget_obj_track_times(long ocpl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_obj_track_times sets a property in the object creation property list, ocpl_id, that governs the recording
+     * of times associated with an object.
+     *
+     * @param ocpl_id
+     *            IN: Object creation property list identifier
+     *
+     * @param track_times
+     *            IN: TRUE or FALSE, specifying whether object times are to be tracked
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native void H5Pset_obj_track_times(long ocpl_id, boolean track_times)
+            throws HDF5LibraryException;
+
+    public synchronized static native int H5Pmodify_filter(long plist, long filter, int flags, long cd_nelmts,
+            int[] cd_values) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_filter adds the specified filter and corresponding properties to the end of an output filter pipeline.
+     *
+     * @param plist
+     *            IN: Property list identifier.
+     * @param filter
+     *            IN: Filter to be added to the pipeline.
+     * @param flags
+     *            IN: Bit vector specifying certain general properties of the filter.
+     * @param cd_nelmts
+     *            IN: Number of elements in cd_values
+     * @param cd_values
+     *            IN: Auxiliary data for the filter.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_filter(long plist, int filter, int flags, long cd_nelmts,
+            int[] cd_values) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_nfilters returns the number of filters defined in the filter pipeline associated with the property list
+     * plist.
+     *
+     * @param plist
+     *            IN: Property list identifier.
+     *
+     * @return the number of filters in the pipeline if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pget_nfilters(long plist) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_filter returns information about a filter, specified by its filter number, in a filter pipeline, specified
+     * by the property list with which it is associated.
+     *
+     * @param plist
+     *            IN: Property list identifier.
+     * @param filter_number
+     *            IN: Sequence number within the filter pipeline of the filter for which information is sought.
+     * @param flags
+     *            OUT: Bit vector specifying certain general properties of the filter.
+     * @param cd_nelmts
+     *            IN/OUT: Number of elements in cd_values
+     * @param cd_values
+     *            OUT: Auxiliary data for the filter.
+     * @param namelen
+     *            IN: Anticipated number of characters in name.
+     * @param name
+     *            OUT: Name of the filter.
+     * @param filter_config
+     *            OUT:A bit field encoding the returned filter information
+     *
+     * @return the filter identification number if successful. Otherwise returns H5Z_FILTER_ERROR (-1).
+     *
+     * @exception ArrayIndexOutOfBoundsException
+     *                Fatal error on Copyback
+     * @exception ArrayStoreException
+     *                Fatal error on Copyback
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name or an array is null.
+     *
+     **/
+    public static int H5Pget_filter(long plist, int filter_number, int[] flags, long[] cd_nelmts, int[] cd_values,
+            long namelen, String[] name, int[] filter_config) throws ArrayIndexOutOfBoundsException,
+            ArrayStoreException, HDF5LibraryException, NullPointerException {
+        return H5Pget_filter2(plist, filter_number, flags, cd_nelmts, cd_values, namelen, name, filter_config);
+    }
+
+    /**
+     * H5Pget_filter2 returns information about a filter, specified by its filter number, in a filter pipeline,
+     * specified by the property list with which it is associated.
+     *
+     * @see public static int H5Pget_filter(int plist, int filter_number, int[] flags, int[] cd_nelmts, int[] cd_values,
+     *      int namelen, String[] name, int[] filter_config)
+     *
+     **/
+    private synchronized static native int H5Pget_filter2(long plist, int filter_number, int[] flags, long[] cd_nelmts,
+            int[] cd_values, long namelen, String[] name, int[] filter_config) throws ArrayIndexOutOfBoundsException,
+            ArrayStoreException, HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pget_filter_by_id returns information about the filter specified in filter_id, a filter identifier. plist_id
+     * must be a dataset or group creation property list and filter_id must be in the associated filter pipeline. The
+     * filter_id and flags parameters are used in the same manner as described in the discussion of H5Pset_filter. Aside
+     * from the fact that they are used for output, the parameters cd_nelmts and cd_values[] are used in the same manner
+     * as described in the discussion of H5Pset_filter. On input, the cd_nelmts parameter indicates the number of
+     * entries in the cd_values[] array allocated by the calling program; on exit it contains the number of values
+     * defined by the filter. On input, the namelen parameter indicates the number of characters allocated for the
+     * filter name by the calling program in the array name[]. On exit name[] contains the name of the filter with one
+     * character of the name in each element of the array. If the filter specified in filter_id is not set for the
+     * property list, an error will be returned and H5Pget_filter_by_id1 will fail.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param filter_id
+     *            IN: Filter identifier.
+     * @param flags
+     *            OUT: Bit vector specifying certain general properties of the filter.
+     * @param cd_nelmts
+     *            N/OUT: Number of elements in cd_values
+     * @param cd_values
+     *            OUT: Auxiliary data for the filter.
+     * @param namelen
+     *            IN: Anticipated number of characters in name.
+     * @param name
+     *            OUT: Name of the filter.
+     * @param filter_config
+     *            OUT: A bit field encoding the returned filter information
+     *
+     * @return the filter identification number if successful. Otherwise returns H5Z_FILTER_ERROR (-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception ArrayIndexOutOfBoundsException
+     *                Fatal error on Copyback
+     * @exception ArrayStoreException
+     *                Fatal error on Copyback
+     * @exception NullPointerException
+     *                - name or an array is null.
+     *
+     **/
+    public static int H5Pget_filter_by_id(long plist_id, long filter_id, int[] flags, long[] cd_nelmts,
+            int[] cd_values, long namelen, String[] name, int[] filter_config) throws ArrayIndexOutOfBoundsException,
+            ArrayStoreException, HDF5LibraryException, NullPointerException {
+        return H5Pget_filter_by_id2(plist_id, filter_id, flags, cd_nelmts, cd_values, namelen, name, filter_config);
+    }
+
+    /**
+     * H5Pget_filter_by_id2 returns information about a filter, specified by its filter id, in a filter pipeline,
+     * specified by the property list with which it is associated.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param filter_id
+     *            IN: Filter identifier.
+     * @param flags
+     *            OUT: Bit vector specifying certain general properties of the filter.
+     * @param cd_nelmts
+     *            N/OUT: Number of elements in cd_values
+     * @param cd_values
+     *            OUT: Auxiliary data for the filter.
+     * @param namelen
+     *            IN: Anticipated number of characters in name.
+     * @param name
+     *            OUT: Name of the filter.
+     * @param filter_config
+     *            OUT: A bit field encoding the returned filter information
+     *
+     * @return the filter identification number if successful. Otherwise returns H5Z_FILTER_ERROR (-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name or an array is null.
+     *
+     **/
+    public synchronized static native int H5Pget_filter_by_id2(long plist_id, long filter_id, int[] flags,
+            long[] cd_nelmts, int[] cd_values, long namelen, String[] name, int[] filter_config)
+                    throws HDF5LibraryException, NullPointerException;
+
+
+    public synchronized static native boolean H5Pall_filters_avail(long dcpl_id) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Premove_filter(long obj_id, long filter) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_deflate sets the compression method for a dataset.
+     *
+     * @param plist
+     *            IN: Identifier for the dataset creation property list.
+     * @param level
+     *            IN: Compression level.
+     *
+     * @return non-negative if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_deflate(long plist, int level) throws HDF5LibraryException;
+
+    public synchronized static native int H5Pset_fletcher32(long plist) throws HDF5LibraryException,
+    NullPointerException;
+
+    // File creation property list (FCPL) routines
+
+    /**
+     * H5Pget_userblock retrieves the size of a user block in a file creation property list.
+     *
+     * @param plist
+     *            IN: Identifier for property list to query.
+     * @param size
+     *            OUT: Pointer to location to return user-block size.
+     *
+     * @return a non-negative value and the size of the user block; if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     **/
+    public synchronized static native int H5Pget_userblock(long plist, long[] size) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pset_userblock sets the user block size of a file creation property list.
+     *
+     * @param plist
+     *            IN: Identifier of property list to modify.
+     * @param size
+     *            IN: Size of the user-block in bytes.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_userblock(long plist, long size) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_sizes retrieves the size of the offsets and lengths used in an HDF5 file. This function is only valid for
+     * file creation property lists.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @param size
+     *            OUT: the size of the offsets and length.
+     *
+     *            <pre>
+     *      size[0] = sizeof_addr // offset size in bytes
+     *      size[1] = sizeof_size // length size in bytes
+     * </pre>
+     * @return a non-negative value with the sizes initialized; if successful;
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     * @exception IllegalArgumentException
+     *                - size is invalid.
+     **/
+    public synchronized static native int H5Pget_sizes(long plist, long[] size) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_sizes sets the byte size of the offsets and lengths used to address objects in an HDF5 file.
+     *
+     * @param plist
+     *            IN: Identifier of property list to modify.
+     * @param sizeof_addr
+     *            IN: Size of an object offset in bytes.
+     * @param sizeof_size
+     *            IN: Size of an object length in bytes.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_sizes(long plist, int sizeof_addr, int sizeof_size)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_sym_k retrieves the size of the symbol table B-tree 1/2 rank and the symbol table leaf node 1/2 size.
+     *
+     * @param plist
+     *            IN: Property list to query.
+     * @param size
+     *            OUT: the symbol table's B-tree 1/2 rank and leaf node 1/2size.
+     *
+     *            <pre>
+     *      size[0] = ik // the symbol table's B-tree 1/2 rank
+     *      size[1] = lk // leaf node 1/2 size
+     * </pre>
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     * @exception IllegalArgumentException
+     *                - size is invalid.
+     **/
+    public synchronized static native int H5Pget_sym_k(long plist, int[] size) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_sym_k sets the size of parameters used to control the symbol table nodes.
+     *
+     * @param plist
+     *            IN: Identifier for property list to query.
+     * @param ik
+     *            IN: Symbol table tree rank.
+     * @param lk
+     *            IN: Symbol table node size.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_sym_k(long plist, int ik, int lk) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_istore_k queries the 1/2 rank of an indexed storage B-tree.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @param ik
+     *            OUT: Pointer to location to return the chunked storage B-tree 1/2 rank.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - ik array is null.
+     **/
+    public synchronized static native int H5Pget_istore_k(long plist, int[] ik) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pset_istore_k sets the size of the parameter used to control the B-trees for indexing chunked datasets.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @param ik
+     *            IN: 1/2 rank of chunked storage B-tree.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_istore_k(long plist, int ik) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_shared_mesg_nindexes retrieves number of shared object header message indexes in file creation property
+     * list.
+     *
+     * @param fcpl_id
+     *            IN: : File creation property list identifier
+     *
+     * @return nindexes, the number of shared object header message indexes available in files created with this
+     *         property list
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_shared_mesg_nindexes(long fcpl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_shared_mesg_nindexes sets the number of shared object header message indexes in the specified file
+     * creation property list.
+     *
+     * @param plist_id
+     *            IN: File creation property list
+     * @param nindexes
+     *            IN: Number of shared object header message indexes to be available in files created with this property
+     *            list
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid value of nindexes
+     *
+     **/
+    public synchronized static native int H5Pset_shared_mesg_nindexes(long plist_id, int nindexes)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_shared_mesg_index Retrieves the configuration settings for a shared message index.
+     *
+     * @param fcpl_id
+     *            IN: File creation property list identifier
+     * @param index_num
+     *            IN: Index being configured.
+     * @param mesg_info
+     *            The message type and minimum message size
+     *
+     *            <pre>
+     *      mesg_info[0] =  Types of messages that may be stored in this index.
+     *      mesg_info[1] =  Minimum message size.
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - mesg_info is null.
+     * @exception IllegalArgumentException
+     *                - Invalid value of nindexes
+     *
+     **/
+    public synchronized static native int H5Pget_shared_mesg_index(long fcpl_id, int index_num, int[] mesg_info)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_shared_mesg_index Configures the specified shared object header message index
+     *
+     * @param fcpl_id
+     *            IN: File creation property list identifier.
+     * @param index_num
+     *            IN: Index being configured.
+     * @param mesg_type_flags
+     *            IN: Types of messages that should be stored in this index.
+     * @param min_mesg_size
+     *            IN: Minimum message size.
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid value of nindexes
+     *
+     **/
+    public synchronized static native int H5Pset_shared_mesg_index(long fcpl_id, int index_num, int mesg_type_flags,
+            int min_mesg_size) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_shared_mesg_phase_change retrieves shared object header message phase change information.
+     *
+     * @param fcpl_id
+     *            IN: : File creation property list identifier
+     * @param size
+     *            The threshold values for storage of shared object header message indexes in a file.
+     *
+     *            <pre>
+     *      size[0] =  Threshold above which storage of a shared object header message index shifts from list to B-tree
+     *      size[1] =  Threshold below which storage of a shared object header message index reverts to list format
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     *
+     **/
+    public synchronized static native int H5Pget_shared_mesg_phase_change(long fcpl_id, int[] size)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_shared_mesg_phase_change sets shared object header message storage phase change thresholds.
+     *
+     * @param fcpl_id
+     *            IN: File creation property list identifier
+     * @param max_list
+     *            IN: Threshold above which storage of a shared object header message index shifts from list to B-tree
+     * @param min_btree
+     *            IN: Threshold below which storage of a shared object header message index reverts to list format
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid values of max_list and min_btree.
+     *
+     **/
+    public synchronized static native int H5Pset_shared_mesg_phase_change(long fcpl_id, int max_list, int min_btree)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pset_file_space sets the file space management strategy for the file associated with fcpl_id to strategy.
+     * There are four strategies that applications can select and they are described in the Parameters section.
+     *
+     * @param fcpl_id
+     *            IN: File creation property list identifier
+     * @param strategy
+     *            IN: The strategy for file space management.
+     *                Passing a value of zero (0) indicates that the value of strategy is not to be modified.
+     *                H5F_FILE_SPACE_ALL_PERSIST
+     *                        With this strategy, the free-space managers track the free space that results from the
+     *                        manipulation of HDF5 objects in the HDF5 file. The free space information is saved when the
+     *                        file is closed, and reloaded when the file is reopened. When space is needed for file metadata
+     *                        or raw data, the HDF5 library first requests space from the library's free-space managers.
+     *                        If the request is not satisfied, the library requests space from the aggregators. If the request
+     *                        is still not satisfied, the library requests space from the virtual file driver. That is, the
+     *                        library will use all of the mechanisms for allocating space.
+     *                H5F_FILE_SPACE_ALL     (Default file space management strategy)
+     *                        With this strategy, the free-space managers track the free space that results from the manipulation
+     *                        of HDF5 objects in the HDF5 file. The free space information is NOT saved when the file is closed
+     *                        and the free space that exists upon file closing becomes unaccounted space in the file.
+     *                        Like the previous strategy, the library will try all of the mechanisms for allocating space. When
+     *                        space is needed for file metadata or raw data, the library first requests space from the free-space
+     *                        managers. If the request is not satisfied, the library requests space from the aggregators. If the
+     *                        request is still not satisfied, the library requests space from the virtual file driver.
+     *                H5F_FILE_SPACE_AGGR_VFD
+     *                        With this strategy, the library does not track free space that results from the manipulation of HDF5
+     *                        obejcts in the HDF5 file and the free space becomes unaccounted space in the file.
+     *                        When space is needed for file metadata or raw data, the library first requests space from the
+     *                        aggregators. If the request is not satisfied, the library requests space from the virtual file driver.
+     *                H5F_FILE_SPACE_VFD
+     *                        With this strategy, the library does not track free space that results from the manipulation of HDF5
+     *                        obejcts in the HDF5 file and the free space becomes unaccounted space in the file.
+     *                        When space is needed for file metadata or raw data, the library requests space from the virtual file driver.
+     * @param threshold
+     *            IN: The free-space section threshold. The library default is 1, which is to track all free-space sections.
+     *                Passing a value of zero (0) indicates that the value of threshold is not to be modified.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid values of max_list and min_btree.
+     *
+     **/
+    public synchronized static native void H5Pset_file_space(long fcpl_id, int strategy, long threshold)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_file_space provides the means for applications to manage the HDF5 file's file space for their specific needs.
+     *
+     * @param fcpl_id
+     *            IN: File creation property list identifier
+     * @param strategy
+     *            IN/OUT: The current file space management strategy in use for the file. NULL, strategy not queried.
+     * @param threshold
+     *            IN/OUT: The current free-space section threshold. NULL, threshold not queried.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid values of max_list and min_btree.
+     *
+     **/
+    public synchronized static native void H5Pget_file_space(long fcpl_id, int[] strategy, long[] threshold)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    // File access property list (FAPL) routines
+
+    /**
+     * H5Pget_alignment retrieves the current settings for alignment properties from a file access property list.
+     *
+     * @param plist
+     *            IN: Identifier of a file access property list.
+     * @param alignment
+     *            OUT: threshold value and alignment value.
+     *
+     *            <pre>
+     *      alignment[0] = threshold // threshold value
+     *      alignment[1] = alignment // alignment value
+     * </pre>
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - aligment array is null.
+     * @exception IllegalArgumentException
+     *                - aligment array is invalid.
+     **/
+    public synchronized static native int H5Pget_alignment(long plist, long[] alignment) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_alignment sets the alignment properties of a file access property list so that any file object >=
+     * THRESHOLD bytes will be aligned on an address which is a multiple of ALIGNMENT.
+     *
+     * @param plist
+     *            IN: Identifier for a file access property list.
+     * @param threshold
+     *            IN: Threshold value.
+     * @param alignment
+     *            IN: Alignment value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_alignment(long plist, long threshold, long alignment)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_driver returns the identifier of the low-level file driver associated with the file access property list
+     * or data transfer property list plid.
+     *
+     * @param plid
+     *            IN: File access or data transfer property list identifier.
+     * @return a valid low-level driver identifier if successful; a negative value if failed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     */
+    public synchronized static native long H5Pget_driver(long plid) throws HDF5LibraryException;
+
+    public synchronized static native long H5Pget_family_offset(long fapl_id) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Pset_family_offset(long fapl_id, long offset) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * Retrieves the maximum possible number of elements in the meta data cache and the maximum possible number of bytes
+     * and the RDCC_W0 value in the raw data chunk cache.
+     *
+     * @param plist
+     *            IN: Identifier of the file access property list.
+     * @param mdc_nelmts
+     *            IN/OUT: No longer used, will be ignored.
+     * @param rdcc_nelmts
+     *            IN/OUT: Number of elements (objects) in the raw data chunk cache.
+     * @param rdcc_nbytes
+     *            IN/OUT: Total size of the raw data chunk cache, in bytes.
+     * @param rdcc_w0
+     *            IN/OUT: Preemption policy.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an array is null.
+     **/
+    public synchronized static native int H5Pget_cache(long plist, int[] mdc_nelmts, long[] rdcc_nelmts,
+            long[] rdcc_nbytes, double[] rdcc_w0) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_cache sets the number of elements (objects) in the meta data cache and the total number of bytes in the
+     * raw data chunk cache.
+     *
+     * @param plist
+     *            IN: Identifier of the file access property list.
+     * @param mdc_nelmts
+     *            IN: No longer used, will be ignored.
+     * @param rdcc_nelmts
+     *            IN: Number of elements (objects) in the raw data chunk cache.
+     * @param rdcc_nbytes
+     *            IN: Total size of the raw data chunk cache, in bytes.
+     * @param rdcc_w0
+     *            IN: Preemption policy.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_cache(long plist, int mdc_nelmts, long rdcc_nelmts, long rdcc_nbytes,
+            double rdcc_w0) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_mdc_config gets the initial metadata cache configuration contained in a file access property list and
+     * loads it into the instance of H5AC_cache_config_t pointed to by the config_ptr parameter. This configuration is
+     * used when the file is opened.
+     *
+     * @param plist_id
+     *            IN: Identifier of the file access property list.
+     *
+     * @return A buffer(H5AC_cache_config_t) for the current metadata cache configuration information
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native H5AC_cache_config_t H5Pget_mdc_config(long plist_id) throws HDF5LibraryException;
+
+    public synchronized static native void H5Pset_mdc_config(long plist_id, H5AC_cache_config_t config_ptr)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_gc_references Returns the current setting for the garbage collection refernces property from a file access
+     * property list.
+     *
+     * @param fapl_id
+     *            IN File access property list
+     *
+     * @return GC is on (true) or off (false)
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Pget_gc_references(long fapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_gc_references Sets the flag for garbage collecting references for the file. Default value for garbage
+     * collecting references is off.
+     *
+     * @param fapl_id
+     *            IN File access property list
+     * @param gc_ref
+     *            IN set GC on (true) or off (false)
+     *
+     * @return non-negative if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_gc_references(long fapl_id, boolean gc_ref)
+            throws HDF5LibraryException;
+
+    public synchronized static native int H5Pget_fclose_degree(long plist_id) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Pset_fclose_degree(long plist, int degree) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pget_meta_block_size the current metadata block size setting.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     *
+     * @return the minimum size, in bytes, of metadata block allocations.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native long H5Pget_meta_block_size(long fapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_meta_block_size sets the minimum metadata block size.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param size
+     *            IN: Minimum size, in bytes, of metadata block allocations.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native void H5Pset_meta_block_size(long fapl_id, long size) throws HDF5LibraryException;
+
+    public synchronized static native long H5Pget_sieve_buf_size(long fapl_id) throws HDF5LibraryException;
+
+    public synchronized static native void H5Pset_sieve_buf_size(long fapl_id, long size) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_small_data_block_size retrieves the size of a block of small data in a file creation property list.
+     *
+     * @param plist
+     *            IN: Identifier for property list to query.
+     *
+     * @return a non-negative value and the size of the user block; if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Pget_small_data_block_size(long plist) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_small_data_block_size reserves blocks of size bytes for the contiguous storage of the raw data portion of
+     * small datasets.
+     *
+     * @param plist
+     *            IN: Identifier of property list to modify.
+     * @param size
+     *            IN: Size of the blocks in bytes.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_small_data_block_size(long plist, long size)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_libver_bounds retrieves the lower and upper bounds on the HDF5 Library versions that indirectly determine
+     * the object formats versions used when creating objects in the file.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param libver
+     *            The earliest/latest version of the library that will be used for writing objects.
+     *
+     *            <pre>
+     *      libver[0] =  The earliest version of the library that will be used for writing objects
+     *      libver[1] =  The latest version of the library that will be used for writing objects.
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     *
+     **/
+    public synchronized static native int H5Pget_libver_bounds(long fapl_id, int[] libver) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pset_libver_bounds Sets bounds on library versions, and indirectly format versions, to be used when creating
+     * objects
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param low
+     *            IN: The earliest version of the library that will be used for writing objects
+     * @param high
+     *            IN: The latest version of the library that will be used for writing objects.
+     *
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Argument is Illegal
+     *
+     **/
+    public synchronized static native int H5Pset_libver_bounds(long fapl_id, int low, int high)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_elink_file_cache_size retrieves the size of the external link open file cache.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     *
+     * @return External link open file cache size in number of files.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_elink_file_cache_size(long fapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_elink_file_cache_size sets the number of files that can be held open in an external link open file cache.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param efc_size
+     *            IN: External link open file cache size in number of files.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native void H5Pset_elink_file_cache_size(long fapl_id, int efc_size)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pset_mdc_log_options sets metadata cache logging options.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param is_enabled
+     *            IN: Whether logging is enabled.
+     * @param location
+     *            IN: Location of log in UTF-8/ASCII (file path/name) (On Windows, this must be ASCII).
+     * @param start_on_access
+     *            IN: Whether the logging begins as soon as the file is opened or created.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - location is null.
+     *
+     **/
+    public synchronized static native void H5Pset_mdc_log_options(long fapl_id, boolean is_enabled, String location, boolean start_on_access)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pget_mdc_log_options gets metadata cache logging options.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param mdc_log_options, the options
+     *             mdc_logging_options[0] = is_enabled, whether logging is enabled
+     *             mdc_logging_options[1] = start_on_access, whether the logging begins as soon as the file is opened or created
+     *
+     * @return the location of log in UTF-8/ASCII (file path/name) (On Windows, this must be ASCII).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native String H5Pget_mdc_log_options(long fapl_id, boolean[] mdc_log_options)
+            throws HDF5LibraryException;
+
+    // Dataset creation property list (DCPL) routines //
+
+    /**
+     * H5Pget_layout returns the layout of the raw data for a dataset.
+     *
+     * @param plist
+     *            IN: Identifier for property list to query.
+     *
+     * @return the layout type of a dataset creation property list if successful. Otherwise returns H5D_LAYOUT_ERROR
+     *         (-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pget_layout(long plist) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_layout sets the type of storage used store the raw data for a dataset.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @param layout
+     *            IN: Type of storage layout for raw data.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_layout(long plist, int layout) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_chunk retrieves the size of chunks for the raw data of a chunked layout dataset.
+     *
+     * @param plist
+     *            IN: Identifier of property list to query.
+     * @param max_ndims
+     *            IN: Size of the dims array.
+     * @param dims
+     *            OUT: Array to store the chunk dimensions.
+     *
+     * @return chunk dimensionality successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims array is null.
+     * @exception IllegalArgumentException
+     *                - max_ndims <=0
+     **/
+    public synchronized static native int H5Pget_chunk(long plist, int max_ndims, long[] dims)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_chunk sets the size of the chunks used to store a chunked layout dataset.
+     *
+     * @param plist
+     *            IN: Identifier for property list to query.
+     * @param ndims
+     *            IN: The number of dimensions of each chunk.
+     * @param dim
+     *            IN: An array containing the size of each chunk.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims array is null.
+     * @exception IllegalArgumentException
+     *                - dims <=0
+     **/
+    public synchronized static native int H5Pset_chunk(long plist, int ndims, byte[] dim) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    public synchronized static int H5Pset_chunk(long plist, int ndims, long[] dim) throws HDF5Exception,
+    NullPointerException, IllegalArgumentException {
+        if (dim == null) {
+            return -1;
+        }
+
+        HDFArray theArray = new HDFArray(dim);
+        byte[] thedims = theArray.byteify();
+
+        int retVal = H5Pset_chunk(plist, ndims, thedims);
+
+        thedims = null;
+        theArray = null;
+        return retVal;
+    }
+
+    /**
+     * H5Pset_virtual maps elements of the virtual dataset (VDS) described by the
+     * virtual dataspace identifier vspace_id to the elements of the source dataset
+     * described by the source dataset dataspace identifier src_space_id. The source
+     * dataset is identified by the name of the file where it is located, src_file_name,
+     * and the name of the dataset, src_dset_name.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the dataset creation property list that will be used when creating the virtual dataset.
+     * @param vspace_id
+     *            IN: The dataspace identifier with the selection within the virtual dataset applied, possibly an unlimited selection.
+     * @param src_file_name
+     *            IN: The name of the HDF5 file where the source dataset is located. The file might not exist yet. The name can be specified using a C-style printf statement.
+     * @param src_dset_name
+     *            IN: The path to the HDF5 dataset in the file specified by src_file_name. The dataset might not exist yet. The dataset name can be specified using a C-style printf statement.
+     * @param src_space_id
+     *            IN: The source dataset dataspace identifier with a selection applied, possibly an unlimited selection.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an name string is null.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native void H5Pset_virtual(long dcpl_id, long vspace_id, String src_file_name, String src_dset_name, long src_space_id) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pget_virtual_count gets the number of mappings for a virtual dataset that has the creation property list specified by dcpl_id.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the virtual dataset creation property list.
+     *
+     * @return a non-negative number of mappings if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native long H5Pget_virtual_count(long dcpl_id) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_virtual_vspace takes the dataset creation property list for the virtual dataset, dcpl_id, and the mapping index, index,
+     *     and returns a dataspace identifier for the selection within the virtual dataset used in the mapping.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the virtual dataset creation property list.
+     * @param index
+     *            IN: Mapping index.
+     *
+     * @return a valid dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native long H5Pget_virtual_vspace(long dcpl_id, long index) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_virtual_srcspace takes the dataset creation property list for the virtual dataset, dcpl_id, and the mapping index, index,
+     *    and returns a dataspace identifier for the selection within the source dataset used in the mapping.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the virtual dataset creation property list.
+     * @param index
+     *            IN: Mapping index.
+     *
+     * @return a valid dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native long H5Pget_virtual_srcspace(long dcpl_id, long index) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_virtual_filename takes the dataset creation property list for the virtual dataset, dcpl_id, the mapping index, index,
+     * the size of the filename for a source dataset, size, and retrieves the name of the file for a source dataset used in the mapping.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the virtual dataset creation property list.
+     * @param index
+     *            IN: Mapping index.
+     *
+     * @return the name of the file containing the source dataset if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native String H5Pget_virtual_filename(long dcpl_id, long index) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_virtual_dsetname takes the dataset creation property list for the virtual dataset, dcpl_id, the mapping index, index, the
+     * size of the dataset name for a source dataset, size, and retrieves the name of the source dataset used in the mapping.
+     *
+     * @param dcpl_id
+     *            IN: The identifier of the virtual dataset creation property list.
+     * @param index
+     *            IN: Mapping index.
+     *
+     * @return the name of the source dataset if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - An id is <=0
+     **/
+    public synchronized static native String H5Pget_virtual_dsetname(long dcpl_id, long index) throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_external returns information about an external file.
+     *
+     * @param plist
+     *            IN: Identifier of a dataset creation property list.
+     * @param idx
+     *            IN: External file index.
+     * @param name_size
+     *            IN: Maximum length of name array.
+     * @param name
+     *            OUT: Name of the external file.
+     * @param size
+     *            OUT: the offset value and the size of the external file data.
+     *
+     *            <pre>
+     *      size[0] = offset // a location to return an offset value
+     *      size[1] = size // a location to return the size of
+     *                // the external file data.
+     * </pre>
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception ArrayIndexOutOfBoundsException
+     *                Fatal error on Copyback
+     * @exception ArrayStoreException
+     *                Fatal error on Copyback
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name or size is null.
+     * @exception IllegalArgumentException
+     *                - name_size <= 0 .
+     *
+     **/
+    public synchronized static native int H5Pget_external(long plist, int idx, long name_size, String[] name,
+            long[] size) throws ArrayIndexOutOfBoundsException, ArrayStoreException, HDF5LibraryException,
+            NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Pset_external adds an external file to the list of external files.
+     *
+     * @param plist
+     *            IN: Identifier of a dataset creation property list.
+     * @param name
+     *            IN: Name of an external file.
+     * @param offset
+     *            IN: Offset, in bytes, from the beginning of the file to the location in the file where the data
+     *            starts.
+     * @param size
+     *            IN: Number of bytes reserved in the file for the data.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Pset_external(long plist, String name, long offset, long size)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pget_external_count returns the number of external files for the specified dataset.
+     *
+     * @param plist
+     *            IN: Identifier of a dataset creation property list.
+     *
+     * @return the number of external files if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pget_external_count(long plist) throws HDF5LibraryException;
+
+    public synchronized static native int H5Pset_szip(long plist, int options_mask, int pixels_per_block)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_shuffle(long plist_id) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pset_nbit Sets up the use of the N-Bit filter.
+     *
+     * @param plist_id
+     *            IN: Dataset creation property list identifier.
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_nbit(long plist_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_scaleoffset sets the Scale-Offset filter for a dataset.
+     *
+     * @param plist_id
+     *            IN: Dataset creation property list identifier.
+     * @param scale_type
+     *            IN: Flag indicating compression method.
+     * @param scale_factor
+     *            IN: Parameter related to scale.
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid arguments
+     *
+     **/
+    public synchronized static native int H5Pset_scaleoffset(long plist_id, int scale_type, int scale_factor)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_fill_value queries the fill value property of a dataset creation property list.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param type_id
+     *            IN: The datatype identifier of value.
+     * @param value
+     *            IN: The fill value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Error converting data array.
+     **/
+    public synchronized static native int H5Pget_fill_value(long plist_id, long type_id, byte[] value)
+            throws HDF5Exception;
+
+    /**
+     * H5Pget_fill_value queries the fill value property of a dataset creation property list.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param type_id
+     *            IN: The datatype identifier of value.
+     * @param obj
+     *            IN: The fill value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Error converting data array.
+     **/
+    public synchronized static int H5Pget_fill_value(long plist_id, long type_id, Object obj) throws HDF5Exception {
+        HDFArray theArray = new HDFArray(obj);
+        byte[] buf = theArray.emptyBytes();
+
+        int status = H5Pget_fill_value(plist_id, type_id, buf);
+        if (status >= 0) {
+            obj = theArray.arrayify(buf);
+        }
+
+        return status;
+    }
+
+    /**
+     * H5Pset_fill_value sets the fill value for a dataset creation property list.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param type_id
+     *            IN: The datatype identifier of value.
+     * @param value
+     *            IN: The fill value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Error converting data array
+     **/
+    public synchronized static native int H5Pset_fill_value(long plist_id, long type_id, byte[] value)
+            throws HDF5Exception;
+
+    /**
+     * H5Pset_fill_value sets the fill value for a dataset creation property list.
+     *
+     * @param plist_id
+     *            IN: Property list identifier.
+     * @param type_id
+     *            IN: The datatype identifier of value.
+     * @param obj
+     *            IN: The fill value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Error converting data array
+     **/
+    public synchronized static int H5Pset_fill_value(long plist_id, long type_id, Object obj) throws HDF5Exception {
+        HDFArray theArray = new HDFArray(obj);
+        byte[] buf = theArray.byteify();
+
+        int retVal = H5Pset_fill_value(plist_id, type_id, buf);
+
+        buf = null;
+        theArray = null;
+        return retVal;
+    }
+
+    public synchronized static native int H5Pfill_value_defined(long plist_id, int[] status)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pget_alloc_time(long plist_id, int[] alloc_time)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_alloc_time(long plist_id, int alloc_time) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Pget_fill_time(long plist_id, int[] fill_time) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Pset_fill_time(long plist_id, int fill_time) throws HDF5LibraryException,
+    NullPointerException;
+
+    // Dataset access property list (DAPL) routines //
+
+    /**
+     * Retrieves the maximum possible number of elements in the meta data cache and the maximum possible number of bytes
+     * and the RDCC_W0 value in the raw data chunk cache on a per-datset basis.
+     *
+     * @param dapl_id
+     *            IN: Identifier of the dataset access property list.
+     * @param rdcc_nslots
+     *            IN/OUT: Number of elements (objects) in the raw data chunk cache.
+     * @param rdcc_nbytes
+     *            IN/OUT: Total size of the raw data chunk cache, in bytes.
+     * @param rdcc_w0
+     *            IN/OUT: Preemption policy.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an array is null.
+     **/
+    public synchronized static native void H5Pget_chunk_cache(long dapl_id, long[] rdcc_nslots, long[] rdcc_nbytes,
+            double[] rdcc_w0) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_chunk_cache sets the number of elements (objects) in the meta data cache and the total number of bytes in
+     * the raw data chunk cache on a per-datset basis.
+     *
+     * @param dapl_id
+     *            IN: Identifier of the datset access property list.
+     * @param rdcc_nslots
+     *            IN: Number of elements (objects) in the raw data chunk cache.
+     * @param rdcc_nbytes
+     *            IN: Total size of the raw data chunk cache, in bytes.
+     * @param rdcc_w0
+     *            IN: Preemption policy.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Pset_chunk_cache(long dapl_id, long rdcc_nslots, long rdcc_nbytes,
+            double rdcc_w0) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_virtual_view takes the access property list for the virtual dataset, dapl_id, and the flag,
+     * view, and sets the VDS view according to the flag value.
+     *
+     * @param dapl_id
+     *            IN: Dataset access property list identifier for the virtual dataset
+     * @param view
+     *            IN: Flag specifying the extent of the data to be included in the view.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library
+     **/
+    public synchronized static native void H5Pset_virtual_view(long dapl_id, int view) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_virtual_view takes the virtual dataset access property list, dapl_id, and retrieves the flag,
+     * view, set by the H5Pset_virtual_view call.
+     *
+     * @param dapl_id
+     *            IN: Dataset access property list identifier for the virtual dataset
+
+     * @return The flag specifying the view of the virtual dataset.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library
+     **/
+    public synchronized static native int H5Pget_virtual_view(long dapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_virtual_printf_gap sets the access property list for the virtual dataset, dapl_id, to instruct the
+     * library to stop looking for the mapped data stored in the files and/or datasets with the printf-style names
+     * after not finding gap_size files and/or datasets. The found source files and datasets will determine the
+     * extent of the unlimited virtual dataset with the printf-style mappings.
+     *
+     * @param dapl_id
+     *            IN: Dataset access property list identifier for the virtual dataset
+     * @param gap_size
+     *            IN: Maximum number of files and/or datasets allowed to be missing for determining
+     *            the extent of an unlimited virtual dataset with printf-style mappings.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library
+     **/
+    public synchronized static native void H5Pset_virtual_printf_gap(long dapl_id, long gap_size) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_virtual_printf_gap returns the maximum number of missing printf-style files and/or datasets for
+     * determining the extent of an unlimited virtual dataaset, gap_size, using the access property list for
+     * the virtual dataset, dapl_id.
+     *
+     * @param dapl_id
+     *            IN: Dataset access property list identifier for the virtual dataset
+
+     * @return Maximum number of files and/or datasets allowed to be missing for determining
+     *            the extent of an unlimited virtual dataset with printf-style mappings.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library
+     **/
+    public synchronized static native long H5Pget_virtual_printf_gap(long dapl_id) throws HDF5LibraryException;
+
+    // public synchronized static native void H5Pset_append_flush(long plist_id, int ndims, long[] boundary, H5D_append_cb func, H5D_append_t udata) throws HDF5LibraryException;
+
+    // public synchronized static native void H5Pget_append_flush(long plist_id, int dims, long[] boundary, H5D_append_cb func, H5D_append_t udata) throws HDF5LibraryException;
+
+
+    // Dataset xfer property list (DXPL) routines //
+
+    /**
+     * H5Pget_data_transform retrieves the data transform expression previously set in the dataset transfer property
+     * list plist_id by H5Pset_data_transform.
+     *
+     * @param plist_id
+     *            IN: Identifier of the property list or class
+     * @param size
+     *            IN: Number of bytes of the transform expression to copy to
+     * @param expression
+     *            OUT: A data transform expression
+     *
+     * @return The size of the transform expression if successful; 0(zero) if no transform expression exists. Otherwise
+     *         returns a negative value.
+     *
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Size is <= 0.
+     *
+     **/
+    public synchronized static native long H5Pget_data_transform(long plist_id, String[] expression, long size)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pset_data_transform sets a data transform expression
+     *
+     * @param plist_id
+     *            IN: Identifier of the property list or class
+     * @param expression
+     *            IN: Pointer to the null-terminated data transform expression
+     *
+     * @return a non-negative valule if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - expression is null.
+     *
+     **/
+    public synchronized static native int H5Pset_data_transform(long plist_id, String expression)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * HH5Pget_buffer gets type conversion and background buffers. Returns buffer size, in bytes, if successful;
+     * otherwise 0 on failure.
+     *
+     * @param plist
+     *            Identifier for the dataset transfer property list.
+     * @param tconv
+     *            byte array of application-allocated type conversion buffer.
+     * @param bkg
+     *            byte array of application-allocated background buffer.
+     *
+     * @return buffer size, in bytes, if successful; otherwise 0 on failure
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - plist is invalid.
+     **/
+    public synchronized static native int H5Pget_buffer(long plist, byte[] tconv, byte[] bkg)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    public synchronized static native long H5Pget_buffer_size(long plist)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pset_buffer sets type conversion and background buffers. status to TRUE or FALSE.
+     *
+     * Given a dataset transfer property list, H5Pset_buffer sets the maximum size for the type conversion buffer and
+     * background buffer and optionally supplies pointers to application-allocated buffers. If the buffer size is
+     * smaller than the entire amount of data being transferred between the application and the file, and a type
+     * conversion buffer or background buffer is required, then strip mining will be used.
+     *
+     * Note that there are minimum size requirements for the buffer. Strip mining can only break the data up along the
+     * first dimension, so the buffer must be large enough to accommodate a complete slice that encompasses all of the
+     * remaining dimensions. For example, when strip mining a 100x200x300 hyperslab of a simple data space, the buffer
+     * must be large enough to hold 1x200x300 data elements. When strip mining a 100x200x300x150 hyperslab of a simple
+     * data space, the buffer must be large enough to hold 1x200x300x150 data elements.
+     *
+     * @param plist
+     *            Identifier for the dataset transfer property list.
+     * @param size
+     *            Size, in bytes, of the type conversion and background buffers.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - plist is invalid.
+     **/
+    public synchronized static native void H5Pset_buffer_size(long plist, long size) throws HDF5LibraryException,
+    IllegalArgumentException;
+
+    public synchronized static native int H5Pget_edc_check(long plist) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static native int H5Pset_edc_check(long plist, int check) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pget_btree_ratio Get the B-tree split ratios for a dataset transfer property list.
+     *
+     * @param plist_id
+     *            IN Dataset transfer property list
+     * @param left
+     *            OUT split ratio for leftmost nodes
+     * @param right
+     *            OUT split ratio for righttmost nodes
+     * @param middle
+     *            OUT split ratio for all other nodes
+     *
+     * @return non-negative if succeed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an input array is null.
+     **/
+    public synchronized static native int H5Pget_btree_ratios(long plist_id, double[] left, double[] middle,
+            double[] right) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_btree_ratio Sets B-tree split ratios for a dataset transfer property list. The split ratios determine what
+     * percent of children go in the first node when a node splits.
+     *
+     * @param plist_id
+     *            IN Dataset transfer property list
+     * @param left
+     *            IN split ratio for leftmost nodes
+     * @param right
+     *            IN split ratio for righttmost nodes
+     * @param middle
+     *            IN split ratio for all other nodes
+     *
+     * @return non-negative if succeed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Pset_btree_ratios(long plist_id, double left, double middle, double right)
+            throws HDF5LibraryException;
+
+    public synchronized static native int H5Pget_hyper_vector_size(long dxpl_id, long[] vector_size)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_hyper_vector_size(long dxpl_id, long vector_size)
+            throws HDF5LibraryException, NullPointerException;
+
+    // Link creation property list (LCPL) routines //
+
+    /**
+     * H5Pget_create_intermediate_group determines whether property is set to enable creating missing intermediate
+     * groups.
+     *
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     *
+     * @return Boolean true or false
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native boolean H5Pget_create_intermediate_group(long lcpl_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pset_create_intermediate_group specifies in property list whether to create missing intermediate groups
+     *
+     * @param lcpl_id
+     *            IN: Link creation property list identifier
+     * @param crt_intermed_group
+     *            IN: Flag specifying whether to create intermediate groups upon the creation of an object
+     *
+     * @return a non-negative valule if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_create_intermediate_group(long lcpl_id, boolean crt_intermed_group)
+            throws HDF5LibraryException;
+
+    // Group creation property list (GCPL) routines //
+
+    /**
+     * H5Pget_local_heap_size_hint Retrieves the anticipated size of the local heap for original-style groups.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     *
+     * @return size_hint, the anticipated size of local heap
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native long H5Pget_local_heap_size_hint(long gcpl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_local_heap_size_hint Specifies the anticipated maximum size of a local heap.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param size_hint
+     *            IN: Anticipated maximum size in bytes of local heap
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_local_heap_size_hint(long gcpl_id, long size_hint)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Pget_link_phase_change Queries the settings for conversion between compact and dense groups.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param links
+     *            The max. no. of compact links & the min. no. of dense links, which are used for storing groups
+     *
+     *            <pre>
+     *      links[0] =  The maximum number of links for compact storage
+     *      links[1] =  The minimum number of links for dense storage
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     *
+     **/
+    public synchronized static native int H5Pget_link_phase_change(long gcpl_id, int[] links)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_link_phase_change Sets the parameters for conversion between compact and dense groups.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param max_compact
+     *            IN: Maximum number of links for compact storage(Default: 8)
+     * @param min_dense
+     *            IN: Minimum number of links for dense storage(Default: 6)
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid values of max_compact and min_dense.
+     *
+     **/
+    public synchronized static native int H5Pset_link_phase_change(long gcpl_id, int max_compact, int min_dense)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_est_link_info Queries data required to estimate required local heap or object header size.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param link_info
+     *            Estimated number of links to be inserted into group And the estimated average length of link names
+     *
+     *            <pre>
+     *      link_info[0] =  Estimated number of links to be inserted into group
+     *      link_info[1] =  Estimated average length of link names
+     * </pre>
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - link_info is null.
+     *
+     **/
+    public synchronized static native int H5Pget_est_link_info(long gcpl_id, int[] link_info)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_est_link_info Sets estimated number of links and length of link names in a group.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param est_num_entries
+     *            IN: Estimated number of links to be inserted into group
+     * @param est_name_len
+     *            IN: Estimated average length of link names
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid values to est_num_entries and est_name_len.
+     *
+     **/
+    public synchronized static native int H5Pset_est_link_info(long gcpl_id, int est_num_entries, int est_name_len)
+            throws HDF5LibraryException, IllegalArgumentException;
+
+    /**
+     * H5Pget_link_creation_order queries the group creation property list, gcpl_id, and returns a flag indicating
+     * whether link creation order is tracked and/or indexed in a group.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     *
+     * @return crt_order_flags -Creation order flag(s)
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_link_creation_order(long gcpl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_link_creation_order Sets flags in a group creation property list, gcpl_id, for tracking and/or indexing
+     * links on creation order.
+     *
+     * @param gcpl_id
+     *            IN: Group creation property list identifier
+     * @param crt_order_flags
+     *            IN: Creation order flag(s)
+     *
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_link_creation_order(long gcpl_id, int crt_order_flags)
+            throws HDF5LibraryException;
+
+    // String creation property list (STRCPL) routines //
+
+    public synchronized static native int H5Pget_char_encoding(long plist_id) throws HDF5LibraryException;
+
+    public synchronized static native void H5Pset_char_encoding(long plist_id, int encoding)
+            throws HDF5LibraryException;
+
+    // Link access property list (LAPL) routines //
+
+    /**
+     * H5Pget_nlinks retrieves the maximum number of soft or user-defined link traversals allowed, nlinks, before the
+     * library assumes it has found a cycle and aborts the traversal. This value is retrieved from the link access
+     * property list lapl_id.
+     *
+     * @param lapl_id
+     *            IN: File access property list identifier
+     *
+     * @return Returns a Maximum number of links to traverse.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native long H5Pget_nlinks(long lapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_nlinks sets the maximum number of soft or user-defined link traversals allowed, nlinks, before the library
+     * assumes it has found a cycle and aborts the traversal. This value is set in the link access property list
+     * lapl_id.
+     *
+     * @param lapl_id
+     *            IN: File access property list identifier
+     * @param nlinks
+     *            IN: Maximum number of links to traverse
+     *
+     * @return Returns a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Argument is Illegal
+     *
+     **/
+    public synchronized static native int H5Pset_nlinks(long lapl_id, long nlinks) throws HDF5LibraryException,
+    IllegalArgumentException;
+
+    /**
+     * H5Pget_elink_prefix Retrieves prefix applied to external link paths.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     * @param prefix
+     *            OUT: Prefix applied to external link paths
+     *
+     * @return If successful, returns a non-negative value specifying the size in bytes of the prefix without the NULL
+     *         terminator; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - prefix is null.
+     *
+     **/
+    public synchronized static native long H5Pget_elink_prefix(long lapl_id, String[] prefix)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_elink_prefix Sets prefix to be applied to external link paths.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     * @param prefix
+     *            IN: Prefix to be applied to external link paths
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - prefix is null.
+     *
+     **/
+    public synchronized static native int H5Pset_elink_prefix(long lapl_id, String prefix) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Pget_elink_fapl Retrieves the file access property list identifier associated with the link access property
+     * list.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public static long H5Pget_elink_fapl(long lapl_id) throws HDF5LibraryException {
+        long id = _H5Pget_elink_fapl(lapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Pget_elink_fapl add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Pget_elink_fapl(long lapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_elink_fapl sets a file access property list for use in accessing a file pointed to by an external link.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     * @param fapl_id
+     *            IN: File access property list identifier
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_elink_fapl(long lapl_id, long fapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pget_elink_acc_flags retrieves the external link traversal file access flag from the specified link access
+     * property list.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     *
+     * @return File access flag for link traversal.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_elink_acc_flags(long lapl_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_elink_acc_flags Sets the external link traversal file access flag in a link access property list.
+     *
+     * @param lapl_id
+     *            IN: Link access property list identifier
+     * @param flags
+     *            IN: The access flag for external link traversal.
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception IllegalArgumentException
+     *                - Invalid Flag values.
+     *
+     **/
+    public synchronized static native int H5Pset_elink_acc_flags(long lapl_id, int flags) throws HDF5LibraryException,
+    IllegalArgumentException;
+
+    // Object copy property list (OCPYPL) routines //
+
+    /**
+     * H5Pget_copy_object retrieves the properties to be used when an object is copied.
+     *
+     * @param ocp_plist_id
+     *            IN: Object copy property list identifier
+     *
+     * @return Copy option(s) set in the object copy property list
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_copy_object(long ocp_plist_id) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_copy_object Sets properties to be used when an object is copied.
+     *
+     * @param ocp_plist_id
+     *            IN: Object copy property list identifier
+     * @param copy_options
+     *            IN: Copy option(s) to be set
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native void H5Pset_copy_object(long ocp_plist_id, int copy_options)
+            throws HDF5LibraryException;
+
+    // Other/Older property list routines //
+
+    /**
+     * H5Pget_version retrieves the version information of various objects for a file creation property list.
+     *
+     * @param plist
+     *            IN: Identifier of the file creation property list.
+     * @param version_info
+     *            OUT: version information.
+     *
+     *            <pre>
+     *      version_info[0] = boot  // boot block version number
+     *      version_info[1] = freelist  // global freelist version
+     *      version_info[2] = stab  // symbol tabl version number
+     *      version_info[3] = shhdr  // shared object header version
+     * </pre>
+     * @return a non-negative value, with the values of version_info initialized, if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - version_info is null.
+     * @exception IllegalArgumentException
+     *                - version_info is illegal.
+     **/
+    public synchronized static native int H5Pget_version(long plist, int[] version_info) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    // file drivers property list routines //
+
+    public synchronized static native void H5Pget_fapl_core(long fapl_id, long[] increment, boolean[] backing_store)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_fapl_core(long fapl_id, long increment, boolean backing_store)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pget_fapl_direct Retrieve direct I/O settings.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param info
+     *            OUT: Returned property list information info[0] = alignment Required memory alignment boundary info[1]
+     *            = block_size File system block size info[2] = cbuf_size Copy buffer size
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pget_fapl_direct(long fapl_id, long[] info) throws HDF5LibraryException;
+
+    /**
+     * H5Pset_fapl_direct Sets up use of the direct I/O driver.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param alignment
+     *            IN: Required memory alignment boundary
+     * @param block_size
+     *            IN: File system block size
+     * @param cbuf_size
+     *            IN: Copy buffer size
+     *
+     * @return a non-negative value if successful; otherwise returns a negative value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     *
+     **/
+    public synchronized static native int H5Pset_fapl_direct(long fapl_id, long alignment, long block_size,
+            long cbuf_size) throws HDF5LibraryException;
+
+    public synchronized static native int H5Pget_fapl_family(long fapl_id, long[] memb_size, long[] memb_fapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_fapl_family(long fapl_id, long memb_size, long memb_fapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pget_fapl_multi Sets up use of the multi I/O driver.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param memb_map
+     *            IN: Maps memory usage types to other memory usage types.
+     * @param memb_fapl
+     *            IN: Property list for each memory usage type.
+     * @param memb_name
+     *            IN: Name generator for names of member files.
+     * @param memb_addr
+     *            IN: The offsets within the virtual address space, from 0 (zero) to HADDR_MAX, at which each type of
+     *            data storage begins.
+     *
+     * @return a boolean value; Allows read-only access to incomplete file sets when TRUE.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an array is null.
+     *
+     **/
+    public synchronized static native boolean H5Pget_fapl_multi(long fapl_id, int[] memb_map, long[] memb_fapl,
+            String[] memb_name, long[] memb_addr) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Pset_fapl_multi Sets up use of the multi I/O driver.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier
+     * @param memb_map
+     *            IN: Maps memory usage types to other memory usage types.
+     * @param memb_fapl
+     *            IN: Property list for each memory usage type.
+     * @param memb_name
+     *            IN: Name generator for names of member files.
+     * @param memb_addr
+     *            IN: The offsets within the virtual address space, from 0 (zero) to HADDR_MAX, at which each type of
+     *            data storage begins.
+     * @param relax
+     *            IN: Allows read-only access to incomplete file sets when TRUE.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an array is null.
+     *
+     **/
+    public synchronized static native void H5Pset_fapl_multi(long fapl_id, int[] memb_map, long[] memb_fapl,
+            String[] memb_name, long[] memb_addr, boolean relax) throws HDF5LibraryException, NullPointerException;
+
+
+    /**
+     * H5Pset_fapl_log Sets up the logging virtual file driver (H5FD_LOG) for use. H5Pset_fapl_log modifies the file
+     * access property list to use the logging driver, H5FD_LOG. The logging virtual file driver (VFD) is a clone of the
+     * standard SEC2 (H5FD_SEC2) driver with additional facilities for logging VFD metrics and activity to a file.
+     *
+     * @param fapl_id
+     *            IN: File access property list identifier.
+     * @param logfile
+     *            IN: logfile is the name of the file in which the logging entries are to be recorded.
+     * @param flags
+     *            IN: Flags specifying the types of logging activity.
+     * @param buf_size
+     *            IN: The size of the logging buffers, in bytes.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - logfile is null.
+     **/
+    public synchronized static native void H5Pset_fapl_log(long fapl_id, String logfile, long flags, long buf_size)
+            throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_fapl_sec2(long fapl_id) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native void H5Pset_fapl_split(long fapl_id, String meta_ext, long meta_plist_id,
+            String raw_ext, long raw_plist_id) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_fapl_stdio(long fapl_id) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Pset_fapl_windows(long fapl_id) throws HDF5LibraryException, NullPointerException;
+
+    // /////// unimplemented ////////
+
+    // Generic property list routines //
+    // herr_t H5Pencode(hid_t plist_id, void *buf, size_t *nalloc);
+    // hid_t  H5Pdecode(const void *buf);
+
+    // Object creation property list (OCPL) routines //
+
+    // File creation property list (FCPL) routines //
+
+    // File access property list (FAPL) routines //
+    // herr_t H5Pset_driver( hid_t plist_id, hid_t new_driver_id, const void *new_driver_info )
+    // void *H5Pget_driver_info( hid_t plist_id )
+    // herr_t H5Pget_multi_type ( hid_t fapl_id, H5FD_mem_t *type )
+    // herr_t H5Pset_multi_type ( hid_t fapl_id, H5FD_mem_t type )
+    // herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr);
+    // herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len);
+    // herr_t H5Pget_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callbacks_ptr);
+    // herr_t H5Pset_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callbacks_ptr);
+    // herr_t H5Pset_core_write_tracking(hid_t fapl_id, hbool_t is_enabled, size_t page_size);
+    // herr_t H5Pget_core_write_tracking(hid_t fapl_id, hbool_t *is_enabled, size_t *page_size);
+
+    // Dataset creation property list (DCPL) routines //
+
+    // Dataset access property list (DAPL) routines //
+
+    // Dataset xfer property list (DXPL) routines //
+    // herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv, void *bkg);
+    // herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
+    // int H5Pget_preserve(hid_t plist_id);
+    // herr_t H5Pset_filter_callback(hid_t plist, H5Z_filter_func_t func, void *op_data)
+    // herr_t H5Pget_vlen_mem_manager(hid_t plist, H5MM_allocate_t *alloc, void **alloc_info, H5MM_free_t *free, void
+    // **free_info )
+    // herr_t H5Pset_vlen_mem_manager(hid_t plist, H5MM_allocate_t alloc, void *alloc_info, H5MM_free_t free, void
+    // *free_info )
+    // herr_t H5Pget_type_conv_cb(hid_t plist, H5T_conv_except_func_t *func, void **op_data)
+    // herr_t H5Pset_type_conv_cb( hid_t plist, H5T_conv_except_func_t func, void *op_data)
+
+    // Link creation property list (LCPL) routines //
+
+    // Group creation property list (GCPL) routines //
+
+    // String creation property list (STRCPL) routines //
+
+    // Link access property list (LAPL) routines //
+    // herr_t H5Pget_elink_cb( hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data )
+    // herr_t H5Pset_elink_cb( hid_t lapl_id, H5L_elink_traverse_t func, void *op_data )
+
+    // Object copy property list (OCPYPL) routines //
+    // herr_t H5Padd_merge_committed_dtype_path(hid_t plist_id, const char *path);
+    // herr_t H5Pfree_merge_committed_dtype_paths(hid_t plist_id);
+    // herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
+    // herr_t H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data);
+
+
+    // Other/Older property list routines //
+    // herr_t H5Pget_fapl_mpio( int fapl_id, MPI_Comm *comm, MPI_Info *info )
+    // herr_t H5Pset_fapl_mpio( int fapl_id, MPI_Comm comm, MPI_Info info )
+
+    // herr_t H5Pget_fapl_mpiposix( int fapl_id, MPI_Comm *comm, hbool_t *use_gpfs_hints )
+    // herr_t H5Pset_fapl_mpiposix( int fapl_id, MPI_Comm comm, hbool_t use_gpfs_hints )
+
+    // herr_t H5Pget_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode )
+    // herr_t H5Pset_dxpl_mpio( hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode )
+    // herr_t H5Pset_dxpl_mpio_chunk_opt (hid_t dxpl_id, H5FD_mpio_chunk_opt_t opt_mode)
+    // herr_t H5Pset_dxpl_mpio_chunk_opt_num (hid_t dxpl_id, unsigned num_chunk_per_proc)
+    // herr_t H5Pset_dxpl_mpio_chunk_opt_ratio (hid_t dxpl_id, unsigned percent_proc_per_chunk)
+    // herr_t H5Pset_dxpl_mpio_collective_opt (hid_t dxpl_id, H5FD_mpio_collective_opt_t opt_mode)
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5PL: HDF5 1.8 Plugin API Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+    /**
+     * H5PLset_loading_state uses one argument to enable or disable individual plugins.
+     *        The plugin_flags parameter is an encoded integer in which each bit controls a specific
+     *        plugin or class of plugins.
+     *        A plugin bit set to 0 (zero) prevents the use of the dynamic plugin corresponding
+     *        to that bit position. A plugin bit set to 1 (one) allows the use of that dynamic plugin.
+     *        All dynamic plugins can be enabled by setting plugin_flags to a negative value.
+     *        A value of 0 (zero) will disable all dynamic plugins.
+     *
+     *        H5PLset_loading_state inspects the HDF5_PLUGIN_PRELOAD environment variable every
+     *        time it is called. If the environment variable is set to the special :: string,
+     *        all dynamic plugins will be disabled.
+     *
+     * @param plugin_flags
+     *            IN: The list of dynamic plugin types to enable or disable.
+     *                A plugin bit set to 0 (zero) prevents use of that dynamic plugin.
+     *                A plugin bit set to 1 (one) enables use of that dynamic plugin.
+     *                Setting plugin_flags to a negative value enables all dynamic plugins.
+     *                Setting plugin_flags to 0 (zero) disables all dynamic plugins.
+     *
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5PLset_loading_state(int plugin_flags) throws HDF5LibraryException;
+
+    /**
+     * H5PLget_loading_state retrieves the state of the dynamic plugins flag, plugin_flags..
+     *
+     * @return the list of dynamic plugin types that are enabled or disabled.
+     *             A plugin bit set to 0 (zero) indicates that that dynamic plugin is disabled.
+     *             A plugin bit set to 1 (one) indicates that that dynamic plugin is enabled.
+     *             If the value of plugin_flags is negative, all dynamic plugins are enabled.
+     *             If the value of plugin_flags is 0 (zero), all dynamic plugins are disabled.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5PLget_loading_state() throws HDF5LibraryException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5R: HDF5 1.8 Reference API Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    private synchronized static native int H5Rcreate(byte[] ref, long loc_id, String name, int ref_type, long space_id)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Rcreate creates the reference, ref, of the type specified in ref_type, pointing to the object name located at
+     * loc_id.
+     *
+     * @param loc_id
+     *            IN: Location identifier used to locate the object being pointed to.
+     * @param name
+     *            IN: Name of object at location loc_id.
+     * @param ref_type
+     *            IN: Type of reference.
+     * @param space_id
+     *            IN: Dataspace identifier with selection.
+     *
+     * @return the reference (byte[]) if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an input array is null.
+     * @exception IllegalArgumentException
+     *                - an input array is invalid.
+     **/
+    public synchronized static byte[] H5Rcreate(long loc_id, String name, int ref_type, long space_id)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException {
+        /* These sizes are correct for HDF5.1.2 */
+        int ref_size = 8;
+        if (ref_type == HDF5Constants.H5R_DATASET_REGION) {
+            ref_size = 12;
+        }
+        byte rbuf[] = new byte[ref_size];
+
+        /* will raise an exception if fails */
+        H5Rcreate(rbuf, loc_id, name, ref_type, space_id);
+
+        return rbuf;
+    }
+
+    /**
+     * Given a reference to some object, H5Rdereference opens that object and return an identifier.
+     *
+     * @param dataset
+     *            IN: Dataset containing reference object.
+     * @param access_list
+     *            IN: Property list of the object being referenced.
+     * @param ref_type
+     *            IN: The reference type of ref.
+     * @param ref
+     *            IN: reference to an object
+     *
+     * @return valid identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - output array is null.
+     * @exception IllegalArgumentException
+     *                - output array is invalid.
+     **/
+    public static long H5Rdereference(long dataset, long access_list, int ref_type, byte[] ref)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException {
+        long id = _H5Rdereference(dataset, access_list, ref_type, ref);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Rdereference add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Rdereference(long dataset, long access_list, int ref_type, byte[] ref)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Rget_name retrieves a name for the object identified by ref.
+     *
+     * @param loc_id
+     *            IN: Identifier for the dataset containing the reference or for the group that dataset is in.
+     * @param ref_type
+     *            IN: Type of reference.
+     * @param ref
+     *            IN: An object or dataset region reference.
+     * @param name
+     *            OUT: A name associated with the referenced object or dataset region.
+     * @param size
+     *            IN: The size of the name buffer.
+     *
+     * @return Returns the length of the name if successful, returning 0 (zero) if no name is associated with the
+     *         identifier. Otherwise returns a negative value.
+     *
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - size is null.
+     * @exception IllegalArgumentException
+     *                - Argument is illegal.
+     *
+     **/
+    public synchronized static native long H5Rget_name(long loc_id, int ref_type, byte[] ref, String[] name, long size)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Rget_obj_type Given a reference to an object ref, H5Rget_obj_type returns the type of the object pointed to.
+     *
+     * @param loc_id
+     *            IN: loc_id of the reference object.
+     * @param ref_type
+     *            IN: Type of reference to query.
+     * @param ref
+     *            IN: the reference
+     *
+     * @return Returns the object type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - array is null.
+     * @exception IllegalArgumentException
+     *                - array is invalid.
+     **/
+    public synchronized static native int H5Rget_obj_type(long loc_id, int ref_type, byte ref[])
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Rget_obj_type2 Retrieves the type of object that an object reference points to.
+     *
+     * @see public static int H5Rget_obj_type(int loc_id, int ref_type, byte ref[])
+     **/
+    private synchronized static native int H5Rget_obj_type2(long loc_id, int ref_type, byte ref[], int[] obj_type)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * Given a reference to an object ref, H5Rget_region creates a copy of the dataspace of the dataset pointed to and
+     * defines a selection in the copy which is the region pointed to.
+     *
+     * @param loc_id
+     *            IN: loc_id of the reference object.
+     * @param ref_type
+     *            IN: The reference type of ref.
+     * @param ref
+     *            OUT: the reference to the object and region
+     *
+     * @return a valid identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - output array is null.
+     * @exception IllegalArgumentException
+     *                - output array is invalid.
+     **/
+    public static long H5Rget_region(long loc_id, int ref_type, byte[] ref) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException {
+        long id = _H5Rget_region(loc_id, ref_type, ref);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Rget_region add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Rget_region(long loc_id, int ref_type, byte[] ref)
+            throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5S: Dataspace Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Sclose releases a dataspace.
+     *
+     * @param space_id
+     *            Identifier of dataspace to release.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Sclose(long space_id) throws HDF5LibraryException {
+        if (space_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Sclose remove {}", space_id);
+        OPEN_IDS.remove(space_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Sclose(space_id);
+    }
+
+    private synchronized static native int _H5Sclose(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Scopy creates a new dataspace which is an exact copy of the dataspace identified by space_id.
+     *
+     * @param space_id
+     *            Identifier of dataspace to copy.
+     * @return a dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Scopy(long space_id) throws HDF5LibraryException {
+        long id = _H5Scopy(space_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Scopy add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Scopy(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Screate creates a new dataspace of a particular type.
+     *
+     * @param type
+     *            IN: The type of dataspace to be created.
+     *
+     * @return a dataspace identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Screate(int type) throws HDF5LibraryException {
+        long id = _H5Screate(type);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Screate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Screate(int type) throws HDF5LibraryException;
+
+    /**
+     * H5Screate_simple creates a new simple data space and opens it for access.
+     *
+     * @param rank
+     *            IN: Number of dimensions of dataspace.
+     * @param dims
+     *            IN: An array of the size of each dimension.
+     * @param maxdims
+     *            IN: An array of the maximum size of each dimension.
+     *
+     * @return a dataspace identifier
+     *
+     * @exception HDF5Exception
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims or maxdims is null.
+     **/
+    public static long H5Screate_simple(int rank, long[] dims, long[] maxdims) throws HDF5Exception,
+    NullPointerException {
+        long id = _H5Screate_simple(rank, dims, maxdims);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Screate_simple add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Screate_simple(int rank, long[] dims, long[] maxdims)
+            throws HDF5Exception, NullPointerException;
+
+    /**
+     * H5Sdecode reconstructs the HDF5 data space object and returns a new object handle for it.
+     *
+     * @param buf
+     *            IN: Buffer for the data space object to be decoded.
+     *
+     * @return a new object handle
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native long H5Sdecode(byte[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sencode converts a data space description into binary form in a buffer.
+     *
+     * @param obj_id
+     *            IN: Identifier of the object to be encoded.
+     *
+     * @return the buffer for the object to be encoded into.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native byte[] H5Sencode(long obj_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sextent_copy copies the extent from source_space_id to dest_space_id. This action may change the type of the
+     * dataspace.
+     *
+     * @param dest_space_id
+     *            IN: The identifier for the dataspace from which the extent is copied.
+     * @param source_space_id
+     *            IN: The identifier for the dataspace to which the extent is copied.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sextent_copy(long dest_space_id, long source_space_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Sextent_equal determines whether the dataspace extents of two dataspaces, space1_id and space2_id, are equal.
+     *
+     * @param first_space_id
+     *            IN: The identifier for the first dataspace.
+     * @param second_space_id
+     *            IN: The identifier for the seconddataspace.
+     *
+     * @return true if successful, else false
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Sextent_equal(long first_space_id, long second_space_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Sget_select_bounds retrieves the coordinates of the bounding box containing the current selection and places
+     * them into user-supplied buffers.
+     * <P>
+     * The start and end buffers must be large enough to hold the dataspace rank number of coordinates.
+     *
+     * @param spaceid
+     *            Identifier of dataspace to release.
+     * @param start
+     *            coordinates of lowest corner of bounding box.
+     * @param end
+     *            coordinates of highest corner of bounding box.
+     *
+     * @return a non-negative value if successful,with start and end initialized.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - start or end is null.
+     **/
+    public synchronized static native int H5Sget_select_bounds(long spaceid, long[] start, long[] end)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sget_select_elem_npoints returns the number of element points in the current dataspace selection.
+     *
+     * @param spaceid
+     *            Identifier of dataspace to release.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Sget_select_elem_npoints(long spaceid) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_select_elem_pointlist returns an array of of element points in the current dataspace selection. The point
+     * coordinates have the same dimensionality (rank) as the dataspace they are located within, one coordinate per
+     * point.
+     *
+     * @param spaceid
+     *            Identifier of dataspace to release.
+     * @param startpoint
+     *            first point to retrieve
+     * @param numpoints
+     *            number of points to retrieve
+     * @param buf
+     *            returns points startblock to startblock+num-1, each points is <i>rank</i> longs.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native int H5Sget_select_elem_pointlist(long spaceid, long startpoint, long numpoints,
+            long[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sget_select_hyper_blocklist returns an array of hyperslab blocks. The block coordinates have the same
+     * dimensionality (rank) as the dataspace they are located within. The list of blocks is formatted as follows:
+     *
+     * <pre>
+     *    <"start" coordinate>, immediately followed by
+     *    <"opposite" corner coordinate>, followed by
+     *   the next "start" and "opposite" coordinates,
+     *   etc.
+     *   until all of the selected blocks have been listed.
+     * </pre>
+     *
+     * @param spaceid
+     *            Identifier of dataspace to release.
+     * @param startblock
+     *            first block to retrieve
+     * @param numblocks
+     *            number of blocks to retrieve
+     * @param buf
+     *            returns blocks startblock to startblock+num-1, each block is <i>rank</i> * 2 (corners) longs.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native int H5Sget_select_hyper_blocklist(long spaceid, long startblock, long numblocks,
+            long[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sget_select_hyper_nblocks returns the number of hyperslab blocks in the current dataspace selection.
+     *
+     * @param spaceid
+     *            Identifier of dataspace to release.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Sget_select_hyper_nblocks(long spaceid) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_select_npoints determines the number of elements in the current selection of a dataspace.
+     *
+     * @param space_id
+     *            IN: Identifier of the dataspace object to query
+     *
+     * @return the number of elements in the selection if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Sget_select_npoints(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_select_type retrieves the type of selection currently defined for the dataspace space_id.
+     *
+     * @param space_id
+     *            IN: Identifier of the dataspace object to query
+     *
+     * @return the dataspace selection type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sget_select_type(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_simple_extent_dims returns the size and maximum sizes of each dimension of a dataspace through the dims
+     * and maxdims parameters.
+     *
+     * @param space_id
+     *            IN: Identifier of the dataspace object to query
+     * @param dims
+     *            OUT: Pointer to array to store the size of each dimension.
+     * @param maxdims
+     *            OUT: Pointer to array to store the maximum size of each dimension.
+     *
+     * @return the number of dimensions in the dataspace if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims or maxdims is null.
+     **/
+    public synchronized static native int H5Sget_simple_extent_dims(long space_id, long[] dims, long[] maxdims)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sget_simple_extent_ndims determines the dimensionality (or rank) of a dataspace.
+     *
+     * @param space_id
+     *            IN: Identifier of the dataspace
+     *
+     * @return the number of dimensions in the dataspace if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sget_simple_extent_ndims(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_simple_extent_npoints determines the number of elements in a dataspace.
+     *
+     * @param space_id
+     *            ID of the dataspace object to query
+     * @return the number of elements in the dataspace if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Sget_simple_extent_npoints(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sget_simple_extent_type queries a dataspace to determine the current class of a dataspace.
+     *
+     * @param space_id
+     *            Dataspace identifier.
+     *
+     * @return a dataspace class name if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sget_simple_extent_type(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sis_simple determines whether a dataspace is a simple dataspace.
+     *
+     * @param space_id
+     *            Identifier of the dataspace to query
+     *
+     * @return true if is a simple dataspace
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Sis_simple(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Soffset_simple sets the offset of a simple dataspace space_id.
+     *
+     * @param space_id
+     *            IN: The identifier for the dataspace object to reset.
+     * @param offset
+     *            IN: The offset at which to position the selection.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - offset array is null.
+     **/
+    public synchronized static native int H5Soffset_simple(long space_id, byte[] offset) throws HDF5LibraryException,
+    NullPointerException;
+
+    public synchronized static int H5Soffset_simple(long space_id, long[] offset) throws HDF5Exception,
+    NullPointerException {
+        if (offset == null) {
+            return -1;
+        }
+
+        HDFArray theArray = new HDFArray(offset);
+        byte[] theArr = theArray.byteify();
+
+        int retVal = H5Soffset_simple(space_id, theArr);
+
+        theArr = null;
+        theArray = null;
+        return retVal;
+    }
+
+    /**
+     * H5Sselect_all selects the entire extent of the dataspace space_id.
+     *
+     * @param space_id
+     *            IN: The identifier of the dataspace to be selected.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sselect_all(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sselect_elements selects array elements to be included in the selection for the space_id dataspace.
+     *
+     * @param space_id
+     *            Identifier of the dataspace.
+     * @param op
+     *            operator specifying how the new selection is combined.
+     * @param num_elements
+     *            Number of elements to be selected.
+     * @param coord
+     *            A 2-dimensional array specifying the coordinates of the elements.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    private synchronized static native int H5Sselect_elements(long space_id, int op, int num_elements, byte[] coord)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Sselect_elements selects array elements to be included in the selection for the space_id dataspace.
+     *
+     * @param space_id
+     *            Identifier of the dataspace.
+     * @param op
+     *            operator specifying how the new selection is combined.
+     * @param num_elements
+     *            Number of elements to be selected.
+     * @param coord2D
+     *            A 2-dimensional array specifying the coordinates of the elements.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5Exception
+     *                - Error in the data conversion
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - cord array is
+     **/
+    public synchronized static int H5Sselect_elements(long space_id, int op, int num_elements, long[][] coord2D)
+            throws HDF5Exception, HDF5LibraryException, NullPointerException {
+        if (coord2D == null) {
+            return -1;
+        }
+
+        HDFArray theArray = new HDFArray(coord2D);
+        byte[] coord = theArray.byteify();
+
+        int retVal = H5Sselect_elements(space_id, op, num_elements, coord);
+
+        coord = null;
+        theArray = null;
+        return retVal;
+    }
+
+    /**
+     * H5Sselect_hyperslab selects a hyperslab region to add to the current selected region for the dataspace specified
+     * by space_id. The start, stride, count, and block arrays must be the same size as the rank of the dataspace.
+     *
+     * @param space_id
+     *            IN: Identifier of dataspace selection to modify
+     * @param op
+     *            IN: Operation to perform on current selection.
+     * @param start
+     *            IN: Offset of start of hyperslab
+     * @param stride
+     *            IN: Hyperslab stride.
+     * @param count
+     *            IN: Number of blocks included in hyperslab.
+     * @param block
+     *            IN: Size of block in hyperslab.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an input array is null.
+     * @exception IllegalArgumentException
+     *                - an input array is invalid.
+     **/
+    public synchronized static int H5Sselect_hyperslab(long space_id, int op, byte[] start, byte[] stride,
+            byte[] count, byte[] block) throws HDF5LibraryException, NullPointerException, IllegalArgumentException {
+        ByteBuffer startbb = ByteBuffer.wrap(start);
+        long[] lastart = (startbb.asLongBuffer()).array();
+        ByteBuffer stridebb = ByteBuffer.wrap(stride);
+        long[] lastride = (stridebb.asLongBuffer()).array();
+        ByteBuffer countbb = ByteBuffer.wrap(count);
+        long[] lacount = (countbb.asLongBuffer()).array();
+        ByteBuffer blockbb = ByteBuffer.wrap(block);
+        long[] lablock = (blockbb.asLongBuffer()).array();
+
+        return H5Sselect_hyperslab(space_id, op, lastart, lastride, lacount, lablock);
+    }
+
+    public synchronized static native int H5Sselect_hyperslab(long space_id, int op, long[] start, long[] stride,
+            long[] count, long[] block) throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Sselect_none resets the selection region for the dataspace space_id to include no elements.
+     *
+     * @param space_id
+     *            IN: The identifier of the dataspace to be reset.
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sselect_none(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sselect_valid verifies that the selection for the dataspace.
+     *
+     * @param space_id
+     *            The identifier for the dataspace in which the selection is being reset.
+     *
+     * @return true if the selection is contained within the extent and FALSE if it is not or is an error.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Sselect_valid(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sset_extent_none removes the extent from a dataspace and sets the type to H5S_NONE.
+     *
+     * @param space_id
+     *            The identifier for the dataspace from which the extent is to be removed.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Sset_extent_none(long space_id) throws HDF5LibraryException;
+
+    /**
+     * H5Sset_extent_simple sets or resets the size of an existing dataspace.
+     *
+     * @param space_id
+     *            Dataspace identifier.
+     * @param rank
+     *            Rank, or dimensionality, of the dataspace.
+     * @param current_size
+     *            Array containing current size of dataspace.
+     * @param maximum_size
+     *            Array containing maximum size of dataspace.
+     *
+     * @return a dataspace identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Sset_extent_simple(long space_id, int rank, long[] current_size,
+            long[] maximum_size) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static long H5Sset_extent_simple(long space_id, int rank, byte[] current_size,
+            byte[] maximum_size) throws HDF5LibraryException, NullPointerException {
+        ByteBuffer csbb = ByteBuffer.wrap(current_size);
+        long[] lacs = (csbb.asLongBuffer()).array();
+        ByteBuffer maxsbb = ByteBuffer.wrap(maximum_size);
+        long[] lamaxs = (maxsbb.asLongBuffer()).array();
+
+        return H5Sset_extent_simple(space_id, rank, lacs, lamaxs);
+    }
+
+    /**
+     * H5Sget_regular_hyperslab determines if a hyperslab selection is regular for the dataspace specified
+     * by space_id. The start, stride, count, and block arrays must be the same size as the rank of the dataspace.
+     *
+     * @param space_id
+     *            IN: Identifier of dataspace selection to modify
+     * @param start
+     *           OUT: Offset of start of hyperslab
+     * @param stride
+     *           OUT: Hyperslab stride.
+     * @param count
+     *           OUT: Number of blocks included in hyperslab.
+     * @param block
+     *           OUT: Size of block in hyperslab.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - an output array is null.
+     * @exception IllegalArgumentException
+     *                - an output array is invalid.
+     **/
+     public synchronized static native void H5Sget_regular_hyperslab(long space_id, long[] start, long[] stride, long[] count, long[] block) throws HDF5LibraryException, NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Sis_regular_hyperslab retrieves a regular hyperslab selection for the dataspace specified
+     * by space_id.
+     *
+     * @param space_id
+     *            IN: Identifier of dataspace selection to query
+     *
+     * @return a TRUE/FALSE for hyperslab selection if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+     public synchronized static native boolean H5Sis_regular_hyperslab(long space_id) throws HDF5LibraryException;
+
+    // /////// unimplemented ////////
+
+
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5T: Datatype Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    /**
+     * H5Tarray_create creates a new array datatype object.
+     *
+     * @param base_id
+     *            IN: Datatype identifier for the array base datatype.
+     * @param ndims
+     *            IN: Rank of the array.
+     * @param dim
+     *            IN: Size of each array dimension.
+     *
+     * @return a valid datatype identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dim is null.
+     **/
+    public static long H5Tarray_create(long base_id, int ndims, long[] dim) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Tarray_create2(base_id, ndims, dim);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tarray_create add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tarray_create2(long base_id, int ndims, long[] dim)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tclose releases a datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to release.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Tclose(long type_id) throws HDF5LibraryException {
+        if (type_id < 0)
+            return 0; // throw new HDF5LibraryException("Negative ID");;
+
+        log.trace("OPEN_IDS: H5Tclose remove {}", type_id);
+        OPEN_IDS.remove(type_id);
+        log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        return _H5Tclose(type_id);
+    }
+
+    private synchronized static native int _H5Tclose(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tcommit saves a transient datatype as an immutable named datatype in a file.
+     *
+     * @param loc_id
+     *            IN: Location identifier.
+     * @param name
+     *            IN: Name given to committed datatype.
+     * @param type_id
+     *            IN: Identifier of datatype to be committed.
+     * @param lcpl_id
+     *            IN: Link creation property list.
+     * @param tcpl_id
+     *            IN: Datatype creation property list.
+     * @param tapl_id
+     *            IN: Datatype access property list.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Tcommit(long loc_id, String name, long type_id, long lcpl_id,
+            long tcpl_id, long tapl_id) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tcommit_anon commits a transient datatype (not immutable) to a file, turning it into a named datatype with the
+     * specified creation and property lists.
+     *
+     * @param loc_id
+     *            IN: Location identifier.
+     * @param type_id
+     *            IN: Identifier of datatype to be committed.
+     * @param tcpl_id
+     *            IN: Datatype creation property list.
+     * @param tapl_id
+     *            IN: Datatype access property list.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tcommit_anon(long loc_id, long type_id, long tcpl_id, long tapl_id)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Tcommitted queries a type to determine whether the type specified by the type identifier is a named type or a
+     * transient type.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype.
+     *
+     * @return true the datatype has been committed
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Tcommitted(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tcompiler_conv finds out whether the library's conversion function from type src_id to type dst_id is a
+     * compiler (hard) conversion.
+     *
+     * @param src_id
+     *            IN: Identifier of source datatype.
+     * @param dst_id
+     *            IN: Identifier of destination datatype.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tcompiler_conv(long src_id, long dst_id) throws HDF5LibraryException;
+
+    /**
+     ** H5Tconvert converts nelmts elements from the type specified by the src_id identifier to type dst_id.
+     *
+     * @param src_id
+     *            IN: Identifier of source datatype.
+     * @param dst_id
+     *            IN: Identifier of destination datatype.
+     * @param nelmts
+     *            IN: Size of array buf.
+     * @param buf
+     *            IN: Array containing pre- and post-conversion values.
+     * @param background
+     *            IN: Optional background buffer.
+     * @param plist_id
+     *            IN: Dataset transfer property list identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native void H5Tconvert(long src_id, long dst_id, long nelmts, byte[] buf,
+            byte[] background, long plist_id) throws HDF5LibraryException, NullPointerException;
+
+    // int H5Tconvert(int src_id, int dst_id, long nelmts, Pointer buf, Pointer background, int plist_id);
+
+    /**
+     * H5Tcopy copies an existing datatype. The returned type is always transient and unlocked.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to copy. Can be a datatype identifier, a predefined datatype (defined in
+     *            H5Tpublic.h), or a dataset Identifier.
+     *
+     * @return a datatype identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tcopy(long type_id) throws HDF5LibraryException {
+        long id = _H5Tcopy(type_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tcopy add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tcopy(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tcreate creates a new dataype of the specified class with the specified number of bytes.
+     *
+     * @param tclass
+     *            IN: Class of datatype to create.
+     * @param size
+     *            IN: The number of bytes in the datatype to create.
+     *
+     * @return datatype identifier
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tcreate(int tclass, long size) throws HDF5LibraryException {
+        long id = _H5Tcreate(tclass, size);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tcreate add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tcreate(int type, long size) throws HDF5LibraryException;
+
+    /**
+     * H5Tdecode reconstructs the HDF5 data type object and returns a new object handle for it.
+     *
+     * @param buf
+     *            IN: Buffer for the data type object to be decoded.
+     *
+     * @return a new object handle
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public static long H5Tdecode(byte[] buf) throws HDF5LibraryException, NullPointerException {
+        long id = _H5Tdecode(buf);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tdecode add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tdecode(byte[] buf) throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tdetect_class determines whether the datatype specified in dtype_id contains any datatypes of the datatype
+     * class specified in dtype_class.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param cls
+     *            IN: Identifier of datatype cls.
+     *
+     * @return true if the datatype specified in dtype_id contains any datatypes of the datatype class
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Tdetect_class(long type_id, int cls) throws HDF5LibraryException;
+
+    /**
+     * H5Tencode converts a data type description into binary form in a buffer.
+     *
+     * @param obj_id
+     *            IN: Identifier of the object to be encoded.
+     * @param buf
+     *            OUT: Buffer for the object to be encoded into. If the provided buffer is NULL, only the size of buffer
+     *            needed is returned.
+     * @param nalloc
+     *            IN: The size of the allocated buffer.
+     *
+     * @return the size needed for the allocated buffer.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - buf is null.
+     **/
+    public synchronized static native int H5Tencode(long obj_id, byte[] buf, long nalloc) throws HDF5LibraryException,
+    NullPointerException;
+
+    // /**
+    // * H5Tencode converts a data type description into binary form in a buffer.
+    // *
+    // * @param obj_id IN: Identifier of the object to be encoded.
+    // *
+    // * @return the buffer for the object to be encoded into.
+    // *
+    // * @exception HDF5LibraryException - Error from the HDF-5 Library.
+    // **/
+    // public synchronized static native byte[] H5Tencode(int obj_id)
+    // throws HDF5LibraryException;
+
+    /**
+     * H5Tenum_create creates a new enumeration datatype based on the specified base datatype, parent_id, which must be
+     * an integer type.
+     *
+     * @param base_id
+     *            IN: Identifier of the parent datatype to release.
+     *
+     * @return the datatype identifier for the new enumeration datatype
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tenum_create(long base_id) throws HDF5LibraryException {
+        long id = _H5Tenum_create(base_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tenum_create add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tenum_create(long base_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tenum_insert inserts a new enumeration datatype member into an enumeration datatype.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param name
+     *            IN: The name of the member
+     * @param value
+     *            IN: The value of the member, data of the correct type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native void H5Tenum_insert(long type, String name, byte[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tenum_insert inserts a new enumeration datatype member into an enumeration datatype.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param name
+     *            IN: The name of the member
+     * @param value
+     *            IN: The value of the member, data of the correct type
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static int H5Tenum_insert(long type, String name, int[] value) throws HDF5LibraryException,
+    NullPointerException {
+        return H5Tenum_insert_int(type, name, value);
+    }
+
+    public static int H5Tenum_insert(long type, String name, int value) throws HDF5LibraryException,
+    NullPointerException {
+        int[] val = { value };
+        return H5Tenum_insert_int(type, name, val);
+    }
+
+    private synchronized static native int H5Tenum_insert_int(long type, String name, int[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tenum_nameof finds the symbol name that corresponds to the specified value of the enumeration datatype type.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param value
+     *            IN: The value of the member, data of the correct
+     * @param size
+     *            IN: The probable length of the name
+     *
+     * @return the symbol name.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - value is null.
+     **/
+    public synchronized static native String H5Tenum_nameof(long type, byte[] value, long size)
+            throws HDF5LibraryException, NullPointerException;
+
+    // int H5Tenum_nameof(int type, Pointer value, Buffer name/* out */, long size);
+
+    /**
+     * H5Tenum_nameof finds the symbol name that corresponds to the specified value of the enumeration datatype type.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param value
+     *            IN: The value of the member, data of the correct
+     * @param name
+     *            OUT: The name of the member
+     * @param size
+     *            IN: The max length of the name
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static int H5Tenum_nameof(long type, int[] value, String[] name, int size) throws HDF5LibraryException,
+    NullPointerException {
+        return H5Tenum_nameof_int(type, value, name, size);
+    }
+
+    private synchronized static native int H5Tenum_nameof_int(long type, int[] value, String[] name, int size)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tenum_valueof finds the value that corresponds to the specified name of the enumeration datatype type.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param name
+     *            IN: The name of the member
+     * @param value
+     *            OUT: The value of the member
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tenum_valueof(long type, String name, byte[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tenum_valueof finds the value that corresponds to the specified name of the enumeration datatype type.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     * @param name
+     *            IN: The name of the member
+     * @param value
+     *            OUT: The value of the member
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static int H5Tenum_valueof(long type, String name, int[] value) throws HDF5LibraryException,
+    NullPointerException {
+        return H5Tenum_valueof_int(type, name, value);
+    }
+
+    private synchronized static native int H5Tenum_valueof_int(long type, String name, int[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tequal determines whether two datatype identifiers refer to the same datatype.
+     *
+     * @param type_id1
+     *            IN: Identifier of datatype to compare.
+     * @param type_id2
+     *            IN: Identifier of datatype to compare.
+     *
+     * @return true if the datatype identifiers refer to the same datatype, else false.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Tequal(long type_id1, long type_id2) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_array_dims returns the sizes of the dimensions of the specified array datatype object.
+     *
+     * @param type_id
+     *            IN: Datatype identifier of array object.
+     * @param dims
+     *            OUT: Sizes of array dimensions.
+     *
+     * @return the non-negative number of dimensions of the array type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims is null.
+     **/
+    public static int H5Tget_array_dims(long type_id, long[] dims) throws HDF5LibraryException, NullPointerException {
+        return H5Tget_array_dims2(type_id, dims);
+    }
+
+    /**
+     * H5Tget_array_dims2 returns the sizes of the dimensions of the specified array datatype object.
+     *
+     * @param type_id
+     *            IN: Datatype identifier of array object.
+     * @param dims
+     *            OUT: Sizes of array dimensions.
+     *
+     * @return the non-negative number of dimensions of the array type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - dims is null.
+     **/
+    public synchronized static native int H5Tget_array_dims2(long type_id, long[] dims) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Tget_array_ndims returns the rank, the number of dimensions, of an array datatype object.
+     *
+     * @param type_id
+     *            IN: Datatype identifier of array object.
+     *
+     * @return the rank of the array
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_array_ndims(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_class returns the datatype class identifier.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return datatype class identifier if successful; otherwise H5T_NO_CLASS(-1).
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_class(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_class_name returns the datatype class identifier.
+     *
+     * @param class_id
+     *            IN: Identifier of class from H5Tget_class.
+     *
+     * @return class name if successful; otherwise H5T_NO_CLASS.
+     *
+     **/
+    public static String H5Tget_class_name(long class_id) {
+        String retValue = null;
+        if (HDF5Constants.H5T_INTEGER == class_id) /* integer types */
+            retValue = "H5T_INTEGER";
+        else if (HDF5Constants.H5T_FLOAT == class_id) /* floating-point types */
+            retValue = "H5T_FLOAT";
+        else if (HDF5Constants.H5T_TIME == class_id) /* date and time types */
+            retValue = "H5T_TIME";
+        else if (HDF5Constants.H5T_STRING == class_id) /* character string types */
+            retValue = "H5T_STRING";
+        else if (HDF5Constants.H5T_BITFIELD == class_id) /* bit field types */
+            retValue = "H5T_BITFIELD";
+        else if (HDF5Constants.H5T_OPAQUE == class_id) /* opaque types */
+            retValue = "H5T_OPAQUE";
+        else if (HDF5Constants.H5T_COMPOUND == class_id) /* compound types */
+            retValue = "H5T_COMPOUND";
+        else if (HDF5Constants.H5T_REFERENCE == class_id)/* reference types */
+            retValue = "H5T_REFERENCE";
+        else if (HDF5Constants.H5T_ENUM == class_id) /* enumeration types */
+            retValue = "H5T_ENUM";
+        else if (HDF5Constants.H5T_VLEN == class_id) /* Variable-Length types */
+            retValue = "H5T_VLEN";
+        else if (HDF5Constants.H5T_ARRAY == class_id) /* Array types */
+            retValue = "H5T_ARRAY";
+        else
+            retValue = "H5T_NO_CLASS";
+
+        return retValue;
+    }
+
+    /**
+     * H5Tget_create_plist returns a property list identifier for the datatype creation property list associated with
+     * the datatype specified by type_id.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype.
+     *
+     * @return a datatype property list identifier.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tget_create_plist(long type_id) throws HDF5LibraryException {
+        long id = _H5Tget_create_plist(type_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: _H5Tget_create_plist add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tget_create_plist(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_cset retrieves the character set type of a string datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a valid character set type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_cset(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_cset the character set to be used.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to modify.
+     * @param cset
+     *            IN: Character set type.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_cset(long type_id, int cset) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_ebias retrieves the exponent bias of a floating-point type.
+     *
+     * @param type_id
+     *            Identifier of datatype to query.
+     *
+     * @return the bias if successful; otherwise 0.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_ebias(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_ebias sets the exponent bias of a floating-point type.
+     *
+     * @param type_id
+     *            Identifier of datatype to set.
+     * @param ebias
+     *            Exponent bias value.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Tset_ebias(long type_id, int ebias) throws HDF5LibraryException {
+        H5Tset_ebias(type_id, (long) ebias);
+        return 0;
+    }
+
+    /**
+     * H5Tget_ebias retrieves the exponent bias of a floating-point type.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return the bias
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Tget_ebias_long(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_ebias sets the exponent bias of a floating-point type.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param ebias
+     *            IN: Exponent bias value.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tset_ebias(long type_id, long ebias) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_fields retrieves information about the locations of the various bit fields of a floating point datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param fields
+     *            OUT: location of size and bit-position.
+     *            <ul>
+     *            <li>fields[0] = spos OUT: location to return size of in bits.</li>
+     *            <li>fields[1] = epos OUT: location to return exponent bit-position.</li>
+     *            <li>fields[2] = esize OUT: location to return size of exponent in bits.</li>
+     *            <li>fields[3] = mpos OUT: location to return mantissa bit-position.</li>
+     *            <li>fields[4] = msize OUT: location to return size of mantissa in bits.</li>
+     *            </ul>
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - fields is null.
+     * @exception IllegalArgumentException
+     *                - fields array is invalid.
+     **/
+    public synchronized static native void H5Tget_fields(long type_id, long[] fields) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Tget_fields retrieves information about the locations of the various bit fields of a floating point datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param fields
+     *            OUT: location of size and bit-position.
+     *
+     *            <pre>
+     *      fields[0] = spos  OUT: location to return size of in bits.
+     *      fields[1] = epos  OUT: location to return exponent bit-position.
+     *      fields[2] = esize OUT: location to return size of exponent in bits.
+     *      fields[3] = mpos  OUT: location to return mantissa bit-position.
+     *      fields[4] = msize OUT: location to return size of mantissa in bits.
+     * </pre>
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - fields is null.
+     * @exception IllegalArgumentException
+     *                - fields array is invalid.
+     **/
+    public static int H5Tget_fields(long type_id, int[] fields) throws HDF5LibraryException, NullPointerException,
+    IllegalArgumentException {
+        return H5Tget_fields_int(type_id, fields);
+    }
+
+    private synchronized static native int H5Tget_fields_int(long type_id, int[] fields) throws HDF5LibraryException,
+    NullPointerException, IllegalArgumentException;
+
+    /**
+     * H5Tset_fields sets the locations and sizes of the various floating point bit fields.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param spos
+     *            IN: Size position.
+     * @param epos
+     *            IN: Exponent bit position.
+     * @param esize
+     *            IN: Size of exponent in bits.
+     * @param mpos
+     *            IN: Mantissa bit position.
+     * @param msize
+     *            IN: Size of mantissa in bits.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tset_fields(long type_id, long spos, long epos, long esize, long mpos,
+            long msize) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_fields sets the locations and sizes of the various floating point bit fields.
+     *
+     * @param type_id
+     *            Identifier of datatype to set.
+     * @param spos
+     *            Size position.
+     * @param epos
+     *            Exponent bit position.
+     * @param esize
+     *            Size of exponent in bits.
+     * @param mpos
+     *            Mantissa bit position.
+     * @param msize
+     *            Size of mantissa in bits.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Tset_fields(long type_id, int spos, int epos, int esize, int mpos, int msize)
+            throws HDF5LibraryException {
+        H5Tset_fields(type_id, (long) spos, (long) epos, (long) esize, (long) mpos, (long) msize);
+        return 0;
+    }
+
+    /**
+     * H5Tget_inpad retrieves the internal padding type for unused bits in floating-point datatypes.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a valid padding type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_inpad(long type_id) throws HDF5LibraryException;
+
+    /**
+     * If any internal bits of a floating point type are unused (that is, those significant bits which are not part of
+     * the sign, exponent, or mantissa), then H5Tset_inpad will be filled according to the value of the padding value
+     * property inpad.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to modify.
+     * @param inpad
+     *            IN: Padding type.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_inpad(long type_id, int inpad) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_member_class returns the class of datatype of the specified member.
+     *
+     * @param type_id
+     *            IN: Datatype identifier of compound object.
+     * @param membno
+     *            IN: Compound object member number.
+     *
+     * @return the class of the datatype of the field if successful;
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_member_class(long type_id, int membno) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_member_index retrieves the index of a field of a compound datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param field_name
+     *            IN: Field name of the field index to retrieve.
+     *
+     * @return if field is defined, the index; else negative.
+     **/
+    public synchronized static native int H5Tget_member_index(long type_id, String field_name);
+
+    /**
+     * H5Tget_member_name retrieves the name of a field of a compound datatype or an element of an enumeration datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param field_idx
+     *            IN: Field index (0-based) of the field name to retrieve.
+     *
+     * @return a valid pointer to the name if successful; otherwise null.
+     **/
+    public synchronized static native String H5Tget_member_name(long type_id, int field_idx);
+
+    /**
+     * H5Tget_member_offset returns the byte offset of the specified member of the compound datatype. This is the byte
+     * offset in the HDF-5 file/library, NOT the offset of any Java object which might be mapped to this data item.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param membno
+     *            IN: Field index (0-based) of the field type to retrieve.
+     *
+     * @return the offset of the member.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Tget_member_offset(long type_id, int membno) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_member_type returns the datatype of the specified member.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param field_idx
+     *            IN: Field index (0-based) of the field type to retrieve.
+     *
+     * @return the identifier of a copy of the datatype of the field if successful;
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tget_member_type(long type_id, int field_idx) throws HDF5LibraryException {
+        long id = _H5Tget_member_type(type_id, field_idx);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tget_member_type add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tget_member_type(long type_id, int field_idx)
+            throws HDF5LibraryException;
+
+    /**
+     * H5Tget_member_value returns the value of the enumeration datatype member memb_no.
+     *
+     * @param type_id
+     *            IN: Datatype identifier for the enumeration datatype.
+     * @param membno
+     *            IN: Number of the enumeration datatype member.
+     * @param value
+     *            OUT: The value of the member
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - value is null.
+     **/
+    public synchronized static native void H5Tget_member_value(long type_id, int membno, byte[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tget_member_value returns the value of the enumeration datatype member memb_no.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype.
+     * @param membno
+     *            IN: The name of the member
+     * @param value
+     *            OUT: The value of the member
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - value is null.
+     **/
+    public static int H5Tget_member_value(long type_id, int membno, int[] value) throws HDF5LibraryException,
+    NullPointerException {
+        return H5Tget_member_value_int(type_id, membno, value);
+    }
+
+    private synchronized static native int H5Tget_member_value_int(long type_id, int membno, int[] value)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tget_native_type returns the equivalent native datatype for the datatype specified in type_id.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query. Direction of search is assumed to be in ascending order.
+     *
+     * @return the native datatype identifier for the specified dataset datatype.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static long H5Tget_native_type(long type_id) throws HDF5LibraryException {
+        return H5Tget_native_type(type_id, HDF5Constants.H5T_DIR_ASCEND);
+    }
+
+    /**
+     * H5Tget_native_type returns the equivalent native datatype for the datatype specified in type_id.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param direction
+     *            IN: Direction of search.
+     *
+     * @return the native datatype identifier for the specified dataset datatype.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tget_native_type(long type_id, int direction) throws HDF5LibraryException {
+        long id = _H5Tget_native_type(type_id, direction);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tget_native_type add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tget_native_type(long tid, int direction) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_nmembers retrieves the number of fields a compound datatype has.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return number of members datatype has if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_nmembers(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_norm retrieves the mantissa normalization of a floating-point datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a valid normalization type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_norm(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_norm sets the mantissa normalization of a floating-point datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param norm
+     *            IN: Mantissa normalization type.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_norm(long type_id, int norm) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_offset retrieves the bit offset of the first significant bit.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a positive offset value if successful; otherwise 0.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_offset(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_offset sets the bit offset of the first significant bit.
+     *
+     * @param type_id
+     *            Identifier of datatype to set.
+     * @param offset
+     *            Offset of first significant bit.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Tset_offset(long type_id, int offset) throws HDF5LibraryException {
+        H5Tset_offset(type_id, (long) offset);
+        return 0;
+    }
+
+    /**
+     * H5Tset_offset sets the bit offset of the first significant bit.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param offset
+     *            IN: Offset of first significant bit.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tset_offset(long type_id, long offset) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_order returns the byte order of an atomic datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a byte order constant if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_order(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_order sets the byte ordering of an atomic datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param order
+     *            IN: Byte ordering constant.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_order(long type_id, int order) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_pad retrieves the padding type of the least and most-significant bit padding.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     * @param pad
+     *            OUT: locations to return least-significant and most-significant bit padding type.
+     *
+     *            <pre>
+     *      pad[0] = lsb // least-significant bit padding type
+     *      pad[1] = msb // most-significant bit padding type
+     * </pre>
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - pad is null.
+     **/
+    public synchronized static native int H5Tget_pad(long type_id, int[] pad) throws HDF5LibraryException,
+    NullPointerException;
+
+    /**
+     * H5Tset_pad sets the least and most-significant bits padding types.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param lsb
+     *            IN: Padding type for least-significant bits.
+     * @param msb
+     *            IN: Padding type for most-significant bits.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_pad(long type_id, int lsb, int msb) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_precision returns the precision of an atomic datatype.
+     *
+     * @param type_id
+     *            Identifier of datatype to query.
+     *
+     * @return the number of significant bits if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_precision(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_precision sets the precision of an atomic datatype.
+     *
+     * @param type_id
+     *            Identifier of datatype to set.
+     * @param precision
+     *            Number of bits of precision for datatype.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static int H5Tset_precision(long type_id, int precision) throws HDF5LibraryException {
+        H5Tset_precision(type_id, (long) precision);
+        return 0;
+    }
+
+    /**
+     * H5Tget_precision returns the precision of an atomic datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return the number of significant bits if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Tget_precision_long(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_precision sets the precision of an atomic datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param precision
+     *            IN: Number of bits of precision for datatype.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native void H5Tset_precision(long type_id, long precision) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_sign retrieves the sign type for an integer type.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a valid sign type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_sign(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_sign sets the sign proprety for an integer type.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to set.
+     * @param sign
+     *            IN: Sign type.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_sign(long type_id, int sign) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_size returns the size of a datatype in bytes.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return the size of the datatype in bytes
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native long H5Tget_size(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_size sets the total size in bytes, size, for an atomic datatype (this operation is not permitted on
+     * compound datatypes).
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to change size.
+     * @param size
+     *            IN: Size in bytes to modify datatype.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_size(long type_id, long size) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_strpad retrieves the string padding method for a string datatype.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return a valid string padding type if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tget_strpad(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_strpad defines the storage mechanism for the string.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to modify.
+     * @param strpad
+     *            IN: String padding type.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_strpad(long type_id, int strpad) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_super returns the type from which TYPE is derived.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     *
+     * @return the parent type
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tget_super(long type) throws HDF5LibraryException {
+        long id = _H5Tget_super(type);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tget_super add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tget_super(long type) throws HDF5LibraryException;
+
+    /**
+     * H5Tget_tag returns the tag associated with datatype type_id.
+     *
+     * @param type
+     *            IN: Identifier of datatype.
+     *
+     * @return the tag
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native String H5Tget_tag(long type) throws HDF5LibraryException;
+
+    /**
+     * H5Tset_tag tags an opaque datatype type_id with a unique ASCII identifier tag.
+     *
+     * @param type
+     *            IN: Datatype identifier for the opaque datatype to be tagged.
+     * @param tag
+     *            IN: Descriptive ASCII string with which the opaque datatype is to be tagged.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tset_tag(long type, String tag) throws HDF5LibraryException;
+
+    /**
+     * H5Tinsert adds another member to the compound datatype type_id.
+     *
+     * @param type_id
+     *            IN: Identifier of compound datatype to modify.
+     * @param name
+     *            IN: Name of the field to insert.
+     * @param offset
+     *            IN: Offset in memory structure of the field to insert.
+     * @param field_id
+     *            IN: Datatype identifier of the field to insert.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public synchronized static native int H5Tinsert(long type_id, String name, long offset, long field_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tis_variable_str determines whether the datatype identified in type_id is a variable-length string.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to query.
+     *
+     * @return true if type_id is a variable-length string.
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native boolean H5Tis_variable_str(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tlock locks the datatype specified by the type_id identifier, making it read-only and non-destrucible.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to lock.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tlock(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Topen opens a named datatype at the location specified by loc_id and return an identifier for the datatype.
+     *
+     * @param loc_id
+     *            IN: A file, group, or datatype identifier.
+     * @param name
+     *            IN: A datatype name, defined within the file or group identified by loc_id.
+     * @param tapl_id
+     *            IN: Datatype access property list.
+     *
+     * @return a named datatype identifier if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     * @exception NullPointerException
+     *                - name is null.
+     **/
+    public static long H5Topen(long loc_id, String name, long tapl_id) throws HDF5LibraryException,
+    NullPointerException {
+        long id = _H5Topen2(loc_id, name, tapl_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Topen add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Topen2(long loc_id, String name, long tapl_id)
+            throws HDF5LibraryException, NullPointerException;
+
+    /**
+     * H5Tpack recursively removes padding from within a compound datatype to make it more efficient (space-wise) to
+     * store that data.
+     * <P>
+     * <b>WARNING:</b> This call only affects the C-data, even if it succeeds, there may be no visible effect on Java
+     * objects.
+     *
+     * @param type_id
+     *            IN: Identifier of datatype to modify.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public synchronized static native int H5Tpack(long type_id) throws HDF5LibraryException;
+
+    /**
+     * H5Tvlen_create creates a new variable-length (VL) dataype.
+     *
+     * @param base_id
+     *            IN: Identifier of parent datatype.
+     *
+     * @return a non-negative value if successful
+     *
+     * @exception HDF5LibraryException
+     *                - Error from the HDF-5 Library.
+     **/
+    public static long H5Tvlen_create(long base_id) throws HDF5LibraryException {
+        long id = _H5Tvlen_create(base_id);
+        if (id > 0) {
+            log.trace("OPEN_IDS: H5Tvlen_create add {}", id);
+            OPEN_IDS.add(id);
+            log.trace("OPEN_IDS: {}", OPEN_IDS.size());
+        }
+        return id;
+    }
+
+    private synchronized static native long _H5Tvlen_create(long base_id) throws HDF5LibraryException;
+
+    // /////// unimplemented ////////
+
+    // H5T_conv_t H5Tfind(int src_id, int dst_id, H5T_cdata_t *pcdata);
+
+    // public synchronized static native int H5Tregister(H5T_pers_t pers, String name, int src_id, int dst_id,
+    // H5T_conv_t func)
+    // throws HDF5LibraryException, NullPointerException;
+
+    // public synchronized static native int H5Tunregister(H5T_pers_t pers, String name, int src_id, int dst_id,
+    // H5T_conv_t func)
+    // throws HDF5LibraryException, NullPointerException;
+
+    // ////////////////////////////////////////////////////////////
+    // //
+    // H5Z: Filter Interface Functions //
+    // //
+    // ////////////////////////////////////////////////////////////
+
+    public synchronized static native int H5Zfilter_avail(int filter) throws HDF5LibraryException, NullPointerException;
+
+    public synchronized static native int H5Zget_filter_info(int filter) throws HDF5LibraryException;
+
+    public synchronized static native int H5Zunregister(int filter) throws HDF5LibraryException, NullPointerException;
+
+}
+
+// /////// unimplemented ////////
+
+// herr_t H5Zregister(const void *cls);
+
diff --git a/java/src/hdf/hdf5lib/HDF5Constants.java b/java/src/hdf/hdf5lib/HDF5Constants.java
new file mode 100644
index 0000000..acd3eb5
--- /dev/null
+++ b/java/src/hdf/hdf5lib/HDF5Constants.java
@@ -0,0 +1,1883 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+package hdf.hdf5lib;
+
+/**
+ * /** This class contains C constants and enumerated types of HDF5 library. The
+ * values of these constants are obtained from the library by calling J2C(int
+ * jconstant), where jconstant is any of the private constants which start their
+ * name with "JH5" need to be converted.
+ * <P>
+ * <B>Do not edit this file!</b>
+ *
+ * <b>See also:</b> hdf.hdf5lib.HDF5Library
+ */
+public class HDF5Constants {
+    static {
+        H5.loadH5Lib();
+    }
+
+    // /////////////////////////////////////////////////////////////////////////
+    // Get the HDF5 constants from the library //
+    // /////////////////////////////////////////////////////////////////////////
+
+    public static final long H5_QUARTER_HADDR_MAX = H5_QUARTER_HADDR_MAX();
+
+    public static final int H5_SZIP_MAX_PIXELS_PER_BLOCK = H5_SZIP_MAX_PIXELS_PER_BLOCK();
+    public static final int H5_SZIP_NN_OPTION_MASK = H5_SZIP_NN_OPTION_MASK();
+    public static final int H5_SZIP_EC_OPTION_MASK = H5_SZIP_EC_OPTION_MASK();
+    public static final int H5_SZIP_ALLOW_K13_OPTION_MASK = H5_SZIP_ALLOW_K13_OPTION_MASK();
+    public static final int H5_SZIP_CHIP_OPTION_MASK = H5_SZIP_CHIP_OPTION_MASK();
+    public static final int H5_INDEX_UNKNOWN = H5_INDEX_UNKNOWN();
+    public static final int H5_INDEX_NAME = H5_INDEX_NAME();
+    public static final int H5_INDEX_CRT_ORDER = H5_INDEX_CRT_ORDER();
+    public static final int H5_INDEX_N = H5_INDEX_N();
+    public static final int H5_ITER_UNKNOWN = H5_ITER_UNKNOWN();
+    public static final int H5_ITER_INC = H5_ITER_INC();
+    public static final int H5_ITER_DEC = H5_ITER_DEC();
+    public static final int H5_ITER_NATIVE = H5_ITER_NATIVE();
+    public static final int H5_ITER_N = H5_ITER_N();
+    public static final int H5AC_CURR_CACHE_CONFIG_VERSION = H5AC_CURR_CACHE_CONFIG_VERSION();
+    public static final int H5AC_MAX_TRACE_FILE_NAME_LEN = H5AC_MAX_TRACE_FILE_NAME_LEN();
+    public static final int H5AC_METADATA_WRITE_STRATEGY_PROCESS_ZERO_ONLY = H5AC_METADATA_WRITE_STRATEGY_PROCESS_ZERO_ONLY();
+    public static final int H5AC_METADATA_WRITE_STRATEGY_DISTRIBUTED = H5AC_METADATA_WRITE_STRATEGY_DISTRIBUTED();
+    public static final int H5C_incr_off = H5C_incr_off();
+    public static final int H5C_incr_threshold = H5C_incr_threshold();
+    public static final int H5C_flash_incr_off = H5C_flash_incr_off();
+    public static final int H5C_flash_incr_add_space = H5C_flash_incr_add_space();
+    public static final int H5C_decr_off = H5C_decr_off();
+    public static final int H5C_decr_threshold = H5C_decr_threshold();
+    public static final int H5C_decr_age_out = H5C_decr_age_out();
+    public static final int H5C_decr_age_out_with_threshold = H5C_decr_age_out_with_threshold();
+    public static final int H5D_CHUNK_IDX_BTREE = H5D_CHUNK_IDX_BTREE();
+    public static final int H5D_ALLOC_TIME_DEFAULT = H5D_ALLOC_TIME_DEFAULT();
+    public static final int H5D_ALLOC_TIME_EARLY = H5D_ALLOC_TIME_EARLY();
+    public static final int H5D_ALLOC_TIME_ERROR = H5D_ALLOC_TIME_ERROR();
+    public static final int H5D_ALLOC_TIME_INCR = H5D_ALLOC_TIME_INCR();
+    public static final int H5D_ALLOC_TIME_LATE = H5D_ALLOC_TIME_LATE();
+    public static final int H5D_FILL_TIME_ERROR = H5D_FILL_TIME_ERROR();
+    public static final int H5D_FILL_TIME_ALLOC = H5D_FILL_TIME_ALLOC();
+    public static final int H5D_FILL_TIME_NEVER = H5D_FILL_TIME_NEVER();
+    public static final int H5D_FILL_TIME_IFSET = H5D_FILL_TIME_IFSET();
+    public static final int H5D_FILL_VALUE_DEFAULT = H5D_FILL_VALUE_DEFAULT();
+    public static final int H5D_FILL_VALUE_ERROR = H5D_FILL_VALUE_ERROR();
+    public static final int H5D_FILL_VALUE_UNDEFINED = H5D_FILL_VALUE_UNDEFINED();
+    public static final int H5D_FILL_VALUE_USER_DEFINED = H5D_FILL_VALUE_USER_DEFINED();
+    public static final int H5D_LAYOUT_ERROR = H5D_LAYOUT_ERROR();
+    public static final int H5D_CHUNKED = H5D_CHUNKED();
+    public static final int H5D_COMPACT = H5D_COMPACT();
+    public static final int H5D_CONTIGUOUS = H5D_CONTIGUOUS();
+    public static final int H5D_VIRTUAL = H5D_VIRTUAL();
+    public static final int H5D_NLAYOUTS = H5D_NLAYOUTS();
+    public static final int H5D_SPACE_STATUS_ALLOCATED = H5D_SPACE_STATUS_ALLOCATED();
+    public static final int H5D_SPACE_STATUS_ERROR = H5D_SPACE_STATUS_ERROR();
+    public static final int H5D_SPACE_STATUS_NOT_ALLOCATED = H5D_SPACE_STATUS_NOT_ALLOCATED();
+    public static final int H5D_SPACE_STATUS_PART_ALLOCATED = H5D_SPACE_STATUS_PART_ALLOCATED();
+    public static final int H5D_VDS_ERROR = H5D_VDS_ERROR();
+    public static final int H5D_VDS_FIRST_MISSING = H5D_VDS_FIRST_MISSING();
+    public static final int H5D_VDS_LAST_AVAILABLE = H5D_VDS_LAST_AVAILABLE();
+
+    public static final int H5E_MAJOR = H5E_MAJOR();
+    public static final int H5E_MINOR = H5E_MINOR();
+    public static final long H5E_ALIGNMENT = H5E_ALIGNMENT();
+    public static final long H5E_ALREADYEXISTS = H5E_ALREADYEXISTS();
+    public static final long H5E_ALREADYINIT = H5E_ALREADYINIT();
+    public static final long H5E_ARGS = H5E_ARGS();
+    public static final long H5E_ATOM = H5E_ATOM();
+    public static final long H5E_ATTR = H5E_ATTR();
+    public static final long H5E_BADATOM = H5E_BADATOM();
+    public static final long H5E_BADFILE = H5E_BADFILE();
+    public static final long H5E_BADGROUP = H5E_BADGROUP();
+    public static final long H5E_BADMESG = H5E_BADMESG();
+    public static final long H5E_BADRANGE = H5E_BADRANGE();
+    public static final long H5E_BADSELECT = H5E_BADSELECT();
+    public static final long H5E_BADSIZE = H5E_BADSIZE();
+    public static final long H5E_BADTYPE = H5E_BADTYPE();
+    public static final long H5E_BADVALUE = H5E_BADVALUE();
+    public static final long H5E_BTREE = H5E_BTREE();
+    public static final long H5E_CACHE = H5E_CACHE();
+    public static final long H5E_CALLBACK = H5E_CALLBACK();
+    public static final long H5E_CANAPPLY = H5E_CANAPPLY();
+    // public static final long H5E_CANTALLOC = H5E_CANTALLOC();
+    public static final long H5E_CANTCLIP = H5E_CANTCLIP();
+    public static final long H5E_CANTCLOSEFILE = H5E_CANTCLOSEFILE();
+    public static final long H5E_CANTCONVERT = H5E_CANTCONVERT();
+    public static final long H5E_CANTCOPY = H5E_CANTCOPY();
+    public static final long H5E_CANTCOUNT = H5E_CANTCOUNT();
+    public static final long H5E_CANTCREATE = H5E_CANTCREATE();
+    public static final long H5E_CANTDEC = H5E_CANTDEC();
+    public static final long H5E_CANTDECODE = H5E_CANTDECODE();
+    public static final long H5E_CANTDELETE = H5E_CANTDELETE();
+    public static final long H5E_CANTENCODE = H5E_CANTENCODE();
+    public static final long H5E_CANTFLUSH = H5E_CANTFLUSH();
+    public static final long H5E_CANTFREE = H5E_CANTFREE();
+    public static final long H5E_CANTGET = H5E_CANTGET();
+    public static final long H5E_CANTINC = H5E_CANTINC();
+    public static final long H5E_CANTINIT = H5E_CANTINIT();
+    public static final long H5E_CANTINSERT = H5E_CANTINSERT();
+    public static final long H5E_CANTLIST = H5E_CANTLIST();
+    public static final long H5E_CANTLOAD = H5E_CANTLOAD();
+    public static final long H5E_CANTLOCK = H5E_CANTLOCK();
+    public static final long H5E_CANTNEXT = H5E_CANTNEXT();
+    public static final long H5E_CANTOPENFILE = H5E_CANTOPENFILE();
+    public static final long H5E_CANTOPENOBJ = H5E_CANTOPENOBJ();
+    // public static final long H5E_CANTRECV = H5E_CANTRECV();
+    public static final long H5E_CANTREGISTER = H5E_CANTREGISTER();
+    public static final long H5E_CANTRELEASE = H5E_CANTRELEASE();
+    public static final long H5E_CANTSELECT = H5E_CANTSELECT();
+    public static final long H5E_CANTSET = H5E_CANTSET();
+    public static final long H5E_CANTSPLIT = H5E_CANTSPLIT();
+    public static final long H5E_CANTUNLOCK = H5E_CANTUNLOCK();
+    public static final long H5E_CLOSEERROR = H5E_CLOSEERROR();
+    public static final long H5E_COMPLEN = H5E_COMPLEN();
+    public static final long H5E_DATASET = H5E_DATASET();
+    public static final long H5E_DATASPACE = H5E_DATASPACE();
+    public static final long H5E_DATATYPE = H5E_DATATYPE();
+    public static final long H5E_DEFAULT = H5E_DEFAULT();
+    public static final long H5E_DUPCLASS = H5E_DUPCLASS();
+    public static final long H5E_EFL = H5E_EFL();
+    public static final long H5E_EXISTS = H5E_EXISTS();
+    public static final long H5E_FCNTL = H5E_FCNTL();
+    public static final long H5E_FILE = H5E_FILE();
+    public static final long H5E_FILEEXISTS = H5E_FILEEXISTS();
+    public static final long H5E_FILEOPEN = H5E_FILEOPEN();
+    public static final long H5E_FUNC = H5E_FUNC();
+    public static final long H5E_HEAP = H5E_HEAP();
+    public static final long H5E_INTERNAL = H5E_INTERNAL();
+    public static final long H5E_IO = H5E_IO();
+    public static final long H5E_LINK = H5E_LINK();
+    public static final long H5E_LINKCOUNT = H5E_LINKCOUNT();
+    public static final long H5E_MOUNT = H5E_MOUNT();
+    public static final long H5E_MPI = H5E_MPI();
+    public static final long H5E_MPIERRSTR = H5E_MPIERRSTR();
+    public static final long H5E_NOFILTER = H5E_NOFILTER();
+    public static final long H5E_NOIDS = H5E_NOIDS();
+    public static final long H5E_NONE_MAJOR = H5E_NONE_MAJOR();
+    public static final long H5E_NONE_MINOR = H5E_NONE_MINOR();
+    public static final long H5E_NOSPACE = H5E_NOSPACE();
+    public static final long H5E_NOTCACHED = H5E_NOTCACHED();
+    public static final long H5E_NOTFOUND = H5E_NOTFOUND();
+    public static final long H5E_NOTHDF5 = H5E_NOTHDF5();
+    public static final long H5E_OHDR = H5E_OHDR();
+    public static final long H5E_OVERFLOW = H5E_OVERFLOW();
+    public static final long H5E_PLINE = H5E_PLINE();
+    public static final long H5E_PLIST = H5E_PLIST();
+    public static final long H5E_PROTECT = H5E_PROTECT();
+    public static final long H5E_READERROR = H5E_READERROR();
+    public static final long H5E_REFERENCE = H5E_REFERENCE();
+    public static final long H5E_RESOURCE = H5E_RESOURCE();
+    public static final long H5E_RS = H5E_RS();
+    public static final long H5E_SEEKERROR = H5E_SEEKERROR();
+    public static final long H5E_SETLOCAL = H5E_SETLOCAL();
+    public static final long H5E_STORAGE = H5E_STORAGE();
+    public static final long H5E_SYM = H5E_SYM();
+    public static final long H5E_TRUNCATED = H5E_TRUNCATED();
+    public static final long H5E_TST = H5E_TST();
+    public static final long H5E_UNINITIALIZED = H5E_UNINITIALIZED();
+    public static final long H5E_UNSUPPORTED = H5E_UNSUPPORTED();
+    public static final long H5E_VERSION = H5E_VERSION();
+    public static final long H5E_VFL = H5E_VFL();
+    public static final long H5E_WALK_DOWNWARD = H5E_WALK_DOWNWARD();
+    public static final long H5E_WALK_UPWARD = H5E_WALK_UPWARD();
+    public static final long H5E_WRITEERROR = H5E_WRITEERROR();
+
+    public static final int H5F_ACC_CREAT = H5F_ACC_CREAT();
+    public static final int H5F_ACC_EXCL = H5F_ACC_EXCL();
+    public static final int H5F_ACC_RDONLY = H5F_ACC_RDONLY();
+    public static final int H5F_ACC_RDWR = H5F_ACC_RDWR();
+    public static final int H5F_ACC_TRUNC = H5F_ACC_TRUNC();
+    public static final int H5F_ACC_DEFAULT = H5F_ACC_DEFAULT();
+    public static final int H5F_ACC_SWMR_READ = H5F_ACC_SWMR_READ();
+    public static final int H5F_ACC_SWMR_WRITE = H5F_ACC_SWMR_WRITE();
+    public static final int H5F_CLOSE_DEFAULT = H5F_CLOSE_DEFAULT();
+    public static final int H5F_CLOSE_SEMI = H5F_CLOSE_SEMI();
+    public static final int H5F_CLOSE_STRONG = H5F_CLOSE_STRONG();
+    public static final int H5F_CLOSE_WEAK = H5F_CLOSE_WEAK();
+    public static final int H5F_LIBVER_EARLIEST = H5F_LIBVER_EARLIEST();
+    public static final int H5F_LIBVER_LATEST = H5F_LIBVER_LATEST();
+    public static final int H5F_OBJ_ALL = H5F_OBJ_ALL();
+    public static final int H5F_OBJ_ATTR = H5F_OBJ_ATTR();
+    public static final int H5F_OBJ_DATASET = H5F_OBJ_DATASET();
+    public static final int H5F_OBJ_DATATYPE = H5F_OBJ_DATATYPE();
+    public static final int H5F_OBJ_FILE = H5F_OBJ_FILE();
+    public static final int H5F_OBJ_GROUP = H5F_OBJ_GROUP();
+    public static final int H5F_OBJ_LOCAL = H5F_OBJ_LOCAL();
+    public static final int H5F_SCOPE_GLOBAL = H5F_SCOPE_GLOBAL();
+    public static final int H5F_SCOPE_LOCAL = H5F_SCOPE_LOCAL();
+    public static final int H5F_UNLIMITED = H5F_UNLIMITED();
+    public static final int H5F_FILE_SPACE_DEFAULT = H5F_FILE_SPACE_DEFAULT();
+    public static final int H5F_FILE_SPACE_ALL_PERSIST = H5F_FILE_SPACE_ALL_PERSIST();
+    public static final int H5F_FILE_SPACE_ALL = H5F_FILE_SPACE_ALL();
+    public static final int H5F_FILE_SPACE_AGGR_VFD = H5F_FILE_SPACE_AGGR_VFD();
+    public static final int H5F_FILE_SPACE_VFD = H5F_FILE_SPACE_VFD();
+    public static final int H5F_FILE_SPACE_NTYPES = H5F_FILE_SPACE_NTYPES();
+
+    public static final long H5FD_CORE = H5FD_CORE();
+    public static final long H5FD_DIRECT = H5FD_DIRECT();
+    public static final long H5FD_FAMILY = H5FD_FAMILY();
+    public static final long H5FD_LOG = H5FD_LOG();
+    public static final long H5FD_MPIO = H5FD_MPIO();
+    public static final long H5FD_MULTI = H5FD_MULTI();
+    public static final long H5FD_SEC2 = H5FD_SEC2();
+    public static final long H5FD_STDIO = H5FD_STDIO();
+    public static final long H5FD_WINDOWS = H5FD_WINDOWS();
+    public static final int H5FD_LOG_LOC_READ = H5FD_LOG_LOC_READ();
+    public static final int H5FD_LOG_LOC_WRITE = H5FD_LOG_LOC_WRITE();
+    public static final int H5FD_LOG_LOC_SEEK = H5FD_LOG_LOC_SEEK();
+    public static final int H5FD_LOG_LOC_IO = H5FD_LOG_LOC_IO();
+    public static final int H5FD_LOG_FILE_READ = H5FD_LOG_FILE_READ();
+    public static final int H5FD_LOG_FILE_WRITE = H5FD_LOG_FILE_WRITE();
+    public static final int H5FD_LOG_FILE_IO = H5FD_LOG_FILE_IO();
+    public static final int H5FD_LOG_FLAVOR = H5FD_LOG_FLAVOR();
+    public static final int H5FD_LOG_NUM_READ = H5FD_LOG_NUM_READ();
+    public static final int H5FD_LOG_NUM_WRITE = H5FD_LOG_NUM_WRITE();
+    public static final int H5FD_LOG_NUM_SEEK = H5FD_LOG_NUM_SEEK();
+    public static final int H5FD_LOG_NUM_TRUNCATE = H5FD_LOG_NUM_TRUNCATE();
+    public static final int H5FD_LOG_NUM_IO = H5FD_LOG_NUM_IO();
+    public static final int H5FD_LOG_TIME_OPEN = H5FD_LOG_TIME_OPEN();
+    public static final int H5FD_LOG_TIME_STAT = H5FD_LOG_TIME_STAT();
+    public static final int H5FD_LOG_TIME_READ = H5FD_LOG_TIME_READ();
+    public static final int H5FD_LOG_TIME_WRITE = H5FD_LOG_TIME_WRITE();
+    public static final int H5FD_LOG_TIME_SEEK = H5FD_LOG_TIME_SEEK();
+    public static final int H5FD_LOG_TIME_CLOSE = H5FD_LOG_TIME_CLOSE();
+    public static final int H5FD_LOG_TIME_IO = H5FD_LOG_TIME_IO();
+    public static final int H5FD_LOG_ALLOC = H5FD_LOG_ALLOC();
+    public static final int H5FD_LOG_ALL = H5FD_LOG_ALL();
+    public static final int H5FD_MEM_NOLIST = H5FD_MEM_NOLIST();
+    public static final int H5FD_MEM_DEFAULT = H5FD_MEM_DEFAULT();
+    public static final int H5FD_MEM_SUPER = H5FD_MEM_SUPER();
+    public static final int H5FD_MEM_BTREE = H5FD_MEM_BTREE();
+    public static final int H5FD_MEM_DRAW = H5FD_MEM_DRAW();
+    public static final int H5FD_MEM_GHEAP = H5FD_MEM_GHEAP();
+    public static final int H5FD_MEM_LHEAP = H5FD_MEM_LHEAP();
+    public static final int H5FD_MEM_OHDR = H5FD_MEM_OHDR();
+    public static final int H5FD_MEM_NTYPES = H5FD_MEM_NTYPES();
+    public static final long H5FD_DEFAULT_HADDR_SIZE = H5FD_DEFAULT_HADDR_SIZE();
+    public static final long H5FD_MEM_DEFAULT_SIZE = H5FD_MEM_DEFAULT_SIZE();
+    public static final long H5FD_MEM_DEFAULT_SUPER_SIZE = H5FD_MEM_DEFAULT_SUPER_SIZE();
+    public static final long H5FD_MEM_DEFAULT_BTREE_SIZE = H5FD_MEM_DEFAULT_BTREE_SIZE();
+    public static final long H5FD_MEM_DEFAULT_DRAW_SIZE = H5FD_MEM_DEFAULT_DRAW_SIZE();
+    public static final long H5FD_MEM_DEFAULT_GHEAP_SIZE = H5FD_MEM_DEFAULT_GHEAP_SIZE();
+    public static final long H5FD_MEM_DEFAULT_LHEAP_SIZE = H5FD_MEM_DEFAULT_LHEAP_SIZE();
+    public static final long H5FD_MEM_DEFAULT_OHDR_SIZE = H5FD_MEM_DEFAULT_OHDR_SIZE();
+
+//    public static final int H5G_DATASET = H5G_DATASET();
+//    public static final int H5G_GROUP = H5G_GROUP();
+//    public static final int H5G_LINK = H5G_LINK();
+//    public static final int H5G_UDLINK = H5G_UDLINK();
+//    public static final int H5G_LINK_ERROR = H5G_LINK_ERROR();
+//    public static final int H5G_LINK_HARD = H5G_LINK_HARD();
+//    public static final int H5G_LINK_SOFT = H5G_LINK_SOFT();
+//    public static final int H5G_NLIBTYPES = H5G_NLIBTYPES();
+//    public static final int H5G_NTYPES = H5G_NTYPES();
+//    public static final int H5G_NUSERTYPES = H5G_NUSERTYPES();
+//    public static final int H5G_RESERVED_5 = H5G_RESERVED_5();
+//    public static final int H5G_RESERVED_6 = H5G_RESERVED_6();
+//    public static final int H5G_RESERVED_7 = H5G_RESERVED_7();
+//    public static final int H5G_SAME_LOC = H5G_SAME_LOC();
+//    public static final int H5G_TYPE = H5G_TYPE();
+//    public static final int H5G_UNKNOWN = H5G_UNKNOWN();
+
+    public static final int H5G_STORAGE_TYPE_UNKNOWN = H5G_STORAGE_TYPE_UNKNOWN();
+    public static final int H5G_STORAGE_TYPE_SYMBOL_TABLE = H5G_STORAGE_TYPE_SYMBOL_TABLE();
+    public static final int H5G_STORAGE_TYPE_COMPACT = H5G_STORAGE_TYPE_COMPACT();
+    public static final int H5G_STORAGE_TYPE_DENSE = H5G_STORAGE_TYPE_DENSE();
+
+    public static final int H5I_ATTR = H5I_ATTR();
+    public static final int H5I_BADID = H5I_BADID();
+    public static final int H5I_DATASET = H5I_DATASET();
+    public static final int H5I_DATASPACE = H5I_DATASPACE();
+    public static final int H5I_DATATYPE = H5I_DATATYPE();
+    public static final int H5I_ERROR_CLASS = H5I_ERROR_CLASS();
+    public static final int H5I_ERROR_MSG = H5I_ERROR_MSG();
+    public static final int H5I_ERROR_STACK = H5I_ERROR_STACK();
+    public static final int H5I_FILE = H5I_FILE();
+    public static final int H5I_GENPROP_CLS = H5I_GENPROP_CLS();
+    public static final int H5I_GENPROP_LST = H5I_GENPROP_LST();
+    public static final int H5I_GROUP = H5I_GROUP();
+    public static final int H5I_INVALID_HID = H5I_INVALID_HID();
+    public static final int H5I_NTYPES = H5I_NTYPES();
+    public static final int H5I_REFERENCE = H5I_REFERENCE();
+    public static final int H5I_UNINIT = H5I_UNINIT();
+    public static final int H5I_VFL = H5I_VFL();
+
+    public static final int H5L_TYPE_ERROR = H5L_TYPE_ERROR();
+    public static final int H5L_TYPE_HARD = H5L_TYPE_HARD();
+    public static final int H5L_TYPE_SOFT = H5L_TYPE_SOFT();
+    public static final int H5L_TYPE_EXTERNAL = H5L_TYPE_EXTERNAL();
+    public static final int H5L_TYPE_MAX = H5L_TYPE_MAX();
+
+    public static final int H5O_COPY_SHALLOW_HIERARCHY_FLAG = H5O_COPY_SHALLOW_HIERARCHY_FLAG();
+    public static final int H5O_COPY_EXPAND_SOFT_LINK_FLAG =  H5O_COPY_EXPAND_SOFT_LINK_FLAG();
+    public static final int H5O_COPY_EXPAND_EXT_LINK_FLAG = H5O_COPY_EXPAND_EXT_LINK_FLAG();
+    public static final int H5O_COPY_EXPAND_REFERENCE_FLAG = H5O_COPY_EXPAND_REFERENCE_FLAG();
+    public static final int H5O_COPY_WITHOUT_ATTR_FLAG = H5O_COPY_WITHOUT_ATTR_FLAG();
+    public static final int H5O_COPY_PRESERVE_NULL_FLAG = H5O_COPY_PRESERVE_NULL_FLAG();
+    public static final int H5O_SHMESG_NONE_FLAG = H5O_SHMESG_NONE_FLAG();
+    public static final int H5O_SHMESG_SDSPACE_FLAG = H5O_SHMESG_SDSPACE_FLAG();
+    public static final int H5O_SHMESG_DTYPE_FLAG = H5O_SHMESG_DTYPE_FLAG();
+    public static final int H5O_SHMESG_FILL_FLAG = H5O_SHMESG_FILL_FLAG();
+    public static final int H5O_SHMESG_PLINE_FLAG = H5O_SHMESG_PLINE_FLAG();
+    public static final int H5O_SHMESG_ATTR_FLAG = H5O_SHMESG_ATTR_FLAG();
+    public static final int H5O_SHMESG_ALL_FLAG = H5O_SHMESG_ALL_FLAG();
+    public static final int H5O_TYPE_UNKNOWN = H5O_TYPE_UNKNOWN();
+    public static final int H5O_TYPE_GROUP = H5O_TYPE_GROUP();
+    public static final int H5O_TYPE_DATASET = H5O_TYPE_DATASET();
+    public static final int H5O_TYPE_NAMED_DATATYPE = H5O_TYPE_NAMED_DATATYPE();
+    public static final int H5O_TYPE_NTYPES = H5O_TYPE_NTYPES();
+
+    public static final long H5P_ROOT = H5P_ROOT();
+    public static final long H5P_OBJECT_CREATE = H5P_OBJECT_CREATE();
+    public static final long H5P_FILE_CREATE = H5P_FILE_CREATE();
+    public static final long H5P_FILE_ACCESS = H5P_FILE_ACCESS();
+    public static final long H5P_DATASET_CREATE = H5P_DATASET_CREATE();
+    public static final long H5P_DATASET_ACCESS = H5P_DATASET_ACCESS();
+    public static final long H5P_DATASET_XFER = H5P_DATASET_XFER();
+    public static final long H5P_FILE_MOUNT = H5P_FILE_MOUNT();
+    public static final long H5P_GROUP_CREATE = H5P_GROUP_CREATE();
+    public static final long H5P_GROUP_ACCESS = H5P_GROUP_ACCESS();
+    public static final long H5P_DATATYPE_CREATE = H5P_DATATYPE_CREATE();
+    public static final long H5P_DATATYPE_ACCESS = H5P_DATATYPE_ACCESS();
+    public static final long H5P_STRING_CREATE = H5P_STRING_CREATE();
+    public static final long H5P_ATTRIBUTE_CREATE = H5P_ATTRIBUTE_CREATE();
+    public static final long H5P_ATTRIBUTE_ACCESS = H5P_ATTRIBUTE_ACCESS();
+    public static final long H5P_OBJECT_COPY = H5P_OBJECT_COPY();
+    public static final long H5P_LINK_CREATE = H5P_LINK_CREATE();
+    public static final long H5P_LINK_ACCESS = H5P_LINK_ACCESS();
+    public static final long H5P_FILE_CREATE_DEFAULT = H5P_FILE_CREATE_DEFAULT();
+    public static final long H5P_FILE_ACCESS_DEFAULT = H5P_FILE_ACCESS_DEFAULT();
+    public static final long H5P_DATASET_CREATE_DEFAULT = H5P_DATASET_CREATE_DEFAULT();
+    public static final long H5P_DATASET_ACCESS_DEFAULT = H5P_DATASET_ACCESS_DEFAULT();
+    public static final long H5P_DATASET_XFER_DEFAULT = H5P_DATASET_XFER_DEFAULT();
+    public static final long H5P_FILE_MOUNT_DEFAULT = H5P_FILE_MOUNT_DEFAULT();
+    public static final long H5P_GROUP_CREATE_DEFAULT = H5P_GROUP_CREATE_DEFAULT();
+    public static final long H5P_GROUP_ACCESS_DEFAULT = H5P_GROUP_ACCESS_DEFAULT();
+    public static final long H5P_DATATYPE_CREATE_DEFAULT = H5P_DATATYPE_CREATE_DEFAULT();
+    public static final long H5P_DATATYPE_ACCESS_DEFAULT = H5P_DATATYPE_ACCESS_DEFAULT();
+    public static final long H5P_ATTRIBUTE_CREATE_DEFAULT = H5P_ATTRIBUTE_CREATE_DEFAULT();
+    public static final long H5P_ATTRIBUTE_ACCESS_DEFAULT = H5P_ATTRIBUTE_ACCESS_DEFAULT();
+    public static final long H5P_OBJECT_COPY_DEFAULT = H5P_OBJECT_COPY_DEFAULT();
+    public static final long H5P_LINK_CREATE_DEFAULT = H5P_LINK_CREATE_DEFAULT();
+    public static final long H5P_LINK_ACCESS_DEFAULT = H5P_LINK_ACCESS_DEFAULT();
+    public static final int H5P_CRT_ORDER_TRACKED = H5P_CRT_ORDER_TRACKED();
+    public static final int H5P_CRT_ORDER_INDEXED = H5P_CRT_ORDER_INDEXED();
+    public static final long H5P_DEFAULT = H5P_DEFAULT();
+
+    public static final int H5PL_TYPE_ERROR = H5PL_TYPE_ERROR();
+    public static final int H5PL_TYPE_FILTER = H5PL_TYPE_FILTER();
+    public static final int H5PL_FILTER_PLUGIN = H5PL_FILTER_PLUGIN();
+    public static final int H5PL_ALL_PLUGIN = H5PL_ALL_PLUGIN();
+
+    public static final int H5R_BADTYPE = H5R_BADTYPE();
+    public static final int H5R_DATASET_REGION = H5R_DATASET_REGION();
+    public static final int H5R_MAXTYPE = H5R_MAXTYPE();
+    public static final int H5R_OBJ_REF_BUF_SIZE = H5R_OBJ_REF_BUF_SIZE();
+    public static final int H5R_OBJECT = H5R_OBJECT();
+    public static final int H5S_ALL = H5S_ALL();
+    public static final int H5S_MAX_RANK = H5S_MAX_RANK();
+    public static final int H5S_NO_CLASS = H5S_NO_CLASS();
+    public static final int H5S_NULL = H5S_NULL();
+    public static final int H5S_SCALAR = H5S_SCALAR();
+    public static final int H5S_SEL_ALL = H5S_SEL_ALL();
+    public static final int H5S_SEL_ERROR = H5S_SEL_ERROR();
+    public static final int H5S_SEL_HYPERSLABS = H5S_SEL_HYPERSLABS();
+    public static final int H5S_SEL_N = H5S_SEL_N();
+    public static final int H5S_SEL_NONE = H5S_SEL_NONE();
+    public static final int H5S_SEL_POINTS = H5S_SEL_POINTS();
+    public static final int H5S_SELECT_AND = H5S_SELECT_AND();
+    public static final int H5S_SELECT_APPEND = H5S_SELECT_APPEND();
+    public static final int H5S_SELECT_INVALID = H5S_SELECT_INVALID();
+    public static final int H5S_SELECT_NOOP = H5S_SELECT_NOOP();
+    public static final int H5S_SELECT_NOTA = H5S_SELECT_NOTA();
+    public static final int H5S_SELECT_NOTB = H5S_SELECT_NOTB();
+    public static final int H5S_SELECT_OR = H5S_SELECT_OR();
+    public static final int H5S_SELECT_PREPEND = H5S_SELECT_PREPEND();
+    public static final int H5S_SELECT_SET = H5S_SELECT_SET();
+    public static final int H5S_SELECT_XOR = H5S_SELECT_XOR();
+    public static final int H5S_SIMPLE = H5S_SIMPLE();
+    public static final int H5S_UNLIMITED = H5S_UNLIMITED();
+    public static final long H5T_ALPHA_B16 = H5T_ALPHA_B16();
+    public static final long H5T_ALPHA_B32 = H5T_ALPHA_B32();
+    public static final long H5T_ALPHA_B64 = H5T_ALPHA_B64();
+    public static final long H5T_ALPHA_B8 = H5T_ALPHA_B8();
+    public static final long H5T_ALPHA_F32 = H5T_ALPHA_F32();
+    public static final long H5T_ALPHA_F64 = H5T_ALPHA_F64();
+    public static final long H5T_ALPHA_I16 = H5T_ALPHA_I16();
+    public static final long H5T_ALPHA_I32 = H5T_ALPHA_I32();
+    public static final long H5T_ALPHA_I64 = H5T_ALPHA_I64();
+    public static final long H5T_ALPHA_I8 = H5T_ALPHA_I8();
+    public static final long H5T_ALPHA_U16 = H5T_ALPHA_U16();
+    public static final long H5T_ALPHA_U32 = H5T_ALPHA_U32();
+    public static final long H5T_ALPHA_U64 = H5T_ALPHA_U64();
+    public static final long H5T_ALPHA_U8 = H5T_ALPHA_U8();
+    public static final int H5T_ARRAY = H5T_ARRAY();
+    public static final int H5T_BITFIELD = H5T_BITFIELD();
+    public static final int H5T_BKG_NO = H5T_BKG_NO();
+    public static final int H5T_BKG_YES = H5T_BKG_YES();
+    public static final long H5T_C_S1 = H5T_C_S1();
+    public static final int H5T_COMPOUND = H5T_COMPOUND();
+    public static final int H5T_CONV_CONV = H5T_CONV_CONV();
+    public static final int H5T_CONV_FREE = H5T_CONV_FREE();
+    public static final int H5T_CONV_INIT = H5T_CONV_INIT();
+    public static final int H5T_CSET_ERROR = H5T_CSET_ERROR();
+    public static final int H5T_CSET_ASCII = H5T_CSET_ASCII();
+    public static final int H5T_CSET_UTF8 = H5T_CSET_UTF8();
+    public static final int H5T_CSET_RESERVED_10 = H5T_CSET_RESERVED_10();
+    public static final int H5T_CSET_RESERVED_11 = H5T_CSET_RESERVED_11();
+    public static final int H5T_CSET_RESERVED_12 = H5T_CSET_RESERVED_12();
+    public static final int H5T_CSET_RESERVED_13 = H5T_CSET_RESERVED_13();
+    public static final int H5T_CSET_RESERVED_14 = H5T_CSET_RESERVED_14();
+    public static final int H5T_CSET_RESERVED_15 = H5T_CSET_RESERVED_15();
+    public static final int H5T_CSET_RESERVED_2 = H5T_CSET_RESERVED_2();
+    public static final int H5T_CSET_RESERVED_3 = H5T_CSET_RESERVED_3();
+    public static final int H5T_CSET_RESERVED_4 = H5T_CSET_RESERVED_4();
+    public static final int H5T_CSET_RESERVED_5 = H5T_CSET_RESERVED_5();
+    public static final int H5T_CSET_RESERVED_6 = H5T_CSET_RESERVED_6();
+    public static final int H5T_CSET_RESERVED_7 = H5T_CSET_RESERVED_7();
+    public static final int H5T_CSET_RESERVED_8 = H5T_CSET_RESERVED_8();
+    public static final int H5T_CSET_RESERVED_9 = H5T_CSET_RESERVED_9();
+    public static final int H5T_DIR_ASCEND = H5T_DIR_ASCEND();
+    public static final int H5T_DIR_DEFAULT = H5T_DIR_DEFAULT();
+    public static final int H5T_DIR_DESCEND = H5T_DIR_DESCEND();
+    public static final int H5T_ENUM = H5T_ENUM();
+    public static final int H5T_FLOAT = H5T_FLOAT();
+    public static final long H5T_FORTRAN_S1 = H5T_FORTRAN_S1();
+    public static final long H5T_IEEE_F32BE = H5T_IEEE_F32BE();
+    public static final long H5T_IEEE_F32LE = H5T_IEEE_F32LE();
+    public static final long H5T_IEEE_F64BE = H5T_IEEE_F64BE();
+    public static final long H5T_IEEE_F64LE = H5T_IEEE_F64LE();
+    public static final int H5T_INTEGER = H5T_INTEGER();
+    public static final long H5T_INTEL_B16 = H5T_INTEL_B16();
+    public static final long H5T_INTEL_B32 = H5T_INTEL_B32();
+    public static final long H5T_INTEL_B64 = H5T_INTEL_B64();
+    public static final long H5T_INTEL_B8 = H5T_INTEL_B8();
+    public static final long H5T_INTEL_F32 = H5T_INTEL_F32();
+    public static final long H5T_INTEL_F64 = H5T_INTEL_F64();
+    public static final long H5T_INTEL_I16 = H5T_INTEL_I16();
+    public static final long H5T_INTEL_I32 = H5T_INTEL_I32();
+    public static final long H5T_INTEL_I64 = H5T_INTEL_I64();
+    public static final long H5T_INTEL_I8 = H5T_INTEL_I8();
+    public static final long H5T_INTEL_U16 = H5T_INTEL_U16();
+    public static final long H5T_INTEL_U32 = H5T_INTEL_U32();
+    public static final long H5T_INTEL_U64 = H5T_INTEL_U64();
+    public static final long H5T_INTEL_U8 = H5T_INTEL_U8();
+    public static final long H5T_MIPS_B16 = H5T_MIPS_B16();
+    public static final long H5T_MIPS_B32 = H5T_MIPS_B32();
+    public static final long H5T_MIPS_B64 = H5T_MIPS_B64();
+    public static final long H5T_MIPS_B8 = H5T_MIPS_B8();
+    public static final long H5T_MIPS_F32 = H5T_MIPS_F32();
+    public static final long H5T_MIPS_F64 = H5T_MIPS_F64();
+    public static final long H5T_MIPS_I16 = H5T_MIPS_I16();
+    public static final long H5T_MIPS_I32 = H5T_MIPS_I32();
+    public static final long H5T_MIPS_I64 = H5T_MIPS_I64();
+    public static final long H5T_MIPS_I8 = H5T_MIPS_I8();
+    public static final long H5T_MIPS_U16 = H5T_MIPS_U16();
+    public static final long H5T_MIPS_U32 = H5T_MIPS_U32();
+    public static final long H5T_MIPS_U64 = H5T_MIPS_U64();
+    public static final long H5T_MIPS_U8 = H5T_MIPS_U8();
+    public static final long H5T_NATIVE_B16 = H5T_NATIVE_B16();
+    public static final long H5T_NATIVE_B32 = H5T_NATIVE_B32();
+    public static final long H5T_NATIVE_B64 = H5T_NATIVE_B64();
+    public static final long H5T_NATIVE_B8 = H5T_NATIVE_B8();
+    public static final long H5T_NATIVE_CHAR = H5T_NATIVE_CHAR();
+    public static final long H5T_NATIVE_DOUBLE = H5T_NATIVE_DOUBLE();
+    public static final long H5T_NATIVE_FLOAT = H5T_NATIVE_FLOAT();
+    public static final long H5T_NATIVE_HADDR = H5T_NATIVE_HADDR();
+    public static final long H5T_NATIVE_HBOOL = H5T_NATIVE_HBOOL();
+    public static final long H5T_NATIVE_HERR = H5T_NATIVE_HERR();
+    public static final long H5T_NATIVE_HSIZE = H5T_NATIVE_HSIZE();
+    public static final long H5T_NATIVE_HSSIZE = H5T_NATIVE_HSSIZE();
+    public static final long H5T_NATIVE_INT = H5T_NATIVE_INT();
+    public static final long H5T_NATIVE_INT_FAST16 = H5T_NATIVE_INT_FAST16();
+    public static final long H5T_NATIVE_INT_FAST32 = H5T_NATIVE_INT_FAST32();
+    public static final long H5T_NATIVE_INT_FAST64 = H5T_NATIVE_INT_FAST64();
+    public static final long H5T_NATIVE_INT_FAST8 = H5T_NATIVE_INT_FAST8();
+    public static final long H5T_NATIVE_INT_LEAST16 = H5T_NATIVE_INT_LEAST16();
+    public static final long H5T_NATIVE_INT_LEAST32 = H5T_NATIVE_INT_LEAST32();
+    public static final long H5T_NATIVE_INT_LEAST64 = H5T_NATIVE_INT_LEAST64();
+    public static final long H5T_NATIVE_INT_LEAST8 = H5T_NATIVE_INT_LEAST8();
+    public static final long H5T_NATIVE_INT16 = H5T_NATIVE_INT16();
+    public static final long H5T_NATIVE_INT32 = H5T_NATIVE_INT32();
+    public static final long H5T_NATIVE_INT64 = H5T_NATIVE_INT64();
+    public static final long H5T_NATIVE_INT8 = H5T_NATIVE_INT8();
+    public static final long H5T_NATIVE_LDOUBLE = H5T_NATIVE_LDOUBLE();
+    public static final long H5T_NATIVE_LLONG = H5T_NATIVE_LLONG();
+    public static final long H5T_NATIVE_LONG = H5T_NATIVE_LONG();
+    public static final long H5T_NATIVE_OPAQUE = H5T_NATIVE_OPAQUE();
+    public static final long H5T_NATIVE_SCHAR = H5T_NATIVE_SCHAR();
+    public static final long H5T_NATIVE_SHORT = H5T_NATIVE_SHORT();
+    public static final long H5T_NATIVE_UCHAR = H5T_NATIVE_UCHAR();
+    public static final long H5T_NATIVE_UINT = H5T_NATIVE_UINT();
+    public static final long H5T_NATIVE_UINT_FAST16 = H5T_NATIVE_UINT_FAST16();
+    public static final long H5T_NATIVE_UINT_FAST32 = H5T_NATIVE_UINT_FAST32();
+    public static final long H5T_NATIVE_UINT_FAST64 = H5T_NATIVE_UINT_FAST64();
+    public static final long H5T_NATIVE_UINT_FAST8 = H5T_NATIVE_UINT_FAST8();
+    public static final long H5T_NATIVE_UINT_LEAST16 = H5T_NATIVE_UINT_LEAST16();
+    public static final long H5T_NATIVE_UINT_LEAST32 = H5T_NATIVE_UINT_LEAST32();
+    public static final long H5T_NATIVE_UINT_LEAST64 = H5T_NATIVE_UINT_LEAST64();
+    public static final long H5T_NATIVE_UINT_LEAST8 = H5T_NATIVE_UINT_LEAST8();
+    public static final long H5T_NATIVE_UINT16 = H5T_NATIVE_UINT16();
+    public static final long H5T_NATIVE_UINT32 = H5T_NATIVE_UINT32();
+    public static final long H5T_NATIVE_UINT64 = H5T_NATIVE_UINT64();
+    public static final long H5T_NATIVE_UINT8 = H5T_NATIVE_UINT8();
+    public static final long H5T_NATIVE_ULLONG = H5T_NATIVE_ULLONG();
+    public static final long H5T_NATIVE_ULONG = H5T_NATIVE_ULONG();
+    public static final long H5T_NATIVE_USHORT = H5T_NATIVE_USHORT();
+    public static final int H5T_NCLASSES = H5T_NCLASSES();
+    public static final int H5T_NO_CLASS = H5T_NO_CLASS();
+    public static final int H5T_NORM_ERROR = H5T_NORM_ERROR();
+    public static final int H5T_NORM_IMPLIED = H5T_NORM_IMPLIED();
+    public static final int H5T_NORM_MSBSET = H5T_NORM_MSBSET();
+    public static final int H5T_NORM_NONE = H5T_NORM_NONE();
+    public static final int H5T_NPAD = H5T_NPAD();
+    public static final int H5T_NSGN = H5T_NSGN();
+    public static final int H5T_OPAQUE = H5T_OPAQUE();
+    public static final int H5T_OPAQUE_TAG_MAX = H5T_OPAQUE_TAG_MAX(); /* 1.6.5 */
+    public static final int H5T_ORDER_BE = H5T_ORDER_BE();
+    public static final int H5T_ORDER_ERROR = H5T_ORDER_ERROR();
+    public static final int H5T_ORDER_LE = H5T_ORDER_LE();
+    public static final int H5T_ORDER_NONE = H5T_ORDER_NONE();
+    public static final int H5T_ORDER_VAX = H5T_ORDER_VAX();
+    public static final int H5T_PAD_BACKGROUND = H5T_PAD_BACKGROUND();
+    public static final int H5T_PAD_ERROR = H5T_PAD_ERROR();
+    public static final int H5T_PAD_ONE = H5T_PAD_ONE();
+    public static final int H5T_PAD_ZERO = H5T_PAD_ZERO();
+    public static final int H5T_PERS_DONTCARE = H5T_PERS_DONTCARE();
+    public static final int H5T_PERS_HARD = H5T_PERS_HARD();
+    public static final int H5T_PERS_SOFT = H5T_PERS_SOFT();
+    public static final int H5T_REFERENCE = H5T_REFERENCE();
+    public static final int H5T_SGN_2 = H5T_SGN_2();
+    public static final int H5T_SGN_ERROR = H5T_SGN_ERROR();
+    public static final int H5T_SGN_NONE = H5T_SGN_NONE();
+    public static final long H5T_STD_B16BE = H5T_STD_B16BE();
+    public static final long H5T_STD_B16LE = H5T_STD_B16LE();
+    public static final long H5T_STD_B32BE = H5T_STD_B32BE();
+    public static final long H5T_STD_B32LE = H5T_STD_B32LE();
+    public static final long H5T_STD_B64BE = H5T_STD_B64BE();
+    public static final long H5T_STD_B64LE = H5T_STD_B64LE();
+    public static final long H5T_STD_B8BE = H5T_STD_B8BE();
+    public static final long H5T_STD_B8LE = H5T_STD_B8LE();
+    public static final long H5T_STD_I16BE = H5T_STD_I16BE();
+    public static final long H5T_STD_I16LE = H5T_STD_I16LE();
+    public static final long H5T_STD_I32BE = H5T_STD_I32BE();
+    public static final long H5T_STD_I32LE = H5T_STD_I32LE();
+    public static final long H5T_STD_I64BE = H5T_STD_I64BE();
+    public static final long H5T_STD_I64LE = H5T_STD_I64LE();
+    public static final long H5T_STD_I8BE = H5T_STD_I8BE();
+    public static final long H5T_STD_I8LE = H5T_STD_I8LE();
+    public static final long H5T_STD_REF_DSETREG = H5T_STD_REF_DSETREG();
+    public static final long H5T_STD_REF_OBJ = H5T_STD_REF_OBJ();
+    public static final long H5T_STD_U16BE = H5T_STD_U16BE();
+    public static final long H5T_STD_U16LE = H5T_STD_U16LE();
+    public static final long H5T_STD_U32BE = H5T_STD_U32BE();
+    public static final long H5T_STD_U32LE = H5T_STD_U32LE();
+    public static final long H5T_STD_U64BE = H5T_STD_U64BE();
+    public static final long H5T_STD_U64LE = H5T_STD_U64LE();
+    public static final long H5T_STD_U8BE = H5T_STD_U8BE();
+    public static final long H5T_STD_U8LE = H5T_STD_U8LE();
+    public static final int H5T_STR_ERROR = H5T_STR_ERROR();
+    public static final int H5T_STR_NULLPAD = H5T_STR_NULLPAD();
+    public static final int H5T_STR_NULLTERM = H5T_STR_NULLTERM();
+    public static final int H5T_STR_RESERVED_10 = H5T_STR_RESERVED_10();
+    public static final int H5T_STR_RESERVED_11 = H5T_STR_RESERVED_11();
+    public static final int H5T_STR_RESERVED_12 = H5T_STR_RESERVED_12();
+    public static final int H5T_STR_RESERVED_13 = H5T_STR_RESERVED_13();
+    public static final int H5T_STR_RESERVED_14 = H5T_STR_RESERVED_14();
+    public static final int H5T_STR_RESERVED_15 = H5T_STR_RESERVED_15();
+    public static final int H5T_STR_RESERVED_3 = H5T_STR_RESERVED_3();
+    public static final int H5T_STR_RESERVED_4 = H5T_STR_RESERVED_4();
+    public static final int H5T_STR_RESERVED_5 = H5T_STR_RESERVED_5();
+    public static final int H5T_STR_RESERVED_6 = H5T_STR_RESERVED_6();
+    public static final int H5T_STR_RESERVED_7 = H5T_STR_RESERVED_7();
+    public static final int H5T_STR_RESERVED_8 = H5T_STR_RESERVED_8();
+    public static final int H5T_STR_RESERVED_9 = H5T_STR_RESERVED_9();
+    public static final int H5T_STR_SPACEPAD = H5T_STR_SPACEPAD();
+    public static final int H5T_STRING = H5T_STRING();
+    public static final int H5T_TIME = H5T_TIME();
+    public static final long H5T_UNIX_D32BE = H5T_UNIX_D32BE();
+    public static final long H5T_UNIX_D32LE = H5T_UNIX_D32LE();
+    public static final long H5T_UNIX_D64BE = H5T_UNIX_D64BE();
+    public static final long H5T_UNIX_D64LE = H5T_UNIX_D64LE();
+    public static final long H5T_VARIABLE = H5T_VARIABLE();
+    public static final int H5T_VLEN = H5T_VLEN();
+    public static final int H5Z_CB_CONT = H5Z_CB_CONT();
+    public static final int H5Z_CB_ERROR = H5Z_CB_ERROR();
+    public static final int H5Z_CB_FAIL = H5Z_CB_FAIL();
+    public static final int H5Z_CB_NO = H5Z_CB_NO();
+    public static final int H5Z_DISABLE_EDC = H5Z_DISABLE_EDC();
+    public static final int H5Z_ENABLE_EDC = H5Z_ENABLE_EDC();
+    public static final int H5Z_ERROR_EDC = H5Z_ERROR_EDC();
+    public static final int H5Z_FILTER_DEFLATE = H5Z_FILTER_DEFLATE();
+    public static final int H5Z_FILTER_ERROR = H5Z_FILTER_ERROR();
+    public static final int H5Z_FILTER_FLETCHER32 = H5Z_FILTER_FLETCHER32();
+    public static final int H5Z_FILTER_MAX = H5Z_FILTER_MAX();
+    public static final int H5Z_FILTER_NBIT = H5Z_FILTER_NBIT();
+    public static final int H5Z_FILTER_NONE = H5Z_FILTER_NONE();
+    public static final int H5Z_FILTER_RESERVED = H5Z_FILTER_RESERVED();
+    public static final int H5Z_FILTER_SCALEOFFSET = H5Z_FILTER_SCALEOFFSET();
+    public static final int H5Z_FILTER_SHUFFLE = H5Z_FILTER_SHUFFLE();
+    public static final int H5Z_FILTER_SZIP = H5Z_FILTER_SZIP();
+    public static final int H5Z_FLAG_DEFMASK = H5Z_FLAG_DEFMASK();
+    public static final int H5Z_FLAG_INVMASK = H5Z_FLAG_INVMASK();
+    public static final int H5Z_FLAG_MANDATORY = H5Z_FLAG_MANDATORY();
+    public static final int H5Z_FLAG_OPTIONAL = H5Z_FLAG_OPTIONAL();
+    public static final int H5Z_FLAG_REVERSE = H5Z_FLAG_REVERSE();
+    public static final int H5Z_FLAG_SKIP_EDC = H5Z_FLAG_SKIP_EDC();
+    public static final int H5Z_MAX_NFILTERS = H5Z_MAX_NFILTERS();
+    public static final int H5Z_NO_EDC = H5Z_NO_EDC();
+    public static final int H5Z_FILTER_CONFIG_ENCODE_ENABLED = H5Z_FILTER_CONFIG_ENCODE_ENABLED();
+    public static final int H5Z_FILTER_CONFIG_DECODE_ENABLED = H5Z_FILTER_CONFIG_DECODE_ENABLED();
+    public static final int H5Z_SO_INT_MINBITS_DEFAULT = H5Z_SO_INT_MINBITS_DEFAULT();
+    public static final int H5Z_SO_FLOAT_DSCALE = H5Z_SO_FLOAT_DSCALE();
+    public static final int H5Z_SO_FLOAT_ESCALE = H5Z_SO_FLOAT_ESCALE();
+    public static final int H5Z_SO_INT = H5Z_SO_INT();
+    public static final int H5Z_SHUFFLE_USER_NPARMS = H5Z_SHUFFLE_USER_NPARMS();
+    public static final int H5Z_SHUFFLE_TOTAL_NPARMS = H5Z_SHUFFLE_TOTAL_NPARMS();
+    public static final int H5Z_SZIP_USER_NPARMS = H5Z_SZIP_USER_NPARMS();
+    public static final int H5Z_SZIP_TOTAL_NPARMS = H5Z_SZIP_TOTAL_NPARMS();
+    public static final int H5Z_SZIP_PARM_MASK = H5Z_SZIP_PARM_MASK();
+    public static final int H5Z_SZIP_PARM_PPB = H5Z_SZIP_PARM_PPB();
+    public static final int H5Z_SZIP_PARM_BPP = H5Z_SZIP_PARM_BPP();
+    public static final int H5Z_SZIP_PARM_PPS = H5Z_SZIP_PARM_PPS();
+    public static final int H5Z_NBIT_USER_NPARMS = H5Z_NBIT_USER_NPARMS();
+    public static final int H5Z_SCALEOFFSET_USER_NPARMS = H5Z_SCALEOFFSET_USER_NPARMS();
+    public static final int H5Z_FILTER_ALL = H5Z_FILTER_ALL();
+
+    // /////////////////////////////////////////////////////////////////////////
+    // List of private native variables to get constant values from C //
+    // DO NOT EDIT THE LIST UNLESS YOU KNOW WHAT YOU DO!!! //
+    // /////////////////////////////////////////////////////////////////////////
+
+    private static native final long H5_QUARTER_HADDR_MAX();
+
+    private static native final int H5_SZIP_MAX_PIXELS_PER_BLOCK();
+
+    private static native final int H5_SZIP_NN_OPTION_MASK();
+
+    private static native final int H5_SZIP_EC_OPTION_MASK();
+
+    private static native final int H5_SZIP_ALLOW_K13_OPTION_MASK();
+
+    private static native final int H5_SZIP_CHIP_OPTION_MASK();
+
+    private static native final int H5_INDEX_UNKNOWN();
+
+    private static native final int H5_INDEX_NAME();
+
+    private static native final int H5_INDEX_CRT_ORDER();
+
+    private static native final int H5_INDEX_N();
+
+    private static native final int H5_ITER_UNKNOWN();
+
+    private static native final int H5_ITER_INC();
+
+    private static native final int H5_ITER_DEC();
+
+    private static native final int H5_ITER_NATIVE();
+
+    private static native final int H5_ITER_N();
+
+    private static native final int H5AC_CURR_CACHE_CONFIG_VERSION();
+
+    private static native final int H5AC_MAX_TRACE_FILE_NAME_LEN();
+
+    private static native final int H5AC_METADATA_WRITE_STRATEGY_PROCESS_ZERO_ONLY();
+
+    private static native final int H5AC_METADATA_WRITE_STRATEGY_DISTRIBUTED();
+
+    private static native final int H5C_incr_off();
+
+    private static native final int H5C_incr_threshold();
+
+    private static native final int H5C_flash_incr_off();
+
+    private static native final int H5C_flash_incr_add_space();
+
+    private static native final int H5C_decr_off();
+
+    private static native final int H5C_decr_threshold();
+
+    private static native final int H5C_decr_age_out();
+
+    private static native final int H5C_decr_age_out_with_threshold();
+
+    private static native final int H5D_CHUNK_IDX_BTREE();
+
+    private static native final int H5D_ALLOC_TIME_DEFAULT();
+
+    private static native final int H5D_ALLOC_TIME_EARLY();
+
+    private static native final int H5D_ALLOC_TIME_ERROR();
+
+    private static native final int H5D_ALLOC_TIME_INCR();
+
+    private static native final int H5D_ALLOC_TIME_LATE();
+
+    private static native final int H5D_FILL_TIME_ERROR();
+
+    private static native final int H5D_FILL_TIME_ALLOC();
+
+    private static native final int H5D_FILL_TIME_NEVER();
+
+    private static native final int H5D_FILL_TIME_IFSET();
+
+    private static native final int H5D_FILL_VALUE_DEFAULT();
+
+    private static native final int H5D_FILL_VALUE_ERROR();
+
+    private static native final int H5D_FILL_VALUE_UNDEFINED();
+
+    private static native final int H5D_FILL_VALUE_USER_DEFINED();
+
+    private static native final int H5D_LAYOUT_ERROR();
+
+    private static native final int H5D_CHUNKED();
+
+    private static native final int H5D_COMPACT();
+
+    private static native final int H5D_CONTIGUOUS();
+
+    private static native final int H5D_VIRTUAL();
+
+    private static native final int H5D_NLAYOUTS();
+
+    private static native final int H5D_SPACE_STATUS_ALLOCATED();
+
+    private static native final int H5D_SPACE_STATUS_ERROR();
+
+    private static native final int H5D_SPACE_STATUS_NOT_ALLOCATED();
+
+    private static native final int H5D_SPACE_STATUS_PART_ALLOCATED();
+
+    private static native final int H5D_VDS_ERROR();
+
+    private static native final int H5D_VDS_FIRST_MISSING();
+
+    private static native final int H5D_VDS_LAST_AVAILABLE();
+
+    private static native final long H5E_ALIGNMENT();
+
+    private static native final long H5E_ALREADYEXISTS();
+
+    private static native final long H5E_ALREADYINIT();
+
+    private static native final long H5E_ARGS();
+
+    private static native final long H5E_ATOM();
+
+    private static native final long H5E_ATTR();
+
+    private static native final long H5E_BADATOM();
+
+    private static native final long H5E_BADFILE();
+
+    private static native final long H5E_BADGROUP();
+
+    private static native final long H5E_BADMESG();
+
+    private static native final long H5E_BADRANGE();
+
+    private static native final long H5E_BADSELECT();
+
+    private static native final long H5E_BADSIZE();
+
+    private static native final long H5E_BADTYPE();
+
+    private static native final long H5E_BADVALUE();
+
+    private static native final long H5E_BTREE();
+
+    private static native final long H5E_CACHE();
+
+    private static native final long H5E_CALLBACK();
+
+    private static native final long H5E_CANAPPLY();
+
+    // private static native final long H5E_CANTALLOC();
+    private static native final long H5E_CANTCLIP();
+
+    private static native final long H5E_CANTCLOSEFILE();
+
+    private static native final long H5E_CANTCONVERT();
+
+    private static native final long H5E_CANTCOPY();
+
+    private static native final long H5E_CANTCOUNT();
+
+    private static native final long H5E_CANTCREATE();
+
+    private static native final long H5E_CANTDEC();
+
+    private static native final long H5E_CANTDECODE();
+
+    private static native final long H5E_CANTDELETE();
+
+    private static native final long H5E_CANTENCODE();
+
+    private static native final long H5E_CANTFLUSH();
+
+    private static native final long H5E_CANTFREE();
+
+    private static native final long H5E_CANTGET();
+
+    private static native final long H5E_CANTINC();
+
+    private static native final long H5E_CANTINIT();
+
+    private static native final long H5E_CANTINSERT();
+
+    private static native final long H5E_CANTLIST();
+
+    private static native final long H5E_CANTLOAD();
+
+    private static native final long H5E_CANTLOCK();
+
+    private static native final long H5E_CANTNEXT();
+
+    private static native final long H5E_CANTOPENFILE();
+
+    private static native final long H5E_CANTOPENOBJ();
+
+    // private static native final long H5E_CANTRECV();
+    private static native final long H5E_CANTREGISTER();
+
+    private static native final long H5E_CANTRELEASE();
+
+    private static native final long H5E_CANTSELECT();
+
+    private static native final long H5E_CANTSET();
+
+    private static native final long H5E_CANTSPLIT();
+
+    private static native final long H5E_CANTUNLOCK();
+
+    private static native final long H5E_CLOSEERROR();
+
+    private static native final long H5E_COMPLEN();
+
+    private static native final long H5E_DATASET();
+
+    private static native final long H5E_DATASPACE();
+
+    private static native final long H5E_DATATYPE();
+
+    private static native final long H5E_DEFAULT();
+
+    private static native final long H5E_DUPCLASS();
+
+    private static native final long H5E_EFL();
+
+    private static native final long H5E_EXISTS();
+
+    private static native final long H5E_FCNTL();
+
+    private static native final long H5E_FILE();
+
+    private static native final long H5E_FILEEXISTS();
+
+    private static native final long H5E_FILEOPEN();
+
+    private static native final long H5E_FUNC();
+
+    private static native final long H5E_HEAP();
+
+    private static native final long H5E_INTERNAL();
+
+    private static native final long H5E_IO();
+
+    private static native final long H5E_LINK();
+
+    private static native final long H5E_LINKCOUNT();
+
+    private static native final int H5E_MAJOR();
+
+    private static native final int H5E_MINOR();
+
+    private static native final long H5E_MOUNT();
+
+    private static native final long H5E_MPI();
+
+    private static native final long H5E_MPIERRSTR();
+
+    private static native final long H5E_NOFILTER();
+
+    private static native final long H5E_NOIDS();
+
+    private static native final long H5E_NONE_MAJOR();
+
+    private static native final long H5E_NONE_MINOR();
+
+    private static native final long H5E_NOSPACE();
+
+    private static native final long H5E_NOTCACHED();
+
+    private static native final long H5E_NOTFOUND();
+
+    private static native final long H5E_NOTHDF5();
+
+    private static native final long H5E_OHDR();
+
+    private static native final long H5E_OVERFLOW();
+
+    private static native final long H5E_PLINE();
+
+    private static native final long H5E_PLIST();
+
+    private static native final long H5E_PROTECT();
+
+    private static native final long H5E_READERROR();
+
+    private static native final long H5E_REFERENCE();
+
+    private static native final long H5E_RESOURCE();
+
+    private static native final long H5E_RS();
+
+    private static native final long H5E_SEEKERROR();
+
+    private static native final long H5E_SETLOCAL();
+
+    private static native final long H5E_STORAGE();
+
+    private static native final long H5E_SYM();
+
+    private static native final long H5E_TRUNCATED();
+
+    private static native final long H5E_TST();
+
+    private static native final long H5E_UNINITIALIZED();
+
+    private static native final long H5E_UNSUPPORTED();
+
+    private static native final long H5E_VERSION();
+
+    private static native final long H5E_VFL();
+
+    private static native final long H5E_WALK_DOWNWARD();
+
+    private static native final long H5E_WALK_UPWARD();
+
+    private static native final long H5E_WRITEERROR();
+
+    private static native final int H5F_ACC_CREAT();
+
+    private static native final int H5F_ACC_EXCL();
+
+    private static native final int H5F_ACC_RDONLY();
+
+    private static native final int H5F_ACC_RDWR();
+
+    private static native final int H5F_ACC_TRUNC();
+
+    private static native final int H5F_ACC_DEFAULT();
+
+    private static native final int H5F_ACC_SWMR_READ();
+
+    private static native final int H5F_ACC_SWMR_WRITE();
+
+    private static native final int H5F_CLOSE_DEFAULT();
+
+    private static native final int H5F_CLOSE_SEMI();
+
+    private static native final int H5F_CLOSE_STRONG();
+
+    private static native final int H5F_CLOSE_WEAK();
+
+    private static native final int H5F_LIBVER_EARLIEST();
+
+    private static native final int H5F_LIBVER_LATEST();
+
+    private static native final int H5F_OBJ_ALL();
+
+    private static native final int H5F_OBJ_ATTR();
+
+    private static native final int H5F_OBJ_DATASET();
+
+    private static native final int H5F_OBJ_DATATYPE();
+
+    private static native final int H5F_OBJ_FILE();
+
+    private static native final int H5F_OBJ_GROUP();
+
+    private static native final int H5F_OBJ_LOCAL(); /* 1.6.5 */
+
+    private static native final int H5F_SCOPE_DOWN();
+
+    private static native final int H5F_SCOPE_GLOBAL();
+
+    private static native final int H5F_SCOPE_LOCAL();
+
+    private static native final int H5F_UNLIMITED();
+
+    private static native final int H5F_FILE_SPACE_DEFAULT();
+
+    private static native final int H5F_FILE_SPACE_ALL_PERSIST();
+
+    private static native final int H5F_FILE_SPACE_ALL();
+
+    private static native final int H5F_FILE_SPACE_AGGR_VFD();
+
+    private static native final int H5F_FILE_SPACE_VFD();
+
+    private static native final int H5F_FILE_SPACE_NTYPES();
+
+    private static native final long H5FD_CORE();
+
+    private static native final long H5FD_DIRECT();
+
+    private static native final long H5FD_FAMILY();
+
+    private static native final long H5FD_LOG();
+
+    private static native final long H5FD_MPIO();
+
+    private static native final long H5FD_MULTI();
+
+    private static native final long H5FD_SEC2();
+
+    private static native final long H5FD_STDIO();
+
+    private static native final long H5FD_WINDOWS();
+
+    private static native final int H5FD_LOG_LOC_READ();
+
+    private static native final int H5FD_LOG_LOC_WRITE();
+
+    private static native final int H5FD_LOG_LOC_SEEK();
+
+    private static native final int H5FD_LOG_LOC_IO();
+
+    private static native final int H5FD_LOG_FILE_READ();
+
+    private static native final int H5FD_LOG_FILE_WRITE();
+
+    private static native final int H5FD_LOG_FILE_IO();
+
+    private static native final int H5FD_LOG_FLAVOR();
+
+    private static native final int H5FD_LOG_NUM_READ();
+
+    private static native final int H5FD_LOG_NUM_WRITE();
+
+    private static native final int H5FD_LOG_NUM_SEEK();
+
+    private static native final int H5FD_LOG_NUM_TRUNCATE();
+
+    private static native final int H5FD_LOG_NUM_IO();
+
+    private static native final int H5FD_LOG_TIME_OPEN();
+
+    private static native final int H5FD_LOG_TIME_STAT();
+
+    private static native final int H5FD_LOG_TIME_READ();
+
+    private static native final int H5FD_LOG_TIME_WRITE();
+
+    private static native final int H5FD_LOG_TIME_SEEK();
+
+    private static native final int H5FD_LOG_TIME_CLOSE();
+
+    private static native final int H5FD_LOG_TIME_IO();
+
+    private static native final int H5FD_LOG_ALLOC();
+
+    private static native final int H5FD_LOG_ALL();
+
+    private static native final int H5FD_MEM_NOLIST();
+
+    private static native final int H5FD_MEM_DEFAULT();
+
+    private static native final int H5FD_MEM_SUPER();
+
+    private static native final int H5FD_MEM_BTREE();
+
+    private static native final int H5FD_MEM_DRAW();
+
+    private static native final int H5FD_MEM_GHEAP();
+
+    private static native final int H5FD_MEM_LHEAP();
+
+    private static native final int H5FD_MEM_OHDR();
+
+    private static native final int H5FD_MEM_NTYPES();
+
+    private static native final long H5FD_DEFAULT_HADDR_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_SUPER_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_BTREE_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_DRAW_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_GHEAP_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_LHEAP_SIZE();
+
+    private static native final long H5FD_MEM_DEFAULT_OHDR_SIZE();
+
+    private static native final int H5G_DATASET();
+
+    private static native final int H5G_GROUP();
+
+    private static native final int H5G_LINK();
+
+    private static native final int H5G_UDLINK();
+
+    private static native final int H5G_LINK_ERROR();
+
+    private static native final int H5G_LINK_HARD();
+
+    private static native final int H5G_LINK_SOFT();
+
+    private static native final int H5G_NLIBTYPES();
+
+    private static native final int H5G_NTYPES();
+
+    private static native final int H5G_NUSERTYPES();
+
+    private static native final int H5G_RESERVED_5();
+
+    private static native final int H5G_RESERVED_6();
+
+    private static native final int H5G_RESERVED_7();
+
+    private static native final int H5G_SAME_LOC();
+
+    private static native final int H5G_STORAGE_TYPE_UNKNOWN();
+
+    private static native final int H5G_STORAGE_TYPE_SYMBOL_TABLE();
+
+    private static native final int H5G_STORAGE_TYPE_COMPACT();
+
+    private static native final int H5G_STORAGE_TYPE_DENSE();
+
+    private static native final int H5G_TYPE();
+
+    private static native final int H5G_UNKNOWN();
+
+    private static native final int H5I_ATTR();
+
+    private static native final int H5I_BADID();
+
+    private static native final int H5I_DATASET();
+
+    private static native final int H5I_DATASPACE();
+
+    private static native final int H5I_DATATYPE();
+
+    private static native final int H5I_ERROR_CLASS();
+
+    private static native final int H5I_ERROR_MSG();
+
+    private static native final int H5I_ERROR_STACK();
+
+    private static native final int H5I_FILE();
+
+    private static native final int H5I_GENPROP_CLS();
+
+    private static native final int H5I_GENPROP_LST();
+
+    private static native final int H5I_GROUP();
+
+    private static native final int H5I_INVALID_HID();
+
+    private static native final int H5I_NTYPES();
+
+    private static native final int H5I_REFERENCE();
+
+    private static native final int H5I_UNINIT();
+
+    private static native final int H5I_VFL();
+
+    private static native final int H5L_TYPE_ERROR();
+
+    private static native final int H5L_TYPE_HARD();
+
+    private static native final int H5L_TYPE_SOFT();
+
+    private static native final int H5L_TYPE_EXTERNAL();
+
+    private static native final int H5L_TYPE_MAX();
+
+    private static native final int H5O_COPY_SHALLOW_HIERARCHY_FLAG();
+
+    private static native final int H5O_COPY_EXPAND_SOFT_LINK_FLAG();
+
+    private static native final int H5O_COPY_EXPAND_EXT_LINK_FLAG();
+
+    private static native final int H5O_COPY_EXPAND_REFERENCE_FLAG();
+
+    private static native final int H5O_COPY_WITHOUT_ATTR_FLAG();
+
+    private static native final int H5O_COPY_PRESERVE_NULL_FLAG();
+
+    private static native final int H5O_SHMESG_NONE_FLAG();
+
+    private static native final int H5O_SHMESG_SDSPACE_FLAG();
+
+    private static native final int H5O_SHMESG_DTYPE_FLAG();
+
+    private static native final int H5O_SHMESG_FILL_FLAG();
+
+    private static native final int H5O_SHMESG_PLINE_FLAG();
+
+    private static native final int H5O_SHMESG_ATTR_FLAG();
+
+    private static native final int H5O_SHMESG_ALL_FLAG();
+
+    private static native final int H5O_TYPE_UNKNOWN();
+
+    private static native final int H5O_TYPE_GROUP();
+
+    private static native final int H5O_TYPE_DATASET();
+
+    private static native final int H5O_TYPE_NAMED_DATATYPE();
+
+    private static native final int H5O_TYPE_NTYPES();
+
+    private static native final long H5P_ROOT();
+
+    private static native final long H5P_OBJECT_CREATE();
+
+    private static native final long H5P_FILE_CREATE();
+
+    private static native final long H5P_FILE_ACCESS();
+
+    private static native final long H5P_DATASET_CREATE();
+
+    private static native final long H5P_DATASET_ACCESS();
+
+    private static native final long H5P_DATASET_XFER();
+
+    private static native final long H5P_FILE_MOUNT();
+
+    private static native final long H5P_GROUP_CREATE();
+
+    private static native final long H5P_GROUP_ACCESS();
+
+    private static native final long H5P_DATATYPE_CREATE();
+
+    private static native final long H5P_DATATYPE_ACCESS();
+
+    private static native final long H5P_STRING_CREATE();
+
+    private static native final long H5P_ATTRIBUTE_CREATE();
+
+    private static native final long H5P_ATTRIBUTE_ACCESS();
+
+    private static native final long H5P_OBJECT_COPY();
+
+    private static native final long H5P_LINK_CREATE();
+
+    private static native final long H5P_LINK_ACCESS();
+
+    private static native final long H5P_FILE_CREATE_DEFAULT();
+
+    private static native final long H5P_FILE_ACCESS_DEFAULT();
+
+    private static native final long H5P_DATASET_CREATE_DEFAULT();
+
+    private static native final long H5P_DATASET_ACCESS_DEFAULT();
+
+    private static native final long H5P_DATASET_XFER_DEFAULT();
+
+    private static native final long H5P_FILE_MOUNT_DEFAULT();
+
+    private static native final long H5P_GROUP_CREATE_DEFAULT();
+
+    private static native final long H5P_GROUP_ACCESS_DEFAULT();
+
+    private static native final long H5P_DATATYPE_CREATE_DEFAULT();
+
+    private static native final long H5P_DATATYPE_ACCESS_DEFAULT();
+
+    private static native final long H5P_ATTRIBUTE_CREATE_DEFAULT();
+
+    private static native final long H5P_ATTRIBUTE_ACCESS_DEFAULT();
+
+    private static native final long H5P_OBJECT_COPY_DEFAULT();
+
+    private static native final long H5P_LINK_CREATE_DEFAULT();
+
+    private static native final long H5P_LINK_ACCESS_DEFAULT();
+
+    private static native final int H5P_CRT_ORDER_TRACKED();
+
+    private static native final int H5P_CRT_ORDER_INDEXED();
+
+    private static native final long H5P_DEFAULT();
+
+    private static native final int H5PL_TYPE_ERROR();
+
+    private static native final int H5PL_TYPE_FILTER();
+
+    private static native final int H5PL_FILTER_PLUGIN();
+
+    private static native final int H5PL_ALL_PLUGIN();
+
+    private static native final int H5R_BADTYPE();
+
+    private static native final int H5R_DATASET_REGION();
+
+    private static native final int H5R_MAXTYPE();
+
+    private static native final int H5R_OBJ_REF_BUF_SIZE();
+
+    private static native final int H5R_OBJECT();
+
+    private static native final int H5S_ALL();
+
+    private static native final int H5S_MAX_RANK();
+
+    private static native final int H5S_NO_CLASS();
+
+    private static native final int H5S_NULL();
+
+    private static native final int H5S_SCALAR();
+
+    private static native final int H5S_SEL_ALL();
+
+    private static native final int H5S_SEL_ERROR();
+
+    private static native final int H5S_SEL_HYPERSLABS();
+
+    private static native final int H5S_SEL_N();
+
+    private static native final int H5S_SEL_NONE();
+
+    private static native final int H5S_SEL_POINTS();
+
+    private static native final int H5S_SELECT_AND();
+
+    private static native final int H5S_SELECT_APPEND();
+
+    private static native final int H5S_SELECT_INVALID();
+
+    private static native final int H5S_SELECT_NOOP();
+
+    private static native final int H5S_SELECT_NOTA();
+
+    private static native final int H5S_SELECT_NOTB();
+
+    private static native final int H5S_SELECT_OR();
+
+    private static native final int H5S_SELECT_PREPEND();
+
+    private static native final int H5S_SELECT_SET();
+
+    private static native final int H5S_SELECT_XOR();
+
+    private static native final int H5S_SIMPLE();
+
+    private static native final int H5S_UNLIMITED();
+
+    private static native final long H5T_ALPHA_B16();
+
+    private static native final long H5T_ALPHA_B32();
+
+    private static native final long H5T_ALPHA_B64();
+
+    private static native final long H5T_ALPHA_B8();
+
+    private static native final long H5T_ALPHA_F32();
+
+    private static native final long H5T_ALPHA_F64();
+
+    private static native final long H5T_ALPHA_I16();
+
+    private static native final long H5T_ALPHA_I32();
+
+    private static native final long H5T_ALPHA_I64();
+
+    private static native final long H5T_ALPHA_I8();
+
+    private static native final long H5T_ALPHA_U16();
+
+    private static native final long H5T_ALPHA_U32();
+
+    private static native final long H5T_ALPHA_U64();
+
+    private static native final long H5T_ALPHA_U8();
+
+    private static native final int H5T_ARRAY();
+
+    private static native final int H5T_BITFIELD();
+
+    private static native final int H5T_BKG_NO();
+
+    private static native final int H5T_BKG_YES();
+
+    private static native final long H5T_C_S1();
+
+    private static native final int H5T_COMPOUND();
+
+    private static native final int H5T_CONV_CONV();
+
+    private static native final int H5T_CONV_FREE();
+
+    private static native final int H5T_CONV_INIT();
+
+    private static native final int H5T_CSET_ERROR();
+
+    private static native final int H5T_CSET_ASCII();
+
+    private static native final int H5T_CSET_UTF8();
+
+    private static native final int H5T_CSET_RESERVED_10();
+
+    private static native final int H5T_CSET_RESERVED_11();
+
+    private static native final int H5T_CSET_RESERVED_12();
+
+    private static native final int H5T_CSET_RESERVED_13();
+
+    private static native final int H5T_CSET_RESERVED_14();
+
+    private static native final int H5T_CSET_RESERVED_15();
+
+    private static native final int H5T_CSET_RESERVED_2();
+
+    private static native final int H5T_CSET_RESERVED_3();
+
+    private static native final int H5T_CSET_RESERVED_4();
+
+    private static native final int H5T_CSET_RESERVED_5();
+
+    private static native final int H5T_CSET_RESERVED_6();
+
+    private static native final int H5T_CSET_RESERVED_7();
+
+    private static native final int H5T_CSET_RESERVED_8();
+
+    private static native final int H5T_CSET_RESERVED_9();
+
+    private static native final int H5T_DIR_ASCEND();
+
+    private static native final int H5T_DIR_DEFAULT();
+
+    private static native final int H5T_DIR_DESCEND();
+
+    private static native final int H5T_ENUM();
+
+    private static native final int H5T_FLOAT();
+
+    private static native final long H5T_FORTRAN_S1();
+
+    private static native final long H5T_IEEE_F32BE();
+
+    private static native final long H5T_IEEE_F32LE();
+
+    private static native final long H5T_IEEE_F64BE();
+
+    private static native final long H5T_IEEE_F64LE();
+
+    private static native final int H5T_INTEGER();
+
+    private static native final long H5T_INTEL_B16();
+
+    private static native final long H5T_INTEL_B32();
+
+    private static native final long H5T_INTEL_B64();
+
+    private static native final long H5T_INTEL_B8();
+
+    private static native final long H5T_INTEL_F32();
+
+    private static native final long H5T_INTEL_F64();
+
+    private static native final long H5T_INTEL_I16();
+
+    private static native final long H5T_INTEL_I32();
+
+    private static native final long H5T_INTEL_I64();
+
+    private static native final long H5T_INTEL_I8();
+
+    private static native final long H5T_INTEL_U16();
+
+    private static native final long H5T_INTEL_U32();
+
+    private static native final long H5T_INTEL_U64();
+
+    private static native final long H5T_INTEL_U8();
+
+    private static native final long H5T_MIPS_B16();
+
+    private static native final long H5T_MIPS_B32();
+
+    private static native final long H5T_MIPS_B64();
+
+    private static native final long H5T_MIPS_B8();
+
+    private static native final long H5T_MIPS_F32();
+
+    private static native final long H5T_MIPS_F64();
+
+    private static native final long H5T_MIPS_I16();
+
+    private static native final long H5T_MIPS_I32();
+
+    private static native final long H5T_MIPS_I64();
+
+    private static native final long H5T_MIPS_I8();
+
+    private static native final long H5T_MIPS_U16();
+
+    private static native final long H5T_MIPS_U32();
+
+    private static native final long H5T_MIPS_U64();
+
+    private static native final long H5T_MIPS_U8();
+
+    private static native final long H5T_NATIVE_B16();
+
+    private static native final long H5T_NATIVE_B32();
+
+    private static native final long H5T_NATIVE_B64();
+
+    private static native final long H5T_NATIVE_B8();
+
+    private static native final long H5T_NATIVE_CHAR();
+
+    private static native final long H5T_NATIVE_DOUBLE();
+
+    private static native final long H5T_NATIVE_FLOAT();
+
+    private static native final long H5T_NATIVE_HADDR();
+
+    private static native final long H5T_NATIVE_HBOOL();
+
+    private static native final long H5T_NATIVE_HERR();
+
+    private static native final long H5T_NATIVE_HSIZE();
+
+    private static native final long H5T_NATIVE_HSSIZE();
+
+    private static native final long H5T_NATIVE_INT();
+
+    private static native final long H5T_NATIVE_INT_FAST16();
+
+    private static native final long H5T_NATIVE_INT_FAST32();
+
+    private static native final long H5T_NATIVE_INT_FAST64();
+
+    private static native final long H5T_NATIVE_INT_FAST8();
+
+    private static native final long H5T_NATIVE_INT_LEAST16();
+
+    private static native final long H5T_NATIVE_INT_LEAST32();
+
+    private static native final long H5T_NATIVE_INT_LEAST64();
+
+    private static native final long H5T_NATIVE_INT_LEAST8();
+
+    private static native final long H5T_NATIVE_INT16();
+
+    private static native final long H5T_NATIVE_INT32();
+
+    private static native final long H5T_NATIVE_INT64();
+
+    private static native final long H5T_NATIVE_INT8();
+
+    private static native final long H5T_NATIVE_LDOUBLE();
+
+    private static native final long H5T_NATIVE_LLONG();
+
+    private static native final long H5T_NATIVE_LONG();
+
+    private static native final long H5T_NATIVE_OPAQUE();
+
+    private static native final long H5T_NATIVE_SCHAR();
+
+    private static native final long H5T_NATIVE_SHORT();
+
+    private static native final long H5T_NATIVE_UCHAR();
+
+    private static native final long H5T_NATIVE_UINT();
+
+    private static native final long H5T_NATIVE_UINT_FAST16();
+
+    private static native final long H5T_NATIVE_UINT_FAST32();
+
+    private static native final long H5T_NATIVE_UINT_FAST64();
+
+    private static native final long H5T_NATIVE_UINT_FAST8();
+
+    private static native final long H5T_NATIVE_UINT_LEAST16();
+
+    private static native final long H5T_NATIVE_UINT_LEAST32();
+
+    private static native final long H5T_NATIVE_UINT_LEAST64();
+
+    private static native final long H5T_NATIVE_UINT_LEAST8();
+
+    private static native final long H5T_NATIVE_UINT16();
+
+    private static native final long H5T_NATIVE_UINT32();
+
+    private static native final long H5T_NATIVE_UINT64();
+
+    private static native final long H5T_NATIVE_UINT8();
+
+    private static native final long H5T_NATIVE_ULLONG();
+
+    private static native final long H5T_NATIVE_ULONG();
+
+    private static native final long H5T_NATIVE_USHORT();
+
+    private static native final int H5T_NCLASSES();
+
+    private static native final int H5T_NO_CLASS();
+
+    private static native final int H5T_NORM_ERROR();
+
+    private static native final int H5T_NORM_IMPLIED();
+
+    private static native final int H5T_NORM_MSBSET();
+
+    private static native final int H5T_NORM_NONE();
+
+    private static native final int H5T_NPAD();
+
+    private static native final int H5T_NSGN();
+
+    private static native final int H5T_OPAQUE();
+
+    private static native final int H5T_OPAQUE_TAG_MAX();
+
+    private static native final int H5T_ORDER_BE();
+
+    private static native final int H5T_ORDER_ERROR();
+
+    private static native final int H5T_ORDER_LE();
+
+    private static native final int H5T_ORDER_NONE();
+
+    private static native final int H5T_ORDER_VAX();
+
+    private static native final int H5T_PAD_BACKGROUND();
+
+    private static native final int H5T_PAD_ERROR();
+
+    private static native final int H5T_PAD_ONE();
+
+    private static native final int H5T_PAD_ZERO();
+
+    private static native final int H5T_PERS_DONTCARE();
+
+    private static native final int H5T_PERS_HARD();
+
+    private static native final int H5T_PERS_SOFT();
+
+    private static native final int H5T_REFERENCE();
+
+    private static native final int H5T_SGN_2();
+
+    private static native final int H5T_SGN_ERROR();
+
+    private static native final int H5T_SGN_NONE();
+
+    private static native final long H5T_STD_B16BE();
+
+    private static native final long H5T_STD_B16LE();
+
+    private static native final long H5T_STD_B32BE();
+
+    private static native final long H5T_STD_B32LE();
+
+    private static native final long H5T_STD_B64BE();
+
+    private static native final long H5T_STD_B64LE();
+
+    private static native final long H5T_STD_B8BE();
+
+    private static native final long H5T_STD_B8LE();
+
+    private static native final long H5T_STD_I16BE();
+
+    private static native final long H5T_STD_I16LE();
+
+    private static native final long H5T_STD_I32BE();
+
+    private static native final long H5T_STD_I32LE();
+
+    private static native final long H5T_STD_I64BE();
+
+    private static native final long H5T_STD_I64LE();
+
+    private static native final long H5T_STD_I8BE();
+
+    private static native final long H5T_STD_I8LE();
+
+    private static native final long H5T_STD_REF_DSETREG();
+
+    private static native final long H5T_STD_REF_OBJ();
+
+    private static native final long H5T_STD_U16BE();
+
+    private static native final long H5T_STD_U16LE();
+
+    private static native final long H5T_STD_U32BE();
+
+    private static native final long H5T_STD_U32LE();
+
+    private static native final long H5T_STD_U64BE();
+
+    private static native final long H5T_STD_U64LE();
+
+    private static native final long H5T_STD_U8BE();
+
+    private static native final long H5T_STD_U8LE();
+
+    private static native final int H5T_STR_ERROR();
+
+    private static native final int H5T_STR_NULLPAD();
+
+    private static native final int H5T_STR_NULLTERM();
+
+    private static native final int H5T_STR_RESERVED_10();
+
+    private static native final int H5T_STR_RESERVED_11();
+
+    private static native final int H5T_STR_RESERVED_12();
+
+    private static native final int H5T_STR_RESERVED_13();
+
+    private static native final int H5T_STR_RESERVED_14();
+
+    private static native final int H5T_STR_RESERVED_15();
+
+    private static native final int H5T_STR_RESERVED_3();
+
+    private static native final int H5T_STR_RESERVED_4();
+
+    private static native final int H5T_STR_RESERVED_5();
+
+    private static native final int H5T_STR_RESERVED_6();
+
+    private static native final int H5T_STR_RESERVED_7();
+
+    private static native final int H5T_STR_RESERVED_8();
+
+    private static native final int H5T_STR_RESERVED_9();
+
+    private static native final int H5T_STR_SPACEPAD();
+
+    private static native final int H5T_STRING();
+
+    private static native final int H5T_TIME();
+
+    private static native final long H5T_UNIX_D32BE();
+
+    private static native final long H5T_UNIX_D32LE();
+
+    private static native final long H5T_UNIX_D64BE();
+
+    private static native final long H5T_UNIX_D64LE();
+
+    private static native final long H5T_VARIABLE();
+
+    private static native final int H5T_VLEN();
+
+    private static native final int H5Z_CB_CONT();
+
+    private static native final int H5Z_CB_ERROR();
+
+    private static native final int H5Z_CB_FAIL();
+
+    private static native final int H5Z_CB_NO();
+
+    private static native final int H5Z_DISABLE_EDC();
+
+    private static native final int H5Z_ENABLE_EDC();
+
+    private static native final int H5Z_ERROR_EDC();
+
+    private static native final int H5Z_FILTER_DEFLATE();
+
+    private static native final int H5Z_FILTER_ERROR();
+
+    private static native final int H5Z_FILTER_FLETCHER32();
+
+    private static native final int H5Z_FILTER_MAX();
+
+    private static native final int H5Z_FILTER_NBIT();
+
+    private static native final int H5Z_FILTER_NONE();
+
+    private static native final int H5Z_FILTER_RESERVED();
+
+    private static native final int H5Z_FILTER_SCALEOFFSET();
+
+    private static native final int H5Z_FILTER_SHUFFLE();
+
+    private static native final int H5Z_FILTER_SZIP();
+
+    private static native final int H5Z_FLAG_DEFMASK();
+
+    private static native final int H5Z_FLAG_INVMASK();
+
+    private static native final int H5Z_FLAG_MANDATORY();
+
+    private static native final int H5Z_FLAG_OPTIONAL();
+
+    private static native final int H5Z_FLAG_REVERSE();
+
+    private static native final int H5Z_FLAG_SKIP_EDC();
+
+    private static native final int H5Z_MAX_NFILTERS();
+
+    private static native final int H5Z_NO_EDC();
+
+    private static native final int H5Z_FILTER_CONFIG_ENCODE_ENABLED();
+
+    private static native final int H5Z_FILTER_CONFIG_DECODE_ENABLED();
+
+    private static native final int H5Z_SO_INT_MINBITS_DEFAULT();
+
+    private static native final int H5Z_SO_FLOAT_DSCALE();
+
+    private static native final int H5Z_SO_FLOAT_ESCALE();
+
+    private static native final int H5Z_SO_INT();
+
+    private static native final int H5Z_SHUFFLE_USER_NPARMS();
+
+    private static native final int H5Z_SHUFFLE_TOTAL_NPARMS();
+
+    private static native final int H5Z_SZIP_USER_NPARMS();
+
+    private static native final int H5Z_SZIP_TOTAL_NPARMS();
+
+    private static native final int H5Z_SZIP_PARM_MASK();
+
+    private static native final int H5Z_SZIP_PARM_PPB();
+
+    private static native final int H5Z_SZIP_PARM_BPP();
+
+    private static native final int H5Z_SZIP_PARM_PPS();
+
+    private static native final int H5Z_NBIT_USER_NPARMS();
+
+    private static native final int H5Z_SCALEOFFSET_USER_NPARMS();
+
+    private static native final int H5Z_FILTER_ALL();
+
+}
diff --git a/java/src/hdf/hdf5lib/HDF5GroupInfo.java b/java/src/hdf/hdf5lib/HDF5GroupInfo.java
new file mode 100644
index 0000000..fa33fec
--- /dev/null
+++ b/java/src/hdf/hdf5lib/HDF5GroupInfo.java
@@ -0,0 +1,171 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+package hdf.hdf5lib;
+
+/**
+ * <p>
+ * This class is a container for the information reported about an HDF5 Object
+ * from the H5Gget_obj_info() method.
+ * <p>
+ * The fileno and objno fields contain four values which uniquely identify an
+ * object among those HDF5 files which are open: if all four values are the same
+ * between two objects, then the two objects are the same (provided both files
+ * are still open). The nlink field is the number of hard links to the object or
+ * zero when information is being returned about a symbolic link (symbolic links
+ * do not have hard links but all other objects always have at least one). The
+ * type field contains the type of the object, one of H5G_GROUP, H5G_DATASET, or
+ * H5G_LINK. The mtime field contains the modification time. If information is
+ * being returned about a symbolic link then linklen will be the length of the
+ * link value (the name of the pointed-to object with the null terminator);
+ * otherwise linklen will be zero. Other fields may be added to this structure
+ * in the future.
+ */
+
+public class HDF5GroupInfo {
+    long[] fileno;
+    long[] objno;
+    int nlink;
+    int type;
+    long mtime;
+    int linklen;
+
+    public HDF5GroupInfo() {
+        fileno = new long[2];
+        objno = new long[2];
+        nlink = -1;
+        type = -1;
+        mtime = 0;
+        linklen = 0;
+    }
+
+    /**
+     * Sets the HDF5 group information. Used by the JHI5.
+     *
+     * @param fn
+     *            File id number
+     * @param on
+     *            Object id number
+     * @param nl
+     *            Number of links
+     * @param t
+     *            Type of the object
+     * @param mt
+     *            Modification time
+     * @param len
+     *            Length of link
+     **/
+    public void setGroupInfo(long[] fn, long[] on, int nl, int t, long mt,
+            int len) {
+        fileno = fn;
+        objno = on;
+        nlink = nl;
+        type = t;
+        mtime = mt;
+        linklen = len;
+    }
+
+    /** Resets all the group information to defaults. */
+    public void reset() {
+        fileno[0] = 0;
+        fileno[1] = 0;
+        objno[0] = 0;
+        objno[1] = 0;
+        nlink = -1;
+        type = -1;
+        mtime = 0;
+        linklen = 0;
+    }
+
+    /* accessors */
+    public long[] getFileno() {
+        return fileno;
+    }
+
+    public long[] getObjno() {
+        return objno;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public int getNlink() {
+        return nlink;
+    }
+
+    public long getMtime() {
+        return mtime;
+    }
+
+    public int getLinklen() {
+        return linklen;
+    }
+
+    /**
+     * The fileno and objno fields contain four values which uniquely identify
+     * an object among those HDF5 files.
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof HDF5GroupInfo)) {
+            return false;
+        }
+
+        HDF5GroupInfo target = (HDF5GroupInfo) obj;
+        if ((fileno[0] == target.fileno[0]) && (fileno[1] == target.fileno[1])
+                && (objno[0] == target.objno[0])
+                && (objno[1] == target.objno[1])) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Returns the object id.
+     *
+     * @return the object id
+     */
+    public long getOID() {
+        return objno[0];
+    }
+
+    /**
+     * /** Converts this object to a String representation.
+     *
+     * @return a string representation of this object
+     */
+    @Override
+    public String toString() {
+        String fileStr = "fileno=null";
+        String objStr = "objno=null";
+
+        if (fileno != null) {
+            fileStr = "fileno[0]=" + fileno[0] + ",fileno[1]=" + fileno[1];
+        }
+
+        if (objno != null) {
+            objStr = "objno[0]=" + objno[0] + ",objno[1]=" + objno[1];
+        }
+
+        return getClass().getName() + "[" + fileStr + "," + objStr + ",type="
+                + type + ",nlink=" + nlink + ",mtime=" + mtime + ",linklen="
+                + linklen + "]";
+    }
+
+}
diff --git a/java/src/hdf/hdf5lib/HDFArray.java b/java/src/hdf/hdf5lib/HDFArray.java
new file mode 100644
index 0000000..55c19e4
--- /dev/null
+++ b/java/src/hdf/hdf5lib/HDFArray.java
@@ -0,0 +1,1096 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+package hdf.hdf5lib;
+
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5JavaException;
+
+/**
+ * This is a class for handling multidimensional arrays for HDF.
+ * <p>
+ * The purpose is to allow the storage and retrieval of arbitrary array types
+ * containing scientific data.
+ * <p>
+ * The methods support the conversion of an array to and from Java to a
+ * one-dimensional array of bytes suitable for I/O by the C library.
+ * <p>
+ * This class heavily uses the <a
+ * href="./hdf.hdf5lib.HDFNativeData.html">HDFNativeData</a> class to
+ * convert between Java and C representations.
+ */
+
+public class HDFArray {
+
+    private Object _theArray = null;
+    private ArrayDescriptor _desc = null;
+    private byte[] _barray = null;
+
+    // public HDFArray() {}
+
+    /**
+     * The input must be a Java Array (possibly multidimensional) of primitive
+     * numbers or sub-classes of Number.
+     * <p>
+     * The input is analysed to determine the number of dimensions and size of
+     * each dimension, as well as the type of the elements.
+     * <p>
+     * The description is saved in private variables, and used to convert data.
+     *
+     * @param anArray
+     *            The array object.
+     *
+     * @exception hdf.hdf5lib.exceptions.HDF5Exception
+     *                object is not an array.
+     */
+    public HDFArray(Object anArray) throws HDF5Exception {
+
+        if (anArray == null) {
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: array is null?: ");
+        }
+        Class tc = anArray.getClass();
+        if (tc.isArray() == false) {
+            /* exception: not an array */
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: not an array?: ");
+            throw (ex);
+        }
+        _theArray = anArray;
+        _desc = new ArrayDescriptor(_theArray);
+
+        /* extra error checking -- probably not needed */
+        if (_desc == null) {
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: internal error: array description failed?: ");
+            throw (ex);
+        }
+    }
+
+    /**
+     * Allocate a one-dimensional array of bytes sufficient to store the array.
+     *
+     * @return A one-D array of bytes, filled with zeroes. The bytes are
+     *         sufficient to hold the data of the Array passed to the
+     *         constructor.
+     * @exception hdf.hdf5lib.exceptions.HDF5JavaException
+     *                Allocation failed.
+     */
+
+    public byte[] emptyBytes() throws HDF5JavaException {
+        byte[] b = null;
+
+        if ((ArrayDescriptor.dims == 1) && (ArrayDescriptor.NT == 'B')) {
+            b = (byte[]) _theArray;
+        }
+        else {
+            b = new byte[ArrayDescriptor.totalSize];
+        }
+        if (b == null) {
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: emptyBytes: allocation failed");
+            throw (ex);
+        }
+        return (b);
+    }
+
+    /**
+     * Given a Java array of numbers, convert it to a one-dimensional array of
+     * bytes in correct native order.
+     *
+     * @return A one-D array of bytes, constructed from the Array passed to the
+     *         constructor.
+     * @exception hdf.hdf5lib.exceptions.HDF5JavaException
+     *                the object not an array or other internal error.
+     */
+    public byte[] byteify() throws HDF5JavaException {
+
+        if (_barray != null) {
+            return _barray;
+        }
+
+        if (_theArray == null) {
+            /* exception: not an array */
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: byteify not an array?: ");
+            throw (ex);
+        }
+
+        if (ArrayDescriptor.dims == 1) {
+            /* special case */
+            if (ArrayDescriptor.NT == 'B') {
+                /* really special case! */
+                _barray = (byte[]) _theArray;
+                return _barray;
+            }
+            else {
+                try {
+                    _barray = new byte[ArrayDescriptor.totalSize];
+
+                    byte[] therow;
+                    if (ArrayDescriptor.NT == 'I') {
+                        therow = HDFNativeData.intToByte(0,
+                                ArrayDescriptor.dimlen[1], (int[]) _theArray);
+                    }
+                    else if (ArrayDescriptor.NT == 'S') {
+                        therow = HDFNativeData.shortToByte(0,
+                                ArrayDescriptor.dimlen[1], (short[]) _theArray);
+                    }
+                    else if (ArrayDescriptor.NT == 'F') {
+                        therow = HDFNativeData.floatToByte(0,
+                                ArrayDescriptor.dimlen[1], (float[]) _theArray);
+                    }
+                    else if (ArrayDescriptor.NT == 'J') {
+                        therow = HDFNativeData.longToByte(0,
+                                ArrayDescriptor.dimlen[1], (long[]) _theArray);
+                    }
+                    else if (ArrayDescriptor.NT == 'D') {
+                        therow = HDFNativeData
+                                .doubleToByte(0, ArrayDescriptor.dimlen[1],
+                                        (double[]) _theArray);
+                    }
+                    else if (ArrayDescriptor.NT == 'L') {
+                        if (ArrayDescriptor.className.equals("java.lang.Byte")) {
+                            therow = ByteObjToByte((Byte[]) _theArray);
+                        }
+                        else if (ArrayDescriptor.className
+                                .equals("java.lang.Integer")) {
+                            therow = IntegerToByte((Integer[]) _theArray);
+                        }
+                        else if (ArrayDescriptor.className
+                                .equals("java.lang.Short")) {
+                            therow = ShortToByte((Short[]) _theArray);
+                        }
+                        else if (ArrayDescriptor.className
+                                .equals("java.lang.Float")) {
+                            therow = FloatObjToByte((Float[]) _theArray);
+                        }
+                        else if (ArrayDescriptor.className
+                                .equals("java.lang.Double")) {
+                            therow = DoubleObjToByte((Double[]) _theArray);
+                        }
+                        else if (ArrayDescriptor.className
+                                .equals("java.lang.Long")) {
+                            therow = LongObjToByte((Long[]) _theArray);
+                        }
+                        else {
+                            HDF5JavaException ex = new HDF5JavaException(
+                                    "HDFArray: unknown type of Object?");
+                            throw (ex);
+                        }
+                    }
+                    else {
+                        HDF5JavaException ex = new HDF5JavaException(
+                                "HDFArray: unknown type of data?");
+                        throw (ex);
+                    }
+                    System
+                            .arraycopy(
+                                    therow,
+                                    0,
+                                    _barray,
+                                    0,
+                                    (ArrayDescriptor.dimlen[1] * ArrayDescriptor.NTsize));
+                    return _barray;
+                }
+                catch (OutOfMemoryError err) {
+                    HDF5JavaException ex = new HDF5JavaException(
+                            "HDFArray: byteify array too big?");
+                    throw (ex);
+                }
+            }
+        }
+
+        try {
+            _barray = new byte[ArrayDescriptor.totalSize];
+        }
+        catch (OutOfMemoryError err) {
+            HDF5JavaException ex = new HDF5JavaException(
+                    "HDFArray: byteify array too big?");
+            throw (ex);
+        }
+
+        Object oo = _theArray;
+        int n = 0; /* the current byte */
+        int index = 0;
+        int i;
+        while (n < ArrayDescriptor.totalSize) {
+            oo = ArrayDescriptor.objs[0];
+            index = n / ArrayDescriptor.bytetoindex[0];
+            index %= ArrayDescriptor.dimlen[0];
+            for (i = 0; i < (ArrayDescriptor.dims); i++) {
+                index = n / ArrayDescriptor.bytetoindex[i];
+                index %= ArrayDescriptor.dimlen[i];
+
+                if (index == ArrayDescriptor.currentindex[i]) {
+                    /* then use cached copy */
+                    oo = ArrayDescriptor.objs[i];
+                }
+                else {
+                    /* check range of index */
+                    if (index > (ArrayDescriptor.dimlen[i] - 1)) {
+                        throw new java.lang.IndexOutOfBoundsException(
+                                "HDFArray: byteify index OOB?");
+                    }
+                    oo = java.lang.reflect.Array.get(oo, index);
+                    ArrayDescriptor.currentindex[i] = index;
+                    ArrayDescriptor.objs[i] = oo;
+                }
+            }
+
+            /* byte-ify */
+            byte arow[];
+            try {
+                if (ArrayDescriptor.NT == 'J') {
+                    arow = HDFNativeData
+                            .longToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (long[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    arow = HDFNativeData
+                            .longToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (long[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                }
+                else if (ArrayDescriptor.NT == 'I') {
+                    arow = HDFNativeData
+                            .intToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (int[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                }
+                else if (ArrayDescriptor.NT == 'S') {
+                    arow = HDFNativeData
+                            .shortToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (short[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                }
+                else if (ArrayDescriptor.NT == 'B') {
+                    arow = (byte[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1];
+                }
+                else if (ArrayDescriptor.NT == 'F') {
+                    /* 32 bit float */
+                    arow = HDFNativeData
+                            .floatToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (float[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                }
+                else if (ArrayDescriptor.NT == 'D') {
+                    /* 64 bit float */
+                    arow = HDFNativeData
+                            .doubleToByte(
+                                    0,
+                                    ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                    (double[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                }
+                else if (ArrayDescriptor.NT == 'L') {
+                    if (ArrayDescriptor.className.equals("java.lang.Byte")) {
+                        arow = ByteObjToByte((Byte[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Integer")) {
+                        arow = IntegerToByte((Integer[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Short")) {
+                        arow = ShortToByte((Short[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Float")) {
+                        arow = FloatObjToByte((Float[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Double")) {
+                        arow = DoubleObjToByte((Double[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else if (ArrayDescriptor.className.equals("java.lang.Long")) {
+                        arow = LongObjToByte((Long[]) ArrayDescriptor.objs[ArrayDescriptor.dims - 1]);
+                    }
+                    else {
+                        HDF5JavaException ex = new HDF5JavaException(
+                                "HDFArray: byteify Object type not implemented?");
+                        throw (ex);
+                    }
+                }
+                else {
+                    HDF5JavaException ex = new HDF5JavaException(
+                            "HDFArray: byteify unknown type not implemented?");
+                    throw (ex);
+                }
+                System
+                        .arraycopy(
+                                arow,
+                                0,
+                                _barray,
+                                n,
+                                (ArrayDescriptor.dimlen[ArrayDescriptor.dims] * ArrayDescriptor.NTsize));
+                n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+            }
+            catch (OutOfMemoryError err) {
+                HDF5JavaException ex = new HDF5JavaException(
+                        "HDFArray: byteify array too big?");
+                throw (ex);
+            }
+        }
+        /* assert: the whole array is completed--currentindex should == len - 1 */
+
+        /* error checks */
+
+        if (n < ArrayDescriptor.totalSize) {
+            throw new java.lang.InternalError(new String(
+                    "HDFArray::byteify: Panic didn't complete all input data: n=  "
+                            + n + " size = " + ArrayDescriptor.totalSize));
+        }
+        for (i = 0; i < ArrayDescriptor.dims; i++) {
+            if (ArrayDescriptor.currentindex[i] != ArrayDescriptor.dimlen[i] - 1) {
+                throw new java.lang.InternalError(new String(
+                        "Panic didn't complete all data: currentindex[" + i
+                                + "] = " + ArrayDescriptor.currentindex[i]
+                                + " (should be "
+                                + (ArrayDescriptor.dimlen[i] - 1) + " ?)"));
+            }
+        }
+        return _barray;
+    }
+
+    /**
+     * Given a one-dimensional array of bytes representing numbers, convert it
+     * to a java array of the shape and size passed to the constructor.
+     *
+     * @param bytes
+     *            The bytes to construct the Array.
+     * @return An Array (possibly multidimensional) of primitive or number
+     *         objects.
+     * @exception hdf.hdf5lib.exceptions.HDF5JavaException
+     *                the object not an array or other internal error.
+     */
+    public Object arrayify(byte[] bytes) throws HDF5JavaException {
+
+        if (_theArray == null) {
+            /* exception: not an array */
+            HDF5JavaException ex = new HDF5JavaException(
+                    "arrayify: not an array?: ");
+            throw (ex);
+        }
+
+        if (java.lang.reflect.Array.getLength(bytes) != ArrayDescriptor.totalSize) {
+            /* exception: array not right size */
+            HDF5JavaException ex = new HDF5JavaException(
+                    "arrayify: array is wrong size?: ");
+            throw (ex);
+        }
+        _barray = bytes; /* hope that the bytes are correct.... */
+        if (ArrayDescriptor.dims == 1) {
+            /* special case */
+            /* 2 data copies here! */
+            try {
+                if (ArrayDescriptor.NT == 'I') {
+                    int[] x = HDFNativeData.byteToInt(_barray);
+                    System.arraycopy(x, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'S') {
+                    short[] x = HDFNativeData.byteToShort(_barray);
+                    System.arraycopy(x, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'F') {
+                    float x[] = HDFNativeData.byteToFloat(_barray);
+                    System.arraycopy(x, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'J') {
+                    long x[] = HDFNativeData.byteToLong(_barray);
+                    System.arraycopy(x, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'D') {
+                    double x[] = HDFNativeData.byteToDouble(_barray);
+                    System.arraycopy(x, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'B') {
+                    System.arraycopy(_barray, 0, _theArray, 0,
+                            ArrayDescriptor.dimlen[1]);
+                    return _theArray;
+                }
+                else if (ArrayDescriptor.NT == 'L') {
+                    if (ArrayDescriptor.className.equals("java.lang.Byte")) {
+                        Byte I[] = ByteToByteObj(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Integer")) {
+                        Integer I[] = ByteToInteger(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Short")) {
+                        Short I[] = ByteToShort(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Float")) {
+                        Float I[] = ByteToFloatObj(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Double")) {
+                        Double I[] = ByteToDoubleObj(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else if (ArrayDescriptor.className.equals("java.lang.Long")) {
+                        Long I[] = ByteToLongObj(_barray);
+                        System.arraycopy(I, 0, _theArray, 0,
+                                ArrayDescriptor.dimlen[1]);
+                        return _theArray;
+                    }
+                    else {
+                        HDF5JavaException ex = new HDF5JavaException(
+                                "arrayify:  Object type not implemented yet...");
+                        throw (ex);
+                    }
+                }
+                else {
+                    HDF5JavaException ex = new HDF5JavaException(
+                            "arrayify:  unknown type not implemented yet...");
+                    throw (ex);
+                }
+            }
+            catch (OutOfMemoryError err) {
+                HDF5JavaException ex = new HDF5JavaException(
+                        "HDFArray: arrayify array too big?");
+                throw (ex);
+            }
+        }
+        /* Assert dims >= 2 */
+
+        Object oo = _theArray;
+        int n = 0; /* the current byte */
+        int index = 0;
+        int i;
+        while (n < ArrayDescriptor.totalSize) {
+            oo = ArrayDescriptor.objs[0];
+            index = n / ArrayDescriptor.bytetoindex[0];
+            index %= ArrayDescriptor.dimlen[0];
+            for (i = 0; i < (ArrayDescriptor.dims); i++) {
+                index = n / ArrayDescriptor.bytetoindex[i];
+                index %= ArrayDescriptor.dimlen[i];
+
+                if (index == ArrayDescriptor.currentindex[i]) {
+                    /* then use cached copy */
+                    oo = ArrayDescriptor.objs[i];
+                }
+                else {
+                    /* check range of index */
+                    if (index > (ArrayDescriptor.dimlen[i] - 1)) {
+                        System.out.println("out of bounds?");
+                        return null;
+                    }
+                    oo = java.lang.reflect.Array.get(oo, index);
+                    ArrayDescriptor.currentindex[i] = index;
+                    ArrayDescriptor.objs[i] = oo;
+                }
+            }
+
+            /* array-ify */
+            try {
+                if (ArrayDescriptor.NT == 'J') {
+                    long[] arow = HDFNativeData.byteToLong(n,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                            _barray);
+                    java.lang.reflect.Array
+                            .set(
+                                    ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                    (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                    arow);
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                    ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                }
+                else if (ArrayDescriptor.NT == 'I') {
+                    int[] arow = HDFNativeData.byteToInt(n,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                            _barray);
+                    java.lang.reflect.Array
+                            .set(
+                                    ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                    (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                    arow);
+
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                    ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                }
+                else if (ArrayDescriptor.NT == 'S') {
+                    short[] arow = HDFNativeData.byteToShort(n,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                            _barray);
+                    java.lang.reflect.Array
+                            .set(
+                                    ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                    (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                    arow);
+
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                    ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                }
+                else if (ArrayDescriptor.NT == 'B') {
+                    System.arraycopy(_barray, n,
+                            ArrayDescriptor.objs[ArrayDescriptor.dims - 1], 0,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims]);
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                }
+                else if (ArrayDescriptor.NT == 'F') {
+                    float arow[] = HDFNativeData.byteToFloat(n,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                            _barray);
+                    java.lang.reflect.Array
+                            .set(
+                                    ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                    (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                    arow);
+
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                    ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                }
+                else if (ArrayDescriptor.NT == 'D') {
+                    double[] arow = HDFNativeData.byteToDouble(n,
+                            ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                            _barray);
+                    java.lang.reflect.Array
+                            .set(
+                                    ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                    (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                    arow);
+
+                    n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                    ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                }
+                else if (ArrayDescriptor.NT == 'L') {
+                    if (ArrayDescriptor.className.equals("java.lang.Byte")) {
+                        Byte I[] = ByteToByteObj(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Integer")) {
+                        Integer I[] = ByteToInteger(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Short")) {
+                        Short I[] = ByteToShort(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Float")) {
+                        Float I[] = ByteToFloatObj(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else if (ArrayDescriptor.className
+                            .equals("java.lang.Double")) {
+                        Double I[] = ByteToDoubleObj(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else if (ArrayDescriptor.className.equals("java.lang.Long")) {
+                        Long I[] = ByteToLongObj(n,
+                                ArrayDescriptor.dimlen[ArrayDescriptor.dims],
+                                _barray);
+                        java.lang.reflect.Array
+                                .set(
+                                        ArrayDescriptor.objs[ArrayDescriptor.dims - 2],
+                                        (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]),
+                                        I);
+
+                        n += ArrayDescriptor.bytetoindex[ArrayDescriptor.dims - 1];
+                        ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1]++;
+                    }
+                    else {
+                        HDF5JavaException ex = new HDF5JavaException(
+                                "HDFArray: unsupported Object type: "
+                                        + ArrayDescriptor.NT);
+                        throw (ex);
+                    }
+                }
+                else {
+                    HDF5JavaException ex = new HDF5JavaException(
+                            "HDFArray: unknown or unsupported type: "
+                                    + ArrayDescriptor.NT);
+                    throw (ex);
+                }
+            }
+            catch (OutOfMemoryError err) {
+                HDF5JavaException ex = new HDF5JavaException(
+                        "HDFArray: arrayify array too big?");
+                throw (ex);
+            }
+
+        }
+
+        /* assert: the whole array is completed--currentindex should == len - 1 */
+
+        /* error checks */
+
+        if (n < ArrayDescriptor.totalSize) {
+            throw new java.lang.InternalError(new String(
+                    "HDFArray::arrayify Panic didn't complete all input data: n=  "
+                            + n + " size = " + ArrayDescriptor.totalSize));
+        }
+        for (i = 0; i <= ArrayDescriptor.dims - 2; i++) {
+            if (ArrayDescriptor.currentindex[i] != ArrayDescriptor.dimlen[i] - 1) {
+                throw new java.lang.InternalError(new String(
+                        "HDFArray::arrayify Panic didn't complete all data: currentindex["
+                                + i + "] = " + ArrayDescriptor.currentindex[i]
+                                + " (should be "
+                                + (ArrayDescriptor.dimlen[i] - 1) + "?"));
+            }
+        }
+        if (ArrayDescriptor.NT != 'B') {
+            if (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1] != ArrayDescriptor.dimlen[ArrayDescriptor.dims - 1]) {
+                throw new java.lang.InternalError(new String(
+                        "HDFArray::arrayify Panic didn't complete all data: currentindex["
+                                + i + "] = " + ArrayDescriptor.currentindex[i]
+                                + " (should be " + (ArrayDescriptor.dimlen[i])
+                                + "?"));
+            }
+        }
+        else {
+            if (ArrayDescriptor.currentindex[ArrayDescriptor.dims - 1] != (ArrayDescriptor.dimlen[ArrayDescriptor.dims - 1] - 1)) {
+                throw new java.lang.InternalError(new String(
+                        "HDFArray::arrayify Panic didn't complete all data: currentindex["
+                                + i + "] = " + ArrayDescriptor.currentindex[i]
+                                + " (should be "
+                                + (ArrayDescriptor.dimlen[i] - 1) + "?"));
+            }
+        }
+
+        return _theArray;
+    }
+
+    private byte[] IntegerToByte(Integer in[]) {
+        int nelems = java.lang.reflect.Array.getLength(in);
+        int[] out = new int[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].intValue();
+        }
+        return HDFNativeData.intToByte(0, nelems, out);
+    }
+
+    private Integer[] ByteToInteger(byte[] bin) {
+        int in[] = HDFNativeData.byteToInt(bin);
+        int nelems = java.lang.reflect.Array.getLength(in);
+        Integer[] out = new Integer[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Integer(in[i]);
+        }
+        return out;
+    }
+
+    private Integer[] ByteToInteger(int start, int len, byte[] bin) {
+        int in[] = HDFNativeData.byteToInt(start, len, bin);
+        int nelems = java.lang.reflect.Array.getLength(in);
+        Integer[] out = new Integer[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Integer(in[i]);
+        }
+        return out;
+    }
+
+    private byte[] ShortToByte(Short in[]) {
+        int nelems = java.lang.reflect.Array.getLength(in);
+        short[] out = new short[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].shortValue();
+        }
+        return HDFNativeData.shortToByte(0, nelems, out);
+    }
+
+    private Short[] ByteToShort(byte[] bin) {
+        short in[] = HDFNativeData.byteToShort(bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Short[] out = new Short[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Short(in[i]);
+        }
+        return out;
+    }
+
+    private Short[] ByteToShort(int start, int len, byte[] bin) {
+        short in[] = (short[]) HDFNativeData.byteToShort(start, len, bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Short[] out = new Short[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Short(in[i]);
+        }
+        return out;
+    }
+
+    private byte[] ByteObjToByte(Byte in[]) {
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        byte[] out = new byte[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].byteValue();
+        }
+        return out;
+    }
+
+    private Byte[] ByteToByteObj(byte[] bin) {
+        int nelems = java.lang.reflect.Array.getLength((Object) bin);
+        Byte[] out = new Byte[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Byte(bin[i]);
+        }
+        return out;
+    }
+
+    private Byte[] ByteToByteObj(int start, int len, byte[] bin) {
+        Byte[] out = new Byte[len];
+
+        for (int i = 0; i < len; i++) {
+            out[i] = new Byte(bin[i]);
+        }
+        return out;
+    }
+
+    private byte[] FloatObjToByte(Float in[]) {
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        float[] out = new float[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].floatValue();
+        }
+        return HDFNativeData.floatToByte(0, nelems, out);
+    }
+
+    private Float[] ByteToFloatObj(byte[] bin) {
+        float in[] = (float[]) HDFNativeData.byteToFloat(bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Float[] out = new Float[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Float(in[i]);
+        }
+        return out;
+    }
+
+    private Float[] ByteToFloatObj(int start, int len, byte[] bin) {
+        float in[] = (float[]) HDFNativeData.byteToFloat(start, len, bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Float[] out = new Float[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Float(in[i]);
+        }
+        return out;
+    }
+
+    private byte[] DoubleObjToByte(Double in[]) {
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        double[] out = new double[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].doubleValue();
+        }
+        return HDFNativeData.doubleToByte(0, nelems, out);
+    }
+
+    private Double[] ByteToDoubleObj(byte[] bin) {
+        double in[] = (double[]) HDFNativeData.byteToDouble(bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Double[] out = new Double[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Double(in[i]);
+        }
+        return out;
+    }
+
+    private Double[] ByteToDoubleObj(int start, int len, byte[] bin) {
+        double in[] = (double[]) HDFNativeData.byteToDouble(start, len, bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Double[] out = new Double[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Double(in[i]);
+        }
+        return out;
+    }
+
+    private byte[] LongObjToByte(Long in[]) {
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        long[] out = new long[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = in[i].longValue();
+        }
+        return HDFNativeData.longToByte(0, nelems, out);
+    }
+
+    private Long[] ByteToLongObj(byte[] bin) {
+        long in[] = (long[]) HDFNativeData.byteToLong(bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Long[] out = new Long[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Long(in[i]);
+        }
+        return out;
+    }
+
+    private Long[] ByteToLongObj(int start, int len, byte[] bin) {
+        long in[] = (long[]) HDFNativeData.byteToLong(start, len, bin);
+        int nelems = java.lang.reflect.Array.getLength((Object) in);
+        Long[] out = new Long[nelems];
+
+        for (int i = 0; i < nelems; i++) {
+            out[i] = new Long(in[i]);
+        }
+        return out;
+    }
+}
+
+/**
+ * This private class is used by HDFArray to discover the shape and type of an
+ * arbitrary array.
+ * <p>
+ * We use java.lang.reflection here.
+ */
+class ArrayDescriptor {
+
+    static String theType = "";
+    static Class theClass = null;
+    static int[] dimlen = null;
+    static int[] dimstart = null;
+    static int[] currentindex = null;
+    static int[] bytetoindex = null;
+    static int totalSize = 0;
+    static Object[] objs = null;
+    static char NT = ' '; /* must be B,S,I,L,F,D, else error */
+    static int NTsize = 0;
+    static int dims = 0;
+    static String className;
+
+    public ArrayDescriptor(Object anArray) throws HDF5Exception {
+
+        Class tc = anArray.getClass();
+        if (tc.isArray() == false) {
+            /* exception: not an array */
+            HDF5Exception ex = new HDF5JavaException(
+                    "ArrayDescriptor: not an array?: ");
+            throw (ex);
+        }
+
+        theClass = tc;
+
+        /*
+         * parse the type descriptor to discover the shape of the array
+         */
+        String ss = tc.toString();
+        theType = ss;
+        int n = 6;
+        dims = 0;
+        char c = ' ';
+        while (n < ss.length()) {
+            c = ss.charAt(n);
+            n++;
+            if (c == '[') {
+                dims++;
+            }
+        }
+
+        String css = ss.substring(ss.lastIndexOf('[') + 1);
+        Class compC = tc.getComponentType();
+        String cs = compC.toString();
+        NT = c; /* must be B,S,I,L,F,D, else error */
+        if (NT == 'B') {
+            NTsize = 1;
+        }
+        else if (NT == 'S') {
+            NTsize = 2;
+        }
+        else if ((NT == 'I') || (NT == 'F')) {
+            NTsize = 4;
+        }
+        else if ((NT == 'J') || (NT == 'D')) {
+            NTsize = 8;
+        }
+        else if (css.startsWith("Ljava.lang.Byte")) {
+            NT = 'L';
+            className = "java.lang.Byte";
+            NTsize = 1;
+        }
+        else if (css.startsWith("Ljava.lang.Short")) {
+            NT = 'L';
+            className = "java.lang.Short";
+            NTsize = 2;
+        }
+        else if (css.startsWith("Ljava.lang.Integer")) {
+            NT = 'L';
+            className = "java.lang.Integer";
+            NTsize = 4;
+        }
+        else if (css.startsWith("Ljava.lang.Float")) {
+            NT = 'L';
+            className = "java.lang.Float";
+            NTsize = 4;
+        }
+        else if (css.startsWith("Ljava.lang.Double")) {
+            NT = 'L';
+            className = "java.lang.Double";
+            NTsize = 8;
+        }
+        else if (css.startsWith("Ljava.lang.Long")) {
+            NT = 'L';
+            className = "java.lang.Long";
+            NTsize = 8;
+        }
+        else if (css.startsWith("Ljava.lang.String")) {
+            throw new HDF5JavaException(new String(
+                    "ArrayDesciptor: Error:  String array not supported yet"));
+        }
+        else {
+            /*
+             * exception: not a numeric type
+             */
+            throw new HDF5JavaException(new String(
+                    "ArrayDesciptor: Error:  array is not numeric (type is "
+                            + css + ") ?"));
+        }
+
+        /* fill in the table */
+        dimlen = new int[dims + 1];
+        dimstart = new int[dims + 1];
+        currentindex = new int[dims + 1];
+        bytetoindex = new int[dims + 1];
+        objs = new Object[dims + 1];
+
+        Object o = anArray;
+        objs[0] = o;
+        dimlen[0] = 1;
+        dimstart[0] = 0;
+        currentindex[0] = 0;
+        int i;
+        for (i = 1; i <= dims; i++) {
+            dimlen[i] = java.lang.reflect.Array.getLength((Object) o);
+            o = java.lang.reflect.Array.get((Object) o, 0);
+            objs[i] = o;
+            dimstart[i] = 0;
+            currentindex[i] = 0;
+        }
+
+        int j;
+        int dd;
+        bytetoindex[dims] = NTsize;
+        for (i = dims; i >= 0; i--) {
+            dd = NTsize;
+            for (j = i; j < dims; j++) {
+                dd *= dimlen[j + 1];
+            }
+            bytetoindex[i] = dd;
+        }
+
+        totalSize = bytetoindex[0];
+    }
+
+    /**
+     * Debug dump
+     */
+    public void dumpInfo() {
+        System.out.println("Type: " + theType);
+        System.out.println("Class: " + theClass);
+        System.out.println("NT: " + NT + " NTsize: " + NTsize);
+        System.out.println("Array has " + dims + " dimensions (" + totalSize
+                + " bytes)");
+        int i;
+        for (i = 0; i <= dims; i++) {
+            Class tc = objs[i].getClass();
+            String ss = tc.toString();
+            System.out.println(i + ":  start " + dimstart[i] + ": len "
+                    + dimlen[i] + " current " + currentindex[i]
+                    + " bytetoindex " + bytetoindex[i] + " object " + objs[i]
+                    + " otype " + ss);
+        }
+    }
+}
diff --git a/java/src/hdf/hdf5lib/HDFNativeData.java b/java/src/hdf/hdf5lib/HDFNativeData.java
new file mode 100644
index 0000000..66929fb
--- /dev/null
+++ b/java/src/hdf/hdf5lib/HDFNativeData.java
@@ -0,0 +1,481 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib;
+
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5JavaException;
+
+/**
+ * This class encapsulates native methods to deal with arrays of numbers,
+ * converting from numbers to bytes and bytes to numbers.
+ * <p>
+ * These routines are used by class <b>HDFArray</b> to pass data to and from the
+ * HDF-5 library.
+ * <p>
+ * Methods xxxToByte() convert a Java array of primitive numbers (int, short,
+ * ...) to a Java array of bytes. Methods byteToXxx() convert from a Java array
+ * of bytes into a Java array of primitive numbers (int, short, ...)
+ * <p>
+ * Variant interfaces convert a section of an array, and also can convert to
+ * sub-classes of Java <b>Number</b>.
+ * <P>
+ * <b>See also:</b> hdf.hdf5lib.HDFArray.
+ */
+
+public class HDFNativeData {
+
+    /**
+     * Convert an array of bytes into an array of ints
+     *
+     * @param data
+     *            The input array of bytes
+     * @return an array of int
+     */
+    public synchronized static native int[] byteToInt(byte[] data);
+
+    /**
+     * Convert an array of bytes into an array of floats
+     *
+     * @param data
+     *            The input array of bytes
+     * @return an array of float
+     */
+    public synchronized static native float[] byteToFloat(byte[] data);
+
+    /**
+     * Convert an array of bytes into an array of shorts
+     *
+     * @param data
+     *            The input array of bytes
+     * @return an array of short
+     */
+    public synchronized static native short[] byteToShort(byte[] data);
+
+    /**
+     * Convert an array of bytes into an array of long
+     *
+     * @param data
+     *            The input array of bytes
+     * @return an array of long
+     */
+    /*
+     * does this really work? C 'long' is 32 bits, Java 'long' is 64-bits. What
+     * does this routine actually do?
+     */
+    public synchronized static native long[] byteToLong(byte[] data);
+
+    /**
+     * Convert an array of bytes into an array of double
+     *
+     * @param data
+     *            The input array of bytes
+     * @return an array of double
+     */
+    public synchronized static native double[] byteToDouble(byte[] data);
+
+    /**
+     * Convert a range from an array of bytes into an array of int
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param len
+     *            The number of 'int' to convert
+     * @param data
+     *            The input array of bytes
+     * @return an array of 'len' int
+     */
+    public synchronized static native int[] byteToInt(int start, int len,
+            byte[] data);
+
+    /**
+     * Convert 4 bytes from an array of bytes into a single int
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param data
+     *            The input array of bytes
+     * @return The integer value of the bytes.
+     */
+    public synchronized static int byteToInt(byte[] data, int start) {
+        int[] ival = new int[1];
+        ival = byteToInt(start, 1, data);
+        return (ival[0]);
+    }
+
+    /**
+     * Convert a range from an array of bytes into an array of short
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param len
+     *            The number of 'short' to convert
+     * @param data
+     *            The input array of bytes
+     * @return an array of 'len' short
+     */
+    public synchronized static native short[] byteToShort(int start, int len,
+            byte[] data);
+
+    /**
+     * Convert 2 bytes from an array of bytes into a single short
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param data
+     *            The input array of bytes
+     * @return The short value of the bytes.
+     */
+    public synchronized static short byteToShort(byte[] data, int start) {
+        short[] sval = new short[1];
+        sval = byteToShort(start, 1, data);
+        return (sval[0]);
+    }
+
+    /**
+     * Convert a range from an array of bytes into an array of float
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param len
+     *            The number of 'float' to convert
+     * @param data
+     *            The input array of bytes
+     * @return an array of 'len' float
+     */
+    public synchronized static native float[] byteToFloat(int start, int len,
+            byte[] data);
+
+    /**
+     * Convert 4 bytes from an array of bytes into a single float
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param data
+     *            The input array of bytes
+     * @return The float value of the bytes.
+     */
+    public synchronized static float byteToFloat(byte[] data, int start) {
+        float[] fval = new float[1];
+        fval = byteToFloat(start, 1, data);
+        return (fval[0]);
+    }
+
+    /**
+     * Convert a range from an array of bytes into an array of long
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param len
+     *            The number of 'long' to convert
+     * @param data
+     *            The input array of bytes
+     * @return an array of 'len' long
+     */
+    public synchronized static native long[] byteToLong(int start, int len,
+            byte[] data);
+
+    /**
+     * Convert 8 bytes from an array of bytes into a single long
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param data
+     *            The input array of bytes
+     * @return The long value of the bytes.
+     */
+    public synchronized static long byteToLong(byte[] data, int start) {
+        long[] lval = new long[1];
+        lval = byteToLong(start, 1, data);
+        return (lval[0]);
+    }
+
+    /**
+     * Convert a range from an array of bytes into an array of double
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param len
+     *            The number of 'double' to convert
+     * @param data
+     *            The input array of bytes
+     * @return an array of 'len' double
+     */
+    public synchronized static native double[] byteToDouble(int start, int len,
+            byte[] data);
+
+    /**
+     * Convert 8 bytes from an array of bytes into a single double
+     *
+     * @param start
+     *            The position in the input array of bytes to start
+     * @param data
+     *            The input array of bytes
+     * @return The double value of the bytes.
+     */
+    public synchronized static double byteToDouble(byte[] data, int start) {
+        double[] dval = new double[1];
+        dval = byteToDouble(start, 1, data);
+        return (dval[0]);
+    }
+
+    /**
+     * Convert a range from an array of int into an array of bytes.
+     *
+     * @param start
+     *            The position in the input array of int to start
+     * @param len
+     *            The number of 'int' to convert
+     * @param data
+     *            The input array of int
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] intToByte(int start, int len,
+            int[] data);
+
+    /**
+     * Convert a range from an array of short into an array of bytes.
+     *
+     * @param start
+     *            The position in the input array of int to start
+     * @param len
+     *            The number of 'short' to convert
+     * @param data
+     *            The input array of short
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] shortToByte(int start, int len,
+            short[] data);
+
+    /**
+     * Convert a range from an array of float into an array of bytes.
+     *
+     * @param start
+     *            The position in the input array of int to start
+     * @param len
+     *            The number of 'float' to convert
+     * @param data
+     *            The input array of float
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] floatToByte(int start, int len,
+            float[] data);
+
+    /**
+     * Convert a range from an array of long into an array of bytes.
+     *
+     * @param start
+     *            The position in the input array of int to start
+     * @param len
+     *            The number of 'long' to convert
+     * @param data
+     *            The input array of long
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] longToByte(int start, int len,
+            long[] data);
+
+    /**
+     * Convert a range from an array of double into an array of bytes.
+     *
+     * @param start
+     *            The position in the input array of double to start
+     * @param len
+     *            The number of 'double' to convert
+     * @param data
+     *            The input array of double
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] doubleToByte(int start, int len,
+            double[] data);
+
+    /**
+     * Convert a single byte into an array of one byte.
+     * <p>
+     * (This is a trivial method.)
+     *
+     * @param data
+     *            The input byte
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] byteToByte(byte data);
+
+    /**
+     * Convert a single Byte object into an array of one byte.
+     * <p>
+     * (This is an almost trivial method.)
+     *
+     * @param data
+     *            The input Byte
+     * @return an array of bytes
+     */
+    public synchronized static byte[] byteToByte(Byte data) {
+        return byteToByte(data.byteValue());
+    }
+
+    /**
+     * Convert a single int into an array of 4 bytes.
+     *
+     * @param data
+     *            The input int
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] intToByte(int data);
+
+    /**
+     * Convert a single Integer object into an array of 4 bytes.
+     *
+     * @param data
+     *            The input Integer
+     * @return an array of bytes
+     */
+    public synchronized static byte[] intToByte(Integer data) {
+        return intToByte(data.intValue());
+    }
+
+    /**
+     * Convert a single short into an array of 2 bytes.
+     *
+     * @param data
+     *            The input short
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] shortToByte(short data);
+
+    /**
+     * Convert a single Short object into an array of 2 bytes.
+     *
+     * @param data
+     *            The input Short
+     * @return an array of bytes
+     */
+    public synchronized static byte[] shortToByte(Short data) {
+        return shortToByte(data.shortValue());
+    }
+
+    /**
+     * Convert a single float into an array of 4 bytes.
+     *
+     * @param data
+     *            The input float
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] floatToByte(float data);
+
+    /**
+     * Convert a single Float object into an array of 4 bytes.
+     *
+     * @param data
+     *            The input Float
+     * @return an array of bytes
+     */
+    public synchronized static byte[] floatToByte(Float data) {
+        return floatToByte(data.floatValue());
+    };
+
+    /**
+     * Convert a single long into an array of 8 bytes.
+     *
+     * @param data
+     *            The input long
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] longToByte(long data);
+
+    /**
+     * Convert a single Long object into an array of 8 bytes.
+     *
+     * @param data
+     *            The input Long
+     * @return an array of bytes
+     */
+    public synchronized static byte[] longToByte(Long data) {
+        return longToByte(data.longValue());
+    }
+
+    /**
+     * Convert a single double into an array of 8 bytes.
+     *
+     * @param data
+     *            The input double
+     * @return an array of bytes
+     */
+    public synchronized static native byte[] doubleToByte(double data);
+
+    /**
+     * Convert a single Double object into an array of 8 bytes.
+     *
+     * @param data
+     *            The input Double
+     * @return an array of bytes
+     */
+    public synchronized static byte[] doubleToByte(Double data) {
+        return doubleToByte(data.doubleValue());
+    }
+
+    /**
+     * Create a Number object from an array of bytes.
+     *
+     * @param barray
+     *            The bytes to be converted
+     * @param obj
+     *            Input object of the desired output class. Must be a sub-class
+     *            of Number.
+     * @return A Object of the type of obj.
+     *
+     * @exception HDF5Exception
+     *                - Error unsupported type.
+     */
+    public synchronized static Object byteToNumber(byte[] barray, Object obj)
+            throws HDF5Exception {
+        Class theClass = obj.getClass();
+        String type = theClass.getName();
+        Object retobj = null;
+
+        if (type.equals("java.lang.Integer")) {
+            int[] i = hdf.hdf5lib.HDFNativeData.byteToInt(0, 1, barray);
+            retobj = new Integer(i[0]);
+        }
+        else if (type.equals("java.lang.Byte")) {
+            retobj = new Byte(barray[0]);
+        }
+        else if (type.equals("java.lang.Short")) {
+            short[] f = hdf.hdf5lib.HDFNativeData
+                    .byteToShort(0, 1, barray);
+            retobj = new Short(f[0]);
+        }
+        else if (type.equals("java.lang.Float")) {
+            float[] f = hdf.hdf5lib.HDFNativeData
+                    .byteToFloat(0, 1, barray);
+            retobj = new Float(f[0]);
+        }
+        else if (type.equals("java.lang.Long")) {
+            long[] f = hdf.hdf5lib.HDFNativeData.byteToLong(0, 1, barray);
+            retobj = new Long(f[0]);
+        }
+        else if (type.equals("java.lang.Double")) {
+            double[] f = hdf.hdf5lib.HDFNativeData.byteToDouble(0, 1,
+                    barray);
+            retobj = new Double(f[0]);
+        }
+        else {
+            /* exception: unsupported type */
+            HDF5Exception ex = new HDF5JavaException(
+                    "byteToNumber: setfield bad type: " + obj + " " + type);
+            throw (ex);
+        }
+        return (retobj);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/Callbacks.java b/java/src/hdf/hdf5lib/callbacks/Callbacks.java
new file mode 100644
index 0000000..5757eef
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/Callbacks.java
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+/** All callback definitions must derive from this interface.  Any
+ * derived interfaces must define a single public method  named "callback".
+ * You are responsible for deregistering your callback (if necessary)
+ * in its {@link Object#finalize} method.  If native code attempts to call
+ * a callback which has been GC'd, you will likely crash the VM.  If
+ * there is no method to deregister the callback (e.g. <code>atexit</code>
+ * in the C library), you must ensure that you always keep a live reference
+ * to the callback object.<p>
+ * A callback should generally never throw an exception, since it doesn't
+ * necessarily have an encompassing Java environment to catch it.  Any
+ * exceptions thrown will be passed to the default callback exception
+ * handler.
+ */
+public interface Callbacks {
+
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java
new file mode 100644
index 0000000..fa390a2
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_cb.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+import hdf.hdf5lib.structs.H5A_info_t;
+
+//Information class for link callback(for H5Aiterate)
+public interface H5A_iterate_cb extends Callbacks {
+    int callback(long group, String name, H5A_info_t info, H5A_iterate_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java
new file mode 100644
index 0000000..4816f8f
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5A_iterate_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5A_iterate_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java b/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java
new file mode 100644
index 0000000..1b66e34
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5D_append_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pset/get_append_flush)
+public interface H5D_append_cb extends Callbacks {
+    int callback(long dataset_id, long[] cur_dims, H5D_append_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java b/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java
new file mode 100644
index 0000000..dcbd331
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5D_append_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5D_append_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java
new file mode 100644
index 0000000..bac3dd9
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Diterate)
+public interface H5D_iterate_cb extends Callbacks {
+    int callback(byte[] elem, long elem_type, int ndim, long[] point, H5D_iterate_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java
new file mode 100644
index 0000000..03bcc20
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5D_iterate_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5D_iterate_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java b/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java
new file mode 100644
index 0000000..672d151
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5E_walk_cb.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+import hdf.hdf5lib.structs.H5E_error2_t;
+
+//Information class for link callback(for H5Ewalk)
+public interface H5E_walk_cb extends Callbacks {
+    int callback(int nidx, H5E_error2_t info, H5E_walk_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java b/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java
new file mode 100644
index 0000000..f3f8a39
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5E_walk_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5E_walk_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_cb.java
new file mode 100644
index 0000000..5218311
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_cb.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+import hdf.hdf5lib.structs.H5L_info_t;
+
+//Information class for link callback(for H5Lvisit/H5Lvisit_by_name)
+public interface H5L_iterate_cb extends Callbacks {
+    int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java
new file mode 100644
index 0000000..b7c25f4
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5L_iterate_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5L_iterate_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_cb.java
new file mode 100644
index 0000000..630205f
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_cb.java
@@ -0,0 +1,23 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+import hdf.hdf5lib.structs.H5O_info_t;
+
+//Information class for link callback(for H5Ovisit/H5Ovisit_by_name)
+public interface H5O_iterate_cb extends Callbacks {
+    int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java
new file mode 100644
index 0000000..da64f19
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5O_iterate_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5O_iterate_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java
new file mode 100644
index 0000000..dcd4ed2
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pcreate_class)
+public interface H5P_cls_close_func_cb extends Callbacks {
+    int callback(long prop_id, H5P_cls_close_func_t close_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java
new file mode 100644
index 0000000..222bd26
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_close_func_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5P_cls_close_func_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java
new file mode 100644
index 0000000..0dc8a94
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pcreate_class)
+public interface H5P_cls_copy_func_cb extends Callbacks {
+    int callback(long new_prop_id, long old_prop_id, H5P_cls_copy_func_t copy_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java
new file mode 100644
index 0000000..eed29bb
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_copy_func_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5P_cls_copy_func_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java
new file mode 100644
index 0000000..777e302
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pcreate_class)
+public interface H5P_cls_create_func_cb extends Callbacks {
+    int callback(long prop_id, H5P_cls_create_func_t create_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java
new file mode 100644
index 0000000..78973f0
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_cls_create_func_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5P_cls_create_func_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java
new file mode 100644
index 0000000..0d98325
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Piterate)
+public interface H5P_iterate_cb extends Callbacks {
+    int callback(long plist, String name, H5P_iterate_t op_data);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java
new file mode 100644
index 0000000..dbbf80d
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_iterate_t.java
@@ -0,0 +1,22 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+public interface H5P_iterate_t {
+/**    public ArrayList iterdata = new ArrayList();
+  * Any derived interfaces must define the single public variable as above.
+  */
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java
new file mode 100644
index 0000000..3ea44ac
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_close_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_close_func_cb extends Callbacks {
+    int callback(String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java
new file mode 100644
index 0000000..0daaca5
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_compare_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_compare_func_cb extends Callbacks {
+    int callback(byte[] value1, byte[] value2, long size);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java
new file mode 100644
index 0000000..4e560e2
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_copy_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_copy_func_cb extends Callbacks {
+    int callback(String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java
new file mode 100644
index 0000000..dc4fee1
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_create_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_create_func_cb extends Callbacks {
+    int callback(String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java
new file mode 100644
index 0000000..9aa27ab
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_delete_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_delete_func_cb extends Callbacks {
+    int callback(long prop_id, String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java
new file mode 100644
index 0000000..bfc7b37
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_get_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_get_func_cb extends Callbacks {
+    int callback(long prop_id, String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java b/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java
new file mode 100644
index 0000000..c1e9b00
--- /dev/null
+++ b/java/src/hdf/hdf5lib/callbacks/H5P_prp_set_func_cb.java
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.callbacks;
+
+//Information class for link callback(for H5Pregister2)
+public interface H5P_prp_set_func_cb extends Callbacks {
+    int callback(long prop_id, String name, long size, byte[] value);
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5AtomException.java b/java/src/hdf/hdf5lib/exceptions/HDF5AtomException.java
new file mode 100644
index 0000000..3309223
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5AtomException.java
@@ -0,0 +1,44 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_ATOM</b>
+ */
+
+public class HDF5AtomException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5AtomException</code> with no specified detail
+     * message.
+     */
+    public HDF5AtomException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5AtomException</code> with the specified detail
+     * message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5AtomException(String s) {
+        super(s);
+    }
+
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java b/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java
new file mode 100644
index 0000000..8c1a7b8
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5AttributeException.java
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_ATTR</b>
+ */
+public class HDF5AttributeException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5AttributeException</code> with no specified
+     * detail message.
+     */
+    public HDF5AttributeException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5AttributeException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5AttributeException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java b/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java
new file mode 100644
index 0000000..dc82fd9
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5BtreeException.java
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_BTREE</b>
+ */
+public class HDF5BtreeException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5BtreeException</code> with no specified detail
+     * message.
+     */
+    public HDF5BtreeException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5BtreeException</code> with the specified detail
+     * message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5BtreeException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java
new file mode 100644
index 0000000..17fd9db
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataFiltersException.java
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_PLINE</b>
+ */
+public class HDF5DataFiltersException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5DataFiltersException</code> with no specified
+     * detail message.
+     */
+    public HDF5DataFiltersException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5DataFiltersException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5DataFiltersException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java
new file mode 100644
index 0000000..f22c9ec
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataStorageException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_STORAGE</b>
+ */
+
+public class HDF5DataStorageException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5DataStorageExceptionn</code> with no specified
+     * detail message.
+     */
+    public HDF5DataStorageException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5DataStorageException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5DataStorageException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java
new file mode 100644
index 0000000..e39709d
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException.java
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_DATASET</b>
+ */
+public class HDF5DatasetInterfaceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5DatasetInterfaceException</code> with no
+     * specified detail message.
+     */
+    public HDF5DatasetInterfaceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5DatasetInterfaceException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5DatasetInterfaceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java
new file mode 100644
index 0000000..531202c
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_DATASPACE</b>
+ */
+
+public class HDF5DataspaceInterfaceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5DataspaceInterfaceException</code> with no
+     * specified detail message.
+     */
+    public HDF5DataspaceInterfaceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5DataspaceInterfaceException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5DataspaceInterfaceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java
new file mode 100644
index 0000000..3c0c144
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_DATATYPE</b>
+ */
+
+public class HDF5DatatypeInterfaceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5DatatypeInterfaceException</code> with no
+     * specified detail message.
+     */
+    public HDF5DatatypeInterfaceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5DatatypeInterfaceException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5DatatypeInterfaceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java b/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java
new file mode 100644
index 0000000..8a83ca1
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5Exception.java
@@ -0,0 +1,68 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * <p>
+ * The class HDF5Exception returns errors from the Java HDF5 Interface.
+ * <p>
+ * Two sub-classes of HDF5Exception are defined:
+ * <ol>
+ * <li>
+ * HDF5LibraryException -- errors raised the HDF5 library code
+ * <li>
+ * HDF5JavaException -- errors raised the HDF5 Java wrapper code
+ * </ol>
+ * <p>
+ * These exceptions are sub-classed to represent specific error conditions, as
+ * needed. In particular, HDF5LibraryException has a sub-class for each major
+ * error code returned by the HDF5 library.
+ *
+ */
+public class HDF5Exception extends Exception {
+    protected String detailMessage;
+
+    /**
+     * Constructs an <code>HDF5Exception</code> with no specified detail
+     * message.
+     */
+    public HDF5Exception() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5Exception</code> with the specified detail
+     * message.
+     *
+     * @param message
+     *            the detail message.
+     */
+    public HDF5Exception(String message) {
+        super();
+        detailMessage = message;
+    }
+
+    /**
+     * Returns the detail message of this exception
+     *
+     * @return the detail message or <code>null</code> if this object does not
+     *         have a detail message.
+     */
+    @Override
+    public String getMessage() {
+        return detailMessage;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java
new file mode 100644
index 0000000..62c5dd8
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5ExternalFileListException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_EFL</b>
+ */
+
+public class HDF5ExternalFileListException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5ExternalFileListException</code> with no
+     * specified detail message.
+     */
+    public HDF5ExternalFileListException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5ExternalFileListException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5ExternalFileListException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java
new file mode 100644
index 0000000..0b63b41
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5FileInterfaceException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_FILE</b>
+ */
+
+public class HDF5FileInterfaceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5FileInterfaceException</code> with no specified
+     * detail message.
+     */
+    public HDF5FileInterfaceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5FileInterfaceException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5FileInterfaceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java
new file mode 100644
index 0000000..c984aae
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionArgumentException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_ARGS</b>
+ */
+
+public class HDF5FunctionArgumentException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5FunctionArgumentException</code> with no
+     * specified detail message.
+     */
+    public HDF5FunctionArgumentException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5FunctionArgumentException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5FunctionArgumentException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java
new file mode 100644
index 0000000..5dad930
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_FUNC</b>
+ */
+
+public class HDF5FunctionEntryExitException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5FunctionEntryExitException</code> with no
+     * specified detail message.
+     */
+    public HDF5FunctionEntryExitException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5FunctionEntryExitException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5FunctionEntryExitException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java b/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java
new file mode 100644
index 0000000..dfe4ced
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5HeapException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_HEAP</b>
+ */
+
+public class HDF5HeapException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5HeapException</code> with no specified detail
+     * message.
+     */
+    public HDF5HeapException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5HeapException</code> with the specified detail
+     * message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5HeapException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java b/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java
new file mode 100644
index 0000000..45a836c
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5InternalErrorException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_INTERNAL</b>
+ */
+
+public class HDF5InternalErrorException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5InternalErrorException</code> with no specified
+     * detail message.
+     */
+    public HDF5InternalErrorException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5InternalErrorException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5InternalErrorException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java b/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java
new file mode 100644
index 0000000..2db79ef
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5JavaException.java
@@ -0,0 +1,45 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * <p>
+ * The class HDF5JavaException returns errors from the Java wrapper of theHDF5
+ * library.
+ * <p>
+ * These errors include Java configuration errors, security violations, and
+ * resource exhaustion.
+ */
+public class HDF5JavaException extends HDF5Exception {
+    /**
+     * Constructs an <code>HDF5JavaException</code> with no specified detail
+     * message.
+     */
+    public HDF5JavaException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5JavaException</code> with the specified detail
+     * message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5JavaException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java b/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java
new file mode 100644
index 0000000..8b21ff8
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5LibraryException.java
@@ -0,0 +1,383 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+/**
+ * <p>
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * Each major error code from the HDF-5 Library is represented by a sub-class of
+ * this class, and by default the 'detailedMessage' is set according to the
+ * minor error code from the HDF-5 Library.
+ * <p>
+ * For major and minor error codes, see <b>H5Epublic.h</b> in the HDF-5 library.
+ *
+ */
+
+ at SuppressWarnings("serial")
+public class HDF5LibraryException extends HDF5Exception {
+    /**
+     * Constructs an <code>HDF5LibraryException</code> with no specified detail
+     * message.
+     */
+    public HDF5LibraryException() {
+        super();
+
+        // this code forces the loading of the HDF-5 library
+        // to assure that the native methods are available
+        try {
+            H5.H5open();
+        }
+        catch (Exception e) {
+        }
+        ;
+
+        detailMessage = getMinorError(getMinorErrorNumber());
+    }
+
+    /**
+     * Constructs an <code>HDF5LibraryException</code> with the specified detail
+     * message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5LibraryException(String s) {
+        super(s);
+        // this code forces the loading of the HDF-5 library
+        // to assure that the native methods are available
+        try {
+            H5.H5open();
+        }
+        catch (Exception e) {
+        }
+        ;
+    }
+
+    /**
+     * Get the major error number of the first error on the HDF5 library error
+     * stack.
+     *
+     * @return the major error number
+     */
+    public native long getMajorErrorNumber();
+
+    /**
+     * Get the minor error number of the first error on the HDF5 library error
+     * stack.
+     *
+     * @return the minor error number
+     */
+    public native long getMinorErrorNumber();
+
+    /**
+     * Return a error message for the minor error number.
+     * <p>
+     * These messages come from <b>H5Epublic.h</b>.
+     *
+     * @param err_code
+     *            the error code
+     *
+     * @return the string of the minor error
+     */
+    public String getMinorError(long err_code) {
+        if (err_code == 0) {
+            return "special zero no error";
+        }
+        else if (err_code == HDF5Constants.H5E_UNINITIALIZED) {
+            return "information is unitialized";
+        }
+        else if (err_code == HDF5Constants.H5E_UNSUPPORTED) {
+            return "feature is unsupported";
+        }
+        else if (err_code == HDF5Constants.H5E_BADTYPE) {
+            return "incorrect type found";
+        }
+        else if (err_code == HDF5Constants.H5E_BADRANGE) {
+            return "argument out of range";
+        }
+        else if (err_code == HDF5Constants.H5E_BADVALUE) {
+            return "bad value for argument";
+        }
+        else if (err_code == HDF5Constants.H5E_NOSPACE) {
+            return "no space available for allocation";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCOPY) {
+            return "unable to copy object";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTFREE) {
+            return "unable to free object";
+        }
+        else if (err_code == HDF5Constants.H5E_ALREADYEXISTS) {
+            return "Object already exists";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTLOCK) {
+            return "Unable to lock object";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTUNLOCK) {
+            return "Unable to unlock object";
+        }
+        else if (err_code == HDF5Constants.H5E_FILEEXISTS) {
+            return "file already exists";
+        }
+        else if (err_code == HDF5Constants.H5E_FILEOPEN) {
+            return "file already open";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCREATE) {
+            return "Can't create file";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTOPENFILE) {
+            return "Can't open file";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCLOSEFILE) {
+            return "Can't close file";
+        }
+        else if (err_code == HDF5Constants.H5E_NOTHDF5) {
+            return "not an HDF5 format file";
+        }
+        else if (err_code == HDF5Constants.H5E_BADFILE) {
+            return "bad file ID accessed";
+        }
+        else if (err_code == HDF5Constants.H5E_TRUNCATED) {
+            return "file has been truncated";
+        }
+        else if (err_code == HDF5Constants.H5E_MOUNT) {
+            return "file mount error";
+        }
+        else if (err_code == HDF5Constants.H5E_SEEKERROR) {
+            return "seek failed";
+        }
+        else if (err_code == HDF5Constants.H5E_READERROR) {
+            return "read failed";
+        }
+        else if (err_code == HDF5Constants.H5E_WRITEERROR) {
+            return "write failed";
+        }
+        else if (err_code == HDF5Constants.H5E_CLOSEERROR) {
+            return "close failed";
+        }
+        else if (err_code == HDF5Constants.H5E_OVERFLOW) {
+            return "address overflowed";
+        }
+        else if (err_code == HDF5Constants.H5E_FCNTL) {
+            return "file fcntl failed";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTINIT) {
+            return "Can't initialize object";
+        }
+        else if (err_code == HDF5Constants.H5E_ALREADYINIT) {
+            return "object already initialized";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTRELEASE) {
+            return "Can't release object";
+        }
+        else if (err_code == HDF5Constants.H5E_BADATOM) {
+            return "Can't find atom information";
+        }
+        else if (err_code == HDF5Constants.H5E_BADGROUP) {
+            return "Can't find group information";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTREGISTER) {
+            return "Can't register new atom";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTINC) {
+            return "Can't increment reference count";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTDEC) {
+            return "Can't decrement reference count";
+        }
+        else if (err_code == HDF5Constants.H5E_NOIDS) {
+            return "Out of IDs for group";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTFLUSH) {
+            return "Can't flush object from cache";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTLOAD) {
+            return "Can't load object into cache";
+        }
+        else if (err_code == HDF5Constants.H5E_PROTECT) {
+            return "protected object error";
+        }
+        else if (err_code == HDF5Constants.H5E_NOTCACHED) {
+            return "object not currently cached";
+        }
+        else if (err_code == HDF5Constants.H5E_NOTFOUND) {
+            return "object not found";
+        }
+        else if (err_code == HDF5Constants.H5E_EXISTS) {
+            return "object already exists";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTENCODE) {
+            return "Can't encode value";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTDECODE) {
+            return "Can't decode value";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTSPLIT) {
+            return "Can't split node";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTINSERT) {
+            return "Can't insert object";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTLIST) {
+            return "Can't list node";
+        }
+        else if (err_code == HDF5Constants.H5E_LINKCOUNT) {
+            return "bad object header link count";
+        }
+        else if (err_code == HDF5Constants.H5E_VERSION) {
+            return "wrong version number";
+        }
+        else if (err_code == HDF5Constants.H5E_ALIGNMENT) {
+            return "alignment error";
+        }
+        else if (err_code == HDF5Constants.H5E_BADMESG) {
+            return "unrecognized message";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTDELETE) {
+            return " Can't delete message";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTOPENOBJ) {
+            return "Can't open object";
+        }
+        else if (err_code == HDF5Constants.H5E_COMPLEN) {
+            return "name component is too long";
+        }
+        else if (err_code == HDF5Constants.H5E_LINK) {
+            return "link count failure";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCONVERT) {
+            return "Can't convert datatypes";
+        }
+        else if (err_code == HDF5Constants.H5E_BADSIZE) {
+            return "Bad size for object";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCLIP) {
+            return "Can't clip hyperslab region";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTCOUNT) {
+            return "Can't count elements";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTSELECT) {
+            return "Can't select hyperslab";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTNEXT) {
+            return "Can't move to next iterator location";
+        }
+        else if (err_code == HDF5Constants.H5E_BADSELECT) {
+            return "Invalid selection";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTGET) {
+            return "Can't get value";
+        }
+        else if (err_code == HDF5Constants.H5E_CANTSET) {
+            return "Can't set value";
+        }
+        else if (err_code == HDF5Constants.H5E_DUPCLASS) {
+            return "Duplicate class name in parent class";
+        }
+        else if (err_code == HDF5Constants.H5E_MPI) {
+            return "some MPI function failed";
+        }
+        else if (err_code == HDF5Constants.H5E_MPIERRSTR) {
+            return "MPI Error String";
+            // }
+            // else
+            // if
+            // (err_code
+            // ==
+            // HDF5Constants.H5E_CANTRECV
+            // )
+            // {
+            // return
+            // "can't receive messages from processes";
+            // }
+            // else
+            // if
+            // (err_code
+            // ==
+            // HDF5Constants.H5E_CANTALLOC
+            // )
+            // {
+            // return
+            // "can't allocate from file";
+        }
+        else if (err_code == HDF5Constants.H5E_NOFILTER) {
+            return "requested filter is not available";
+        }
+        else if (err_code == HDF5Constants.H5E_CALLBACK) {
+            return "callback failed";
+        }
+        else if (err_code == HDF5Constants.H5E_CANAPPLY) {
+            return "error from filter \"can apply\" callback";
+        }
+        else if (err_code == HDF5Constants.H5E_SETLOCAL) {
+            return "error from filter \"set local\" callback";
+        }
+        else {
+            return "undefined error(" + err_code + ")";
+        }
+    }
+
+    /**
+     * Prints this <code>HDF5LibraryException</code>, the HDF-5 Library error
+     * stack, and and the Java stack trace to the standard error stream.
+     */
+    @Override
+    public void printStackTrace() {
+        System.err.println(this);
+        printStackTrace0(null); // the HDF-5 Library error stack
+        super.printStackTrace(); // the Java stack trace
+    }
+
+    /**
+     * Prints this <code>HDF5LibraryException</code> the HDF-5 Library error
+     * stack, and and the Java stack trace to the specified print stream.
+     *
+     * @param f
+     *            the file print stream.
+     */
+    public void printStackTrace(java.io.File f) {
+        if ((f == null) || !f.exists() || f.isDirectory() || !f.canWrite()) {
+            printStackTrace();
+        }
+        else {
+            try {
+                java.io.FileOutputStream o = new java.io.FileOutputStream(f);
+                java.io.PrintWriter p = new java.io.PrintWriter(o);
+                p.println(this);
+                p.close();
+            }
+            catch (Exception ex) {
+                System.err.println(this);
+            }
+            ;
+            // the HDF-5 Library error stack
+            printStackTrace0(f.getPath());
+            super.printStackTrace(); // the Java stack trace
+        }
+    }
+
+    /*
+     * This private method calls the HDF-5 library to extract the error codes
+     * and error stack.
+     */
+    private native void printStackTrace0(String s);
+
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java b/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java
new file mode 100644
index 0000000..e0a95d0
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5LowLevelIOException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_IO</b>
+ */
+
+public class HDF5LowLevelIOException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5LowLevelIOException</code> with no specified
+     * detail message.
+     */
+    public HDF5LowLevelIOException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5LowLevelIOException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5LowLevelIOException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java b/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java
new file mode 100644
index 0000000..cbc3b75
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5MetaDataCacheException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_CACHE</b>
+ */
+
+public class HDF5MetaDataCacheException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5MetaDataCacheException</code> with no specified
+     * detail message.
+     */
+    public HDF5MetaDataCacheException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5MetaDataCacheException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5MetaDataCacheException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java
new file mode 100644
index 0000000..0cdd0d1
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5ObjectHeaderException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_OHDR</b>
+ */
+
+public class HDF5ObjectHeaderException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5ObjectHeaderException</code> with no specified
+     * detail message.
+     */
+    public HDF5ObjectHeaderException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5ObjectHeaderException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5ObjectHeaderException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java
new file mode 100644
index 0000000..aa9f668
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_PLIST</b>
+ */
+
+public class HDF5PropertyListInterfaceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5PropertyListInterfaceException</code> with no
+     * specified detail message.
+     */
+    public HDF5PropertyListInterfaceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5PropertyListInterfaceException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5PropertyListInterfaceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java
new file mode 100644
index 0000000..2c8c93b
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5ReferenceException.java
@@ -0,0 +1,37 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+public class HDF5ReferenceException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5ReferenceException</code> with no specified
+     * detail message.
+     */
+    public HDF5ReferenceException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5ReferenceException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5ReferenceException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java b/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java
new file mode 100644
index 0000000..f1c0c60
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_RESOURCE</b>
+ */
+
+public class HDF5ResourceUnavailableException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5ResourceUnavailableException</code> with no
+     * specified detail message.
+     */
+    public HDF5ResourceUnavailableException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5FunctionArgumentException</code> with the
+     * specified detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5ResourceUnavailableException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java b/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java
new file mode 100644
index 0000000..87384d1
--- /dev/null
+++ b/java/src/hdf/hdf5lib/exceptions/HDF5SymbolTableException.java
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.exceptions;
+
+/**
+ * The class HDF5LibraryException returns errors raised by the HDF5 library.
+ * <p>
+ * This sub-class represents HDF-5 major error code <b>H5E_SYM</b>
+ */
+
+public class HDF5SymbolTableException extends HDF5LibraryException {
+    /**
+     * Constructs an <code>HDF5SymbolTableException</code> with no specified
+     * detail message.
+     */
+    public HDF5SymbolTableException() {
+        super();
+    }
+
+    /**
+     * Constructs an <code>HDF5SymbolTableException</code> with the specified
+     * detail message.
+     *
+     * @param s
+     *            the detail message.
+     */
+    public HDF5SymbolTableException(String s) {
+        super(s);
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java b/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java
new file mode 100644
index 0000000..2128d8a
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5AC_cache_config_t.java
@@ -0,0 +1,99 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for H5Pget_mdc_config/H5Pset_mdc_config
+public class H5AC_cache_config_t implements Serializable{
+    private static final long serialVersionUID = -6748085696476149972L;
+    // general configuration fields:
+    public int              version;
+    public boolean          rpt_fcn_enabled;
+    public boolean          open_trace_file;
+    public boolean          close_trace_file;
+    public String           trace_file_name;
+    public boolean          evictions_enabled;
+    public boolean          set_initial_size;
+    public long             initial_size;
+    public double           min_clean_fraction;
+    public long             max_size;
+    public long             min_size;
+    public long             epoch_length;
+    // size increase control fields:
+    public int              incr_mode;  // H5C_cache_incr_mode
+    public double           lower_hr_threshold;
+    public double           increment;
+    public boolean          apply_max_increment;
+    public long             max_increment;
+    public int              flash_incr_mode;    // H5C_cache_flash_incr_mode
+    public double           flash_multiple;
+    public double           flash_threshold;
+    // size decrease control fields:
+    public int              decr_mode;  // H5C_cache_decr_mode
+    public double           upper_hr_threshold;
+    public double           decrement;
+    public boolean          apply_max_decrement;
+    public long             max_decrement;
+    public int              epochs_before_eviction;
+    public boolean          apply_empty_reserve;
+    public double           empty_reserve;
+    // parallel configuration fields:
+    public long             dirty_bytes_threshold;
+    public int              metadata_write_strategy;
+
+    public H5AC_cache_config_t (int version, boolean rpt_fcn_enabled, boolean open_trace_file,
+            boolean close_trace_file, String trace_file_name, boolean evictions_enabled,
+            boolean set_initial_size, long initial_size, double min_clean_fraction, long max_size,
+            long min_size, long epoch_length, int incr_mode, double lower_hr_threshold,
+            double increment, boolean apply_max_increment, long max_increment, int flash_incr_mode,
+            double flash_multiple, double flash_threshold, int decr_mode, double upper_hr_threshold,
+            double decrement, boolean apply_max_decrement, long max_decrement,
+            int epochs_before_eviction, boolean apply_empty_reserve, double empty_reserve,
+            long dirty_bytes_threshold, int metadata_write_strategy)
+    {
+        this.version = version;
+        this.rpt_fcn_enabled = rpt_fcn_enabled;
+        this.open_trace_file = open_trace_file;
+        this.close_trace_file = close_trace_file;
+        this.trace_file_name = trace_file_name;
+        this.evictions_enabled = evictions_enabled;
+        this.set_initial_size = set_initial_size;
+        this.initial_size = initial_size;
+        this.min_clean_fraction = min_clean_fraction;
+        this.max_size = max_size;
+        this.min_size = min_size;
+        this.epoch_length = epoch_length;
+        this.incr_mode = incr_mode;
+        this.lower_hr_threshold = lower_hr_threshold;
+        this.increment = increment;
+        this.apply_max_increment = apply_max_increment;
+        this.max_increment = flash_incr_mode;
+        this.flash_incr_mode = flash_incr_mode;
+        this.flash_multiple = flash_multiple;
+        this.flash_threshold = flash_threshold;
+        this.decr_mode = decr_mode;
+        this.upper_hr_threshold = upper_hr_threshold;
+        this.decrement = decrement;
+        this.apply_max_decrement = apply_max_decrement;
+        this.max_decrement = max_decrement;
+        this.epochs_before_eviction = epochs_before_eviction;
+        this.apply_empty_reserve = apply_empty_reserve;
+        this.empty_reserve = empty_reserve;
+        this.dirty_bytes_threshold = dirty_bytes_threshold;
+        this.metadata_write_strategy = metadata_write_strategy;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5A_info_t.java b/java/src/hdf/hdf5lib/structs/H5A_info_t.java
new file mode 100644
index 0000000..b04a757
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5A_info_t.java
@@ -0,0 +1,34 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for Attribute (For H5Aget_info/H5Aget_info_by_idx/H5Aget_info_by_name)
+public class H5A_info_t implements Serializable{
+    private static final long serialVersionUID = 2791443594041667613L;
+    public boolean corder_valid; // Indicate if creation order is valid
+    public long corder; // Creation order of attribute
+    public int cset; // Character set of attribute name
+    public long data_size; // Size of raw data
+
+    H5A_info_t(boolean corder_valid, long corder, int cset, long data_size) {
+        this.corder_valid = corder_valid;
+        this.corder = corder;
+        this.cset = cset;
+        this.data_size = data_size;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5E_error2_t.java b/java/src/hdf/hdf5lib/structs/H5E_error2_t.java
new file mode 100644
index 0000000..b7cd60a
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5E_error2_t.java
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for Attribute (For H5Ewalk)
+public class H5E_error2_t implements Serializable{
+    private static final long serialVersionUID = 279144359041667613L;
+
+    public long   cls_id;     //class ID
+    public long   maj_num;      //major error ID
+    public long   min_num;      //minor error number
+    public int    line;          //line in file where error occurs
+    public String func_name;  //function in which error occurred
+    public String file_name;  //file in which error occurred
+    public String desc;          //optional supplied description
+
+    H5E_error2_t(long cls_id, long maj_num, long min_num, int line, String func_name, String file_name, String desc) {
+        this.cls_id = cls_id;
+        this.maj_num = maj_num;
+        this.min_num = min_num;
+        this.line = line;
+        this.func_name = func_name;
+        this.file_name = file_name;
+        this.desc = desc;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5F_info2_t.java b/java/src/hdf/hdf5lib/structs/H5F_info2_t.java
new file mode 100644
index 0000000..8fbde68
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5F_info2_t.java
@@ -0,0 +1,47 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for object (for H5Fget_info)
+public class H5F_info2_t implements Serializable{
+    private static final long serialVersionUID = 4691681162544054518L;
+    public int         super_version;    // Superblock version #
+    public long        super_size;    // Superblock size
+    public long        super_ext_size;    // Superblock extension size
+    public int         free_version;    // Version # of file free space management
+    public long        free_meta_size;    // Free space manager metadata size
+    public long        free_tot_space;    // Amount of free space in the file
+    public int         sohm_version;    // Version # of shared object header info
+    public long        sohm_hdr_size;       // Shared object header message header size
+    public H5_ih_info_t    sohm_msgs_info;      // Shared object header message index & heap size
+
+    public H5F_info2_t (int super_version, long super_size, long super_ext_size,
+        int free_version, long free_meta_size, long free_tot_space,
+        int sohm_version, long sohm_hdr_size, H5_ih_info_t sohm_msgs_info)
+    {
+        this.super_version = super_version;
+        this.super_size = super_size;
+        this.super_ext_size = super_ext_size;
+        this.free_version = free_version;
+        this.free_meta_size = free_meta_size;
+        this.free_tot_space = free_tot_space;
+        this.sohm_version = sohm_version;
+        this.sohm_hdr_size = sohm_hdr_size;
+        this.sohm_msgs_info = sohm_msgs_info;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5G_info_t.java b/java/src/hdf/hdf5lib/structs/H5G_info_t.java
new file mode 100644
index 0000000..daa6808
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5G_info_t.java
@@ -0,0 +1,27 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for group (for H5Gget_info/H5Gget_info_by_name/H5Gget_info_by_idx)
+public class H5G_info_t implements Serializable{
+    private static final long serialVersionUID = -3746463015312132912L;
+    public int storage_type; // Type of storage for links in group
+    public long nlinks; // Number of links in group
+    public long max_corder; // Current max. creation order value for group
+    public boolean mounted; // Whether group has a file mounted on it
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5L_info_t.java b/java/src/hdf/hdf5lib/structs/H5L_info_t.java
new file mode 100644
index 0000000..d43853f
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5L_info_t.java
@@ -0,0 +1,38 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for link (for H5Lget_info/H5Lget_info_by_idx)
+public class H5L_info_t implements Serializable{
+    private static final long serialVersionUID = -4754320605310155033L;
+    public int     type;
+    public boolean corder_valid;
+    public long    corder;
+    public int     cset;
+    public long    address_val_size;
+
+    H5L_info_t (int type, boolean corder_valid, long corder,
+        int cset, long address_val_size)
+    {
+        this.type = type;
+        this.corder_valid = corder_valid;
+        this.corder = corder;
+        this.cset = cset;
+        this.address_val_size = address_val_size;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java b/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java
new file mode 100644
index 0000000..86cf883
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5O_hdr_info_t.java
@@ -0,0 +1,49 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+// Information struct for object header metadata (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx)
+public class H5O_hdr_info_t implements Serializable{
+    private static final long serialVersionUID = 7883826382952577189L;
+    public int version;       /* Version number of header format in file */
+    public int nmesgs;        /* Number of object header messages */
+    public int nchunks;       /* Number of object header chunks */
+    public int flags;         /* Object header status flags */
+    public long space_total;  /* Total space for storing object header in file */
+    public long space_meta;   /* Space within header for object header metadata information */
+    public long space_mesg;   /* Space within header for actual message information */
+    public long space_free;   /* Free space within object header */
+    public long mesg_present; /* Flags to indicate presence of message type in header */
+    public long mesg_shared;  /* Flags to indicate message type is shared in header */
+
+    H5O_hdr_info_t (int version, int nmesgs, int nchunks, int flags,
+        long space_total, long space_meta, long space_mesg, long space_free,
+        long mesg_present, long mesg_shared)
+    {
+        this.version = version;
+        this.nmesgs = nmesgs;
+        this.nchunks = nchunks;
+        this.flags = flags;
+        this.space_total = space_total;
+        this.space_meta = space_meta;
+        this.space_mesg = space_mesg;
+        this.space_free = space_free;
+        this.mesg_present = mesg_present;
+        this.mesg_shared = mesg_shared;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5O_info_t.java b/java/src/hdf/hdf5lib/structs/H5O_info_t.java
new file mode 100644
index 0000000..a89aaf0
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5O_info_t.java
@@ -0,0 +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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for object (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx)
+public class H5O_info_t implements Serializable{
+    private static final long serialVersionUID = 4691681163544054518L;
+    public long   fileno;     /* File number that object is located in */
+    public long   addr;       /* Object address in file   */
+    public int    type;       /* Basic object type (group, dataset, etc.) */
+    public int    rc;         /* Reference count of object    */
+    public long   atime;      /* Access time          */
+    public long   mtime;      /* Modification time        */
+    public long   ctime;      /* Change time          */
+    public long   btime;      /* Birth time           */
+    public long   num_attrs;  /* # of attributes attached to object */
+    public H5O_hdr_info_t   hdr;            /* Object header information */
+    /* Extra metadata storage for obj & attributes */
+    public H5_ih_info_t     meta_size_obj;  /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+    public H5_ih_info_t     meta_size_attr; /* v2 B-tree & heap for attributes */
+
+    public H5O_info_t (long fileno, long addr, int type,
+        int rc, long num_attrs, long atime, long mtime, long ctime, long btime,
+        H5O_hdr_info_t hdr, H5_ih_info_t meta_size_obj, H5_ih_info_t meta_size_attr)
+    {
+        this.fileno = fileno;
+        this.addr = addr;
+        this.type = type;
+        this.rc = rc;
+        this.num_attrs = num_attrs;
+        this.atime = atime;
+        this.mtime = mtime;
+        this.ctime = ctime;
+        this.btime = btime;
+        this.hdr = hdr;
+        this.meta_size_obj = meta_size_obj;
+        this.meta_size_attr = meta_size_attr;
+    }
+}
diff --git a/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java b/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java
new file mode 100644
index 0000000..450f548
--- /dev/null
+++ b/java/src/hdf/hdf5lib/structs/H5_ih_info_t.java
@@ -0,0 +1,31 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package hdf.hdf5lib.structs;
+
+import java.io.Serializable;
+
+//Information struct for group (for H5Gget_info/H5Gget_info_by_name/H5Gget_info_by_idx)
+public class H5_ih_info_t implements Serializable {
+    private static final long serialVersionUID = -142238015615462707L;
+    public long     index_size;     /* btree and/or list */
+    public long     heap_size;
+
+    H5_ih_info_t (long index_size, long heap_size)
+    {
+        this.index_size = index_size;
+        this.heap_size = heap_size;
+    }
+}
diff --git a/java/src/hdf/overview.html b/java/src/hdf/overview.html
new file mode 100644
index 0000000..39d75b7
--- /dev/null
+++ b/java/src/hdf/overview.html
@@ -0,0 +1,96 @@
+<body>
+
+<h1>Java HDF5 Interface (JHI5)</h1>
+
+<h2><u>What it is</u></h2>
+The <b>Java HD5 Interface (JHI5)</b> is a Java package
+(<a href="../../hdf-java-html/javadocs/hdf/hdf5lib/package-summary.html">hdf.hdf5lib</a>)
+that ``wraps around'' the HDF5 library.
+<p />There are a large number of functions in the HDF5
+library (version 1.10). Some of the functions are not supported in JHI5. Most
+of the unsupported functions have C function pointers, which is not currently
+implemented in JHI5.
+
+<center><table BORDER=1 COLS=1 WIDTH="71%" BGCOLOR="#dbeaf5" >
+<tr>
+<td>
+<center>Note: The JHI5 does not support HDF4 or earlier.</center>
+</td>
+</tr>
+</table></center>
+
+<p>The JHI5 may be used by any Java application that needs to access HDF5
+files. It is extremely important to emphasize that <i>this package is not
+a pure Java implementation of the HDF5 library.</i> The JHI5 calls the
+same HDF5 library that is used by C or FORTRAN programs. (Note that this
+product cannot be used in most network browsers because it accesses the
+local disk using native code.)
+<p>The Java HDF5 Interface consists of Java classes and a dynamically
+linked native library. The Java classes declare native methods, and the
+library contains C functions which implement the native methods. The C
+functions call the standard HDF5 library, which is linked as part of the
+same library on most platforms.
+<p>The central part of the JHI5 is the Java class <i>
+<a href="../../hdf-java-html/javadocs/hdf/hdf5lib/H5.html">hdf.hdf5lib.H5</a></i>.
+The <i>H5 </i>class calls the standard (<i>i.e.</i>, `native' code) HDF5
+library, with native methods for most of the HDF5 functions.
+
+<h3>
+<u>How to use it</u></h3>
+The JHI5 is used by Java classes to call the HDF5 library, in order to
+create HDF5 files, and read and write data in existing HDF5 files.
+<p>For example, the HDF5 library has the function <b>H5Fopen</b> to open
+an HDF5 file. The Java interface is the class <i>
+<a href="../../hdf-java-html/javadocs/hdf/hdf5lib/H5.html">hdf.hdf5lib.H5</a></i>,
+which has a method:
+<pre><b>static native int H5Fopen(String filename, int flags, int access );</b></pre>
+The native method is implemented in C using the
+<a href="http://java.sun.com/javase/6/docs/technotes/guides/jni/index.html">Java
+Native Method Interface </a>(JNI). This is written something like the following:
+<pre><b>JNIEXPORT jint
+JNICALL Java_hdf_hdf5lib_H5_H5Fopen
+(
+ JNIEnv *env,
+ jclass class,
+ jstring hdfFile,
+ jint flags,
+ jint access)
+ {
+
+ /* ...convert Java String to (char *) */
+
+ /* call the HDF library */
+ retVal = H5Fopen((char *)file, (unsigned)flags, (hid_t)access );
+
+ /* ... */
+}</b></pre>
+This C function calls the HDF5 library and returns the result appropriately.
+<p>There is one native method for each HDF entry point (several hundred
+in all), which are compiled with the HDF library into a dynamically loaded
+library (<i>libhdf5_java</i>). Note that this library must be built for each
+platform.
+<p>To call the HDF `<b><i>H5Fopen</i></b>' function, a Java program would
+import the package '<i><b>hdf.hdf5lib.*</b>'</i>, and invoke the method
+on the class '<b><i>H5</i></b>'. The Java program would look something
+like this:
+<pre><b>import hdf.hdf5lib.*;
+
+{
+ /* ... */
+
+ try {
+ file = H5.Hopen("myFile.hdf", flags, access );
+ } catch (HDF5Exception ex) {
+ //...
+ }
+
+ /* ... */
+}</b></pre>
+The <i><b>H5</b> </i>class automatically loads the native method implementations
+and the HDF5 library.
+
+<h3>
+<a NAME="DOWNLOAD"></a>To Obtain</h3>
+The JHI5 is included with the <a href="http://www.hdfgroup.org/HDF5/index.html">HDF5</a> library.
+
+</body>
diff --git a/java/src/jni/CMakeLists.txt b/java/src/jni/CMakeLists.txt
new file mode 100644
index 0000000..ef80072
--- /dev/null
+++ b/java/src/jni/CMakeLists.txt
@@ -0,0 +1,85 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDF5_JAVA_JNI C CXX)
+
+set (HDF5_JAVA_JNI_CSRCS
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/exceptionImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5aImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5Constants.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5dImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5eImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5fImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5gImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5iImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5Imp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5lImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5oImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5pImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5plImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5rImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5sImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5tImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5util.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5zImp.c
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/nativeData.c
+)
+
+set (HDF5_JAVA_JNI_CHDRS
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/exceptionImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5aImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5dImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5eImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5fImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5gImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5iImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5jni.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5lImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5oImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5pImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5plImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5rImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5sImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5tImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5util.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/h5zImp.h
+    ${HDF5_JAVA_JNI_SOURCE_DIR}/nativeData.h
+)
+
+INCLUDE_DIRECTORIES( ${HDF5_JAVA_JNI_SOURCE_DIR} )
+
+set (CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
+
+########### JNI libraries always must be built shared  ###############
+add_library (${HDF5_JAVA_JNI_LIB_TARGET} SHARED ${HDF5_JAVA_JNI_CSRCS} ${HDF5_JAVA_JNI_CHDRS})
+TARGET_C_PROPERTIES (${HDF5_JAVA_JNI_LIB_TARGET} SHARED " " " ")
+target_link_libraries (${HDF5_JAVA_JNI_LIB_TARGET} ${HDF5_LIB_TARGET})
+set_target_properties (${HDF5_JAVA_JNI_LIB_TARGET} PROPERTIES FOLDER libraries/jni)
+SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_JAVA_JNI_LIB_TARGET}")
+H5_SET_LIB_OPTIONS (${HDF5_JAVA_JNI_LIB_TARGET} ${HDF5_JAVA_JNI_LIB_NAME} SHARED ${HDF5_JAVA_PACKAGE_SOVERSION})
+if (WIN32)
+  get_filename_component (HDF5_JAVA_JNI_DLL_NAME ${HDF5_JAVA_JNI_LIB_TARGET} NAME_WE)
+  # message (STATUS "HDF5_JAVA_JNI_DLL_NAME: ${HDF5_JAVA_JNI_DLL_NAME}")
+  if (BUILD_TESTING)
+    add_custom_target (HDF5_JAVA_JNI-Test-Copy ALL
+        COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${HDF5_JAVA_JNI_DLL_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${HDF5_JAVA_JNI_DLL_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}
+        COMMENT "Copying ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${HDF5_JAVA_JNI_DLL_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/"
+    )
+    add_dependencies (HDF5_JAVA_JNI-Test-Copy ${HDF5_JAVA_JNI_LIB_TARGET})
+  endif (BUILD_TESTING)
+endif (WIN32)
+
+#-----------------------------------------------------------------------------
+# Add Target(s) to CMake Install for import into other projects
+#-----------------------------------------------------------------------------
+if (HDF5_EXPORTED_TARGETS)
+  INSTALL_TARGET_PDB (${HDF5_JAVA_JNI_LIB_TARGET} ${HDF5_INSTALL_BIN_DIR} libraries)
+  install (
+      TARGETS
+          ${HDF5_JAVA_JNI_LIB_TARGET}
+      EXPORT
+          ${HDF5_JAVA_EXPORTED_TARGETS}
+      LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
+      ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
+      RUNTIME DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT libraries
+      FRAMEWORK DESTINATION ${HDF5_INSTALL_FWRK_DIR} COMPONENT libraries
+  )
+endif (HDF5_EXPORTED_TARGETS)
diff --git a/java/src/jni/Makefile.am b/java/src/jni/Makefile.am
new file mode 100644
index 0000000..764fcdb
--- /dev/null
+++ b/java/src/jni/Makefile.am
@@ -0,0 +1,44 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+#
+
+include $(top_srcdir)/config/commence.am
+include $(top_srcdir)/config/lt_vers.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+# Include src directory and JNI flags
+AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/java/src/jni $(JNIFLAGS)
+
+# This is our main target
+lib_LTLIBRARIES=libhdf5_java.la
+
+# Add libtool numbers to the HDF5 Java (JNI) library (from config/lt_vers.am)
+libhdf5_java_la_LDFLAGS= -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISION):$(LT_VERS_AGE) $(AM_LDFLAGS)
+
+# Source files for the library
+libhdf5_java_la_SOURCES=exceptionImp.c h5Constants.c nativeData.c h5util.c h5Imp.c \
+	h5aImp.c h5dImp.c h5eImp.c h5fImp.c h5gImp.c h5iImp.c h5lImp.c h5oImp.c    \
+	h5pImp.c h5plImp.c h5rImp.c h5sImp.c h5tImp.c h5zImp.c
+
+# HDF5 Java (JNI) library depends on HDF5 Library.
+libhdf5_java_la_LIBADD=$(LIBHDF5)
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/src/jni/Makefile.in b/java/src/jni/Makefile.in
new file mode 100644
index 0000000..a94d4b9
--- /dev/null
+++ b/java/src/jni/Makefile.in
@@ -0,0 +1,1486 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java native interface (JNI) Library Makefile(.in)
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS =
+subdir = java/src/jni
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libhdf5_java_la_DEPENDENCIES = $(LIBHDF5)
+am_libhdf5_java_la_OBJECTS = exceptionImp.lo h5Constants.lo \
+	nativeData.lo h5util.lo h5Imp.lo h5aImp.lo h5dImp.lo h5eImp.lo \
+	h5fImp.lo h5gImp.lo h5iImp.lo h5lImp.lo h5oImp.lo h5pImp.lo \
+	h5plImp.lo h5rImp.lo h5sImp.lo h5tImp.lo h5zImp.lo
+libhdf5_java_la_OBJECTS = $(am_libhdf5_java_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libhdf5_java_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(AM_CFLAGS) $(CFLAGS) $(libhdf5_java_la_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/fortran/src
+depcomp = $(SHELL) $(top_srcdir)/bin/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libhdf5_java_la_SOURCES)
+DIST_SOURCES = $(libhdf5_java_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/bin/depcomp \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am \
+	$(top_srcdir)/config/lt_vers.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+
+# Include src directory and JNI flags
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
+	-I$(top_srcdir)/java/src/jni $(JNIFLAGS)
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Add libtool shared library version numbers to the HDF5 library
+# See libtool versioning documentation online.
+# After making changes, run bin/reconfigure to update other configure related
+# files like Makefile.in.
+LT_VERS_INTERFACE = 100
+LT_VERS_REVISION = 0
+LT_VERS_AGE = 0
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+
+# This is our main target
+lib_LTLIBRARIES = libhdf5_java.la
+
+# Add libtool numbers to the HDF5 Java (JNI) library (from config/lt_vers.am)
+libhdf5_java_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISION):$(LT_VERS_AGE) $(AM_LDFLAGS)
+
+# Source files for the library
+libhdf5_java_la_SOURCES = exceptionImp.c h5Constants.c nativeData.c h5util.c h5Imp.c \
+	h5aImp.c h5dImp.c h5eImp.c h5fImp.c h5gImp.c h5iImp.c h5lImp.c h5oImp.c    \
+	h5pImp.c h5plImp.c h5rImp.c h5sImp.c h5tImp.c h5zImp.c
+
+
+# HDF5 Java (JNI) library depends on HDF5 Library.
+libhdf5_java_la_LIBADD = $(LIBHDF5)
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/lt_vers.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/src/jni/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/src/jni/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/lt_vers.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libhdf5_java.la: $(libhdf5_java_la_OBJECTS) $(libhdf5_java_la_DEPENDENCIES) $(EXTRA_libhdf5_java_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libhdf5_java_la_LINK) -rpath $(libdir) $(libhdf5_java_la_OBJECTS) $(libhdf5_java_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/exceptionImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5Constants.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5Imp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5aImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5dImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5eImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5fImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5gImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5iImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5lImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5oImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5pImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5plImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5rImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5sImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5tImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/h5zImp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nativeData.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all 
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES) all-local
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am all-local check check-TESTS \
+	check-am clean clean-generic clean-libLTLIBRARIES \
+	clean-libtool cscopelist-am ctags ctags-am distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+	pdf-am ps ps-am recheck tags tags-am uninstall uninstall-am \
+	uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+# 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.
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/src/jni/exceptionImp.c b/java/src/jni/exceptionImp.c
new file mode 100644
index 0000000..8623ca9
--- /dev/null
+++ b/java/src/jni/exceptionImp.c
@@ -0,0 +1,414 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/***********/
+/* Headers */
+/***********/
+
+#include "hdf5.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "jni.h"
+#include "h5jni.h"
+#include "exceptionImp.h"
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+/*  These types are copied from H5Eprivate.h
+ *  They should be moved to a public include file, and deleted from
+ *  here.
+ */
+
+#define H5E_NSLOTS      32      /*number of slots in an error stack */
+
+/*
+ * The list of error messages in the system is kept as an array of
+ * error_code/message pairs, one for major error numbers and another for
+ * minor error numbers.
+ */
+typedef struct H5E_major_mesg_t {
+    hid_t error_code;
+    const char  *str;
+} H5E_major_mesg_t;
+
+typedef struct H5E_minor_mesg_t {
+    hid_t error_code;
+    const char  *str;
+} H5E_minor_mesg_t;
+
+/* major and minor error numbers */
+typedef struct H5E_num_t {
+    hid_t maj_num;
+    hid_t min_num;
+} H5E_num_t;
+
+/********************/
+/* Local Macros     */
+/********************/
+
+#define THROWEXCEPTION(className,args) {                                    \
+    jclass     jc;                                                          \
+    jmethodID  jm;                                                          \
+    jobject    ex;                                                          \
+    jc = ENVPTR->FindClass(ENVPAR (className));                             \
+    if (jc == NULL) {                                                       \
+        return JNI_FALSE;                                                   \
+    }                                                                       \
+    jm = ENVPTR->GetMethodID(ENVPAR jc, "<init>", "(Ljava/lang/String;)V"); \
+    if (jm == NULL) {                                                       \
+        return JNI_FALSE;                                                   \
+    }                                                                       \
+    ex = ENVPTR->NewObjectA (ENVPAR jc, jm, (jvalue*)(args));               \
+    if (ENVPTR->Throw(ENVPAR (jthrowable)ex) < 0) {                         \
+        printf("FATAL ERROR:  %s: Throw failed\n", (className));            \
+        return JNI_FALSE;                                                   \
+    }                                                                       \
+    return JNI_TRUE;                                                        \
+}
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static const char *defineHDF5LibraryException(hid_t maj_num);
+static jboolean H5JNIErrorClass(JNIEnv *env, const char *message, const char *className);
+
+/* get the major and minor error numbers on the top of the error stack */
+static herr_t
+walk_error_callback(unsigned n, const H5E_error2_t *err_desc, void *_err_nums)
+{
+    H5E_num_t *err_nums = (H5E_num_t *)_err_nums;
+
+    if(err_desc) {
+        err_nums->maj_num = err_desc->maj_num;
+        err_nums->min_num = err_desc->min_num;
+    } /* end if */
+
+    return 0;
+} /* end walk_error_callback() */
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDF5Library
+ * Method:    H5error_off
+ * Signature: ()I
+ *
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5error_1off(JNIEnv *env, jclass clss)
+{
+    H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
+    return 0;
+} /* end Java_hdf_hdf5lib_H5_H5error_1off() */
+
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    printStackTrace0
+ * Signature: (Ljava/lang/Object;)V
+ *
+ *  Call the HDF-5 library to print the HDF-5 error stack to 'file_name'.
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_printStackTrace0(
+    JNIEnv *env, jobject obj, jstring file_name)
+{
+    FILE       *stream = NULL;
+    const char *file = NULL;
+
+    if(file_name == NULL) {
+        H5Eprint2(H5E_DEFAULT, stderr);
+    } /* end if */
+    else {
+        file = ENVPTR->GetStringUTFChars(ENVPAR file_name, 0);
+        stream = HDfopen(file, "a+");
+        if(stream) {
+            H5Eprint2(H5E_DEFAULT, stream);
+            HDfclose(stream);
+        } /* end if */
+        ENVPTR->ReleaseStringUTFChars(ENVPAR file_name, file);
+    } /* end else */
+} /* end  Java_hdf_hdf5lib_exceptions_HDF5LibraryException_printStackTrace0() */
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    getMajorErrorNumber
+ * Signature: ()J
+ *
+ *  Extract the HDF-5 major error number from the HDF-5 error stack.
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMajorErrorNumber(
+    JNIEnv *env, jobject obj)
+{
+    H5E_num_t err_nums;
+    err_nums.maj_num = 0;
+    err_nums.min_num = 0;
+
+    H5Ewalk2(H5E_DEFAULT, H5E_WALK_DOWNWARD, walk_error_callback, &err_nums);
+
+    return err_nums.maj_num;
+} /* end Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMajorErrorNumber() */
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    getMinorErrorNumber
+ * Signature: ()J
+ *
+ *  Extract the HDF-5 minor error number from the HDF-5 error stack.
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMinorErrorNumber(
+    JNIEnv *env, jobject obj)
+{
+    H5E_num_t err_nums;
+    err_nums.maj_num = 0;
+    err_nums.min_num = 0;
+
+    H5Ewalk2(H5E_DEFAULT, H5E_WALK_DOWNWARD, walk_error_callback, &err_nums);
+
+    return err_nums.min_num;
+} /* end Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMinorErrorNumber() */
+
+/*
+ *  Routine to raise particular Java exceptions from C
+ */
+static
+jboolean
+H5JNIErrorClass(JNIEnv *env, const char *message, const char *className)
+{
+    char *args[2];
+    jstring str = ENVPTR->NewStringUTF(ENVPAR message);
+    args[0] = (char *)str;
+    args[1] = 0;
+
+    THROWEXCEPTION(className, args);
+} /* end H5JNIErrorClass() */
+
+/*
+ *  Create and throw an 'outOfMemoryException'
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5outOfMemory(JNIEnv *env, const char *functName)
+{
+    return H5JNIErrorClass(env, functName, "java/lang/OutOfMemoryError");
+} /* end h5outOfMemory() */
+
+
+/*
+ *  A fatal error in a JNI call
+ *  Create and throw an 'InternalError'
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5JNIFatalError(JNIEnv *env, const char *functName)
+{
+    return H5JNIErrorClass(env, functName, "java/lang/InternalError");
+} /* end h5JNIFatalError() */
+
+/*
+ *  A NULL argument in an HDF5 call
+ *  Create and throw an 'NullPointerException'
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5nullArgument(JNIEnv *env, const char *functName)
+{
+    return H5JNIErrorClass(env, functName, "java/lang/NullPointerException");
+} /* end h5nullArgument() */
+
+/*
+ *  A bad argument in an HDF5 call
+ *  Create and throw an 'IllegalArgumentException'
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5badArgument(JNIEnv *env, const char *functName)
+{
+    return H5JNIErrorClass(env, functName, "java/lang/IllegalArgumentException");
+} /* end h5badArgument() */
+
+/*
+ *  Some feature Not implemented yet
+ *  Create and throw an 'UnsupportedOperationException'
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5unimplemented(JNIEnv *env, const char *functName)
+{
+    return H5JNIErrorClass(env, functName, "java/lang/UnsupportedOperationException");
+} /* end h5unimplemented() */
+
+/*  h5raiseException().  This routine is called to generate
+ *  an arbitrary Java exception with a particular message.
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5raiseException(JNIEnv *env, const char *exception, const char *message)
+{
+    return H5JNIErrorClass(env, message, exception);
+} /* end h5raiseException() */
+
+/*
+ *  h5libraryError()   determines the HDF-5 major error code
+ *  and creates and throws the appropriate sub-class of
+ *  HDF5LibraryException().  This routine should be called
+ *  whenever a call to the HDF-5 library fails, i.e., when
+ *  the return is -1.
+ *
+ *  Note:  This routine never returns from the 'throw',
+ *  and the Java native method immediately raises the
+ *  exception.
+ */
+jboolean
+h5libraryError(JNIEnv *env)
+{
+    char       *args[2];
+    const char *exception = NULL;
+    char       *msg_str = NULL;
+    int         num_errs = 0;
+    hid_t       min_num;
+    hid_t       maj_num;
+    ssize_t     msg_size = 0;
+    H5E_type_t  error_msg_type;
+    jstring     str = NULL;
+    hid_t       stk_id = -1;
+    H5E_num_t   exceptionNumbers;
+
+    exceptionNumbers.maj_num = 0;
+    exceptionNumbers.min_num = 0;
+
+    /* Save current stack contents for future use */
+    stk_id = H5Eget_current_stack(); /* This will clear current stack  */
+    if(stk_id >= 0)
+        H5Ewalk2(stk_id, H5E_WALK_DOWNWARD, walk_error_callback, &exceptionNumbers);
+    maj_num = exceptionNumbers.maj_num;
+    min_num = exceptionNumbers.min_num;
+
+    exception = defineHDF5LibraryException(maj_num);
+
+    /* get the length of the name */
+    msg_size = H5Eget_msg(min_num, NULL, NULL, 0);
+    if(msg_size > 0) {
+        msg_size++; /* add extra space for the null terminator */
+        msg_str = (char*)HDcalloc((size_t)msg_size, sizeof(char));
+        if(msg_str) {
+            msg_size = H5Eget_msg(min_num, &error_msg_type, (char *)msg_str, (size_t)msg_size);
+            str = ENVPTR->NewStringUTF(ENVPAR msg_str);
+            HDfree(msg_str);
+        } /* end if */
+    } /* end if */
+    else
+        str = NULL;
+    if(stk_id >= 0)
+        H5Eset_current_stack(stk_id);
+
+    args[0] = (char *)str;
+    args[1] = 0;
+    THROWEXCEPTION(exception, args);
+} /* end h5libraryError() */
+
+
+/*
+ *  defineHDF5LibraryException()  returns the name of the sub-class
+ *  which goes with an HDF-5 error code.
+ */
+static const char *
+defineHDF5LibraryException(hid_t maj_num)
+{
+    hid_t err_num = maj_num;
+
+    if (H5E_ARGS == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5FunctionArgumentException";
+    else if (H5E_RESOURCE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5ResourceUnavailableException";
+    else if (H5E_INTERNAL == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5InternalErrorException";
+    else if (H5E_FILE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5FileInterfaceException";
+    else if (H5E_IO == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5LowLevelIOException";
+    else if (H5E_FUNC == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5FunctionEntryExitException";
+    else if (H5E_ATOM == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5AtomException";
+    else if (H5E_CACHE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5MetaDataCacheException";
+    else if (H5E_BTREE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5BtreeException";
+    else if (H5E_SYM == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5SymbolTableException";
+    else if (H5E_HEAP == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5HeapException";
+    else if (H5E_OHDR == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5ObjectHeaderException";
+    else if (H5E_DATATYPE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5DatatypeInterfaceException";
+    else if (H5E_DATASPACE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5DataspaceInterfaceException";
+    else if (H5E_DATASET == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5DatasetInterfaceException";
+    else if (H5E_STORAGE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5DataStorageException";
+    else if (H5E_PLIST == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5PropertyListInterfaceException";
+    else if (H5E_ATTR == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5AttributeException";
+    else if (H5E_PLINE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5DataFiltersException";
+    else if (H5E_EFL == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5ExternalFileListException";
+    else if (H5E_REFERENCE == err_num)
+        return "hdf/hdf5lib/exceptions/HDF5ReferenceException";
+
+    return "hdf/hdf5lib/exceptions/HDF5LibraryException";
+} /* end  defineHDF5LibraryException() */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
diff --git a/java/src/jni/exceptionImp.h b/java/src/jni/exceptionImp.h
new file mode 100644
index 0000000..e238372
--- /dev/null
+++ b/java/src/jni/exceptionImp.h
@@ -0,0 +1,67 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_exception */
+
+#ifndef _Included_hdf_hdf5lib_H5_exception
+#define _Included_hdf_hdf5lib_H5_exception
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDF5Library
+ * Method:    H5error_off
+ * Signature: ()I
+ *
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5error_1off(JNIEnv *env, jclass clss );
+
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    printStackTrace0
+ * Signature: (Ljava/lang/Object;)V
+ *
+ *  Call the HDF-5 library to print the HDF-5 error stack to 'file_name'.
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_printStackTrace0(JNIEnv *env,
+    jobject obj, jstring file_name);
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    getMajorErrorNumber
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMajorErrorNumber(JNIEnv *env, jobject obj);
+
+/*
+ * Class:     hdf_hdf5lib_exceptions_HDFLibraryException
+ * Method:    getMinorErrorNumber
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_exceptions_HDF5LibraryException_getMinorErrorNumber(JNIEnv *env, jobject obj);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_exception */
diff --git a/java/src/jni/h5Constants.c b/java/src/jni/h5Constants.c
new file mode 100644
index 0000000..1b94315
--- /dev/null
+++ b/java/src/jni/h5Constants.c
@@ -0,0 +1,694 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include "hdf5.h"
+
+#pragma GCC diagnostic ignored "-Wmissing-prototypes"
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1QUARTER_1HADDR_1MAX(JNIEnv *env, jclass cls) { return (hsize_t)HADDR_MAX/4; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1SZIP_1ALLOW_1K13_1OPTION_1MASK(JNIEnv *env, jclass cls) { return H5_SZIP_ALLOW_K13_OPTION_MASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1SZIP_1CHIP_1OPTION_1MASK(JNIEnv *env, jclass cls) { return H5_SZIP_CHIP_OPTION_MASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1SZIP_1EC_1OPTION_1MASK(JNIEnv *env, jclass cls) { return H5_SZIP_EC_OPTION_MASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1SZIP_1MAX_1PIXELS_1PER_1BLOCK(JNIEnv *env, jclass cls) { return H5_SZIP_MAX_PIXELS_PER_BLOCK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1SZIP_1NN_1OPTION_1MASK(JNIEnv *env, jclass cls) { return H5_SZIP_NN_OPTION_MASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1INDEX_1UNKNOWN(JNIEnv *env, jclass cls) { return H5_INDEX_UNKNOWN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1INDEX_1NAME(JNIEnv *env, jclass cls) { return H5_INDEX_NAME; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1INDEX_1CRT_1ORDER(JNIEnv *env, jclass cls) { return H5_INDEX_CRT_ORDER; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1INDEX_1N(JNIEnv *env, jclass cls) { return H5_INDEX_N; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1ITER_1UNKNOWN(JNIEnv *env, jclass cls) { return H5_ITER_UNKNOWN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1ITER_1INC(JNIEnv *env, jclass cls) { return H5_ITER_INC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1ITER_1DEC(JNIEnv *env, jclass cls) { return H5_ITER_DEC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1ITER_1NATIVE(JNIEnv *env, jclass cls) { return H5_ITER_NATIVE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5_1ITER_1N(JNIEnv *env, jclass cls) { return H5_ITER_N; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5AC_1CURR_1CACHE_1CONFIG_1VERSION(JNIEnv *env, jclass cls) { return H5AC__CURR_CACHE_CONFIG_VERSION; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5AC_1MAX_1TRACE_1FILE_1NAME_1LEN(JNIEnv *env, jclass cls) { return H5AC__MAX_TRACE_FILE_NAME_LEN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5AC_1METADATA_1WRITE_1STRATEGY_1PROCESS_1ZERO_1ONLY(JNIEnv *env, jclass cls) { return H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5AC_1METADATA_1WRITE_1STRATEGY_1DISTRIBUTED(JNIEnv *env, jclass cls) { return H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1incr_1off(JNIEnv *env, jclass cls) { return H5C_incr__off; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1incr_1threshold(JNIEnv *env, jclass cls) { return H5C_incr__threshold; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1flash_1incr_1off(JNIEnv *env, jclass cls) { return H5C_flash_incr__off; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1flash_1incr_1add_1space(JNIEnv *env, jclass cls) { return H5C_flash_incr__add_space; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1decr_1off(JNIEnv *env, jclass cls) { return H5C_decr__off; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1decr_1threshold(JNIEnv *env, jclass cls) { return H5C_decr__threshold; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1decr_1age_1out(JNIEnv *env, jclass cls) { return H5C_decr__age_out; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5C_1decr_1age_1out_1with_1threshold(JNIEnv *env, jclass cls) { return H5C_decr__age_out_with_threshold; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1CHUNK_1IDX_1BTREE(JNIEnv *env, jclass cls) { return H5D_CHUNK_IDX_BTREE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1ALLOC_1TIME_1DEFAULT(JNIEnv *env, jclass cls) { return H5D_ALLOC_TIME_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1ALLOC_1TIME_1EARLY(JNIEnv *env, jclass cls) { return H5D_ALLOC_TIME_EARLY; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1ALLOC_1TIME_1ERROR(JNIEnv *env, jclass cls) { return H5D_ALLOC_TIME_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1ALLOC_1TIME_1INCR(JNIEnv *env, jclass cls) { return H5D_ALLOC_TIME_INCR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1ALLOC_1TIME_1LATE(JNIEnv *env, jclass cls) { return H5D_ALLOC_TIME_LATE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1TIME_1ERROR(JNIEnv *env, jclass cls) { return H5D_FILL_TIME_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1TIME_1ALLOC(JNIEnv *env, jclass cls) { return H5D_FILL_TIME_ALLOC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1TIME_1NEVER(JNIEnv *env, jclass cls) { return H5D_FILL_TIME_NEVER; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1TIME_1IFSET(JNIEnv *env, jclass cls) { return H5D_FILL_TIME_IFSET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1VALUE_1DEFAULT(JNIEnv *env, jclass cls) { return H5D_FILL_VALUE_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1VALUE_1ERROR(JNIEnv *env, jclass cls) { return H5D_FILL_VALUE_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1VALUE_1UNDEFINED(JNIEnv *env, jclass cls) { return H5D_FILL_VALUE_UNDEFINED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1FILL_1VALUE_1USER_1DEFINED(JNIEnv *env, jclass cls) { return H5D_FILL_VALUE_USER_DEFINED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1LAYOUT_1ERROR(JNIEnv *env, jclass cls) { return H5D_LAYOUT_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1CHUNKED(JNIEnv *env, jclass cls) { return H5D_CHUNKED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1COMPACT(JNIEnv *env, jclass cls) { return H5D_COMPACT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1CONTIGUOUS(JNIEnv *env, jclass cls) { return H5D_CONTIGUOUS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1VIRTUAL(JNIEnv *env, jclass cls) { return H5D_VIRTUAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1NLAYOUTS(JNIEnv *env, jclass cls) { return H5D_NLAYOUTS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1SPACE_1STATUS_1ALLOCATED(JNIEnv *env, jclass cls) { return H5D_SPACE_STATUS_ALLOCATED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1SPACE_1STATUS_1ERROR(JNIEnv *env, jclass cls) { return H5D_SPACE_STATUS_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1SPACE_1STATUS_1NOT_1ALLOCATED(JNIEnv *env, jclass cls) { return H5D_SPACE_STATUS_NOT_ALLOCATED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1SPACE_1STATUS_1PART_1ALLOCATED(JNIEnv *env, jclass cls) { return H5D_SPACE_STATUS_PART_ALLOCATED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1VDS_1ERROR(JNIEnv *env, jclass cls) { return H5D_VDS_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1VDS_1FIRST_1MISSING(JNIEnv *env, jclass cls) { return H5D_VDS_FIRST_MISSING; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5D_1VDS_1LAST_1AVAILABLE(JNIEnv *env, jclass cls) { return H5D_VDS_LAST_AVAILABLE; }
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ALIGNMENT(JNIEnv *env, jclass cls) { return H5E_ALIGNMENT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ALREADYEXISTS(JNIEnv *env, jclass cls) { return H5E_ALREADYEXISTS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ALREADYINIT(JNIEnv *env, jclass cls) { return H5E_ALREADYINIT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ARGS(JNIEnv *env, jclass cls) { return H5E_ARGS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ATOM(JNIEnv *env, jclass cls) { return H5E_ATOM; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1ATTR(JNIEnv *env, jclass cls) { return H5E_ATTR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADATOM(JNIEnv *env, jclass cls) { return H5E_BADATOM; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADFILE(JNIEnv *env, jclass cls) { return H5E_BADFILE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADGROUP(JNIEnv *env, jclass cls) { return H5E_BADGROUP; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADMESG(JNIEnv *env, jclass cls) { return H5E_BADMESG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADRANGE(JNIEnv *env, jclass cls) { return H5E_BADRANGE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADSELECT(JNIEnv *env, jclass cls) { return H5E_BADSELECT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADSIZE(JNIEnv *env, jclass cls) { return H5E_BADSIZE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADTYPE(JNIEnv *env, jclass cls) { return H5E_BADTYPE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BADVALUE(JNIEnv *env, jclass cls) { return H5E_BADVALUE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1BTREE(JNIEnv *env, jclass cls) { return H5E_BTREE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CACHE(JNIEnv *env, jclass cls) { return H5E_CACHE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CALLBACK(JNIEnv *env, jclass cls) { return H5E_CALLBACK; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANAPPLY(JNIEnv *env, jclass cls) { return H5E_CANAPPLY; }
+/*JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTALLOC(JNIEnv *env, jclass cls) { return H5E_CANTALLOC; }*/
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCLIP(JNIEnv *env, jclass cls) { return H5E_CANTCLIP; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCLOSEFILE(JNIEnv *env, jclass cls) { return H5E_CANTCLOSEFILE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCONVERT(JNIEnv *env, jclass cls) { return H5E_CANTCONVERT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCOPY(JNIEnv *env, jclass cls) { return H5E_CANTCOPY; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCOUNT(JNIEnv *env, jclass cls) { return H5E_CANTCOUNT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTCREATE(JNIEnv *env, jclass cls) { return H5E_CANTCREATE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTDEC(JNIEnv *env, jclass cls) { return H5E_CANTDEC; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTDECODE(JNIEnv *env, jclass cls) { return H5E_CANTDECODE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTDELETE(JNIEnv *env, jclass cls) { return H5E_CANTDELETE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTENCODE(JNIEnv *env, jclass cls) { return H5E_CANTENCODE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTFLUSH(JNIEnv *env, jclass cls) { return H5E_CANTFLUSH; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTFREE(JNIEnv *env, jclass cls) { return H5E_CANTFREE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTGET(JNIEnv *env, jclass cls) { return H5E_CANTGET; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTINC(JNIEnv *env, jclass cls) { return H5E_CANTINC; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTINIT(JNIEnv *env, jclass cls) { return H5E_CANTINIT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTINSERT(JNIEnv *env, jclass cls) { return H5E_CANTINSERT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTLIST(JNIEnv *env, jclass cls) { return H5E_CANTLIST; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTLOAD(JNIEnv *env, jclass cls) { return H5E_CANTLOAD; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTLOCK(JNIEnv *env, jclass cls) { return H5E_CANTLOCK; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTNEXT(JNIEnv *env, jclass cls) { return H5E_CANTNEXT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTOPENFILE(JNIEnv *env, jclass cls) { return H5E_CANTOPENFILE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTOPENOBJ(JNIEnv *env, jclass cls) { return H5E_CANTOPENOBJ; }
+/*JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTRECV(JNIEnv *env, jclass cls) { return H5E_CANTRECV; }*/
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTREGISTER(JNIEnv *env, jclass cls) { return H5E_CANTREGISTER; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTRELEASE(JNIEnv *env, jclass cls) { return H5E_CANTRELEASE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTSELECT(JNIEnv *env, jclass cls) { return H5E_CANTSELECT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTSET(JNIEnv *env, jclass cls) { return H5E_CANTSET; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTSPLIT(JNIEnv *env, jclass cls) { return H5E_CANTSPLIT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CANTUNLOCK(JNIEnv *env, jclass cls) { return H5E_CANTUNLOCK; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1CLOSEERROR(JNIEnv *env, jclass cls) { return H5E_CLOSEERROR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1COMPLEN(JNIEnv *env, jclass cls) { return H5E_COMPLEN; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1DATASET(JNIEnv *env, jclass cls) { return H5E_DATASET; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1DATASPACE(JNIEnv *env, jclass cls) { return H5E_DATASPACE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1DATATYPE(JNIEnv *env, jclass cls) { return H5E_DATATYPE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1DEFAULT(JNIEnv *env, jclass cls) { return H5E_DEFAULT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1DUPCLASS(JNIEnv *env, jclass cls) { return H5E_DUPCLASS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1EFL(JNIEnv *env, jclass cls) { return H5E_EFL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1EXISTS(JNIEnv *env, jclass cls) { return H5E_EXISTS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1FCNTL(JNIEnv *env, jclass cls) { return H5E_FCNTL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1FILE(JNIEnv *env, jclass cls) { return H5E_FILE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1FILEEXISTS(JNIEnv *env, jclass cls) { return H5E_FILEEXISTS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1FILEOPEN(JNIEnv *env, jclass cls) { return H5E_FILEOPEN; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1FUNC(JNIEnv *env, jclass cls) { return H5E_FUNC; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1HEAP(JNIEnv *env, jclass cls) { return H5E_HEAP; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1INTERNAL(JNIEnv *env, jclass cls) { return H5E_INTERNAL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1IO(JNIEnv *env, jclass cls) { return H5E_IO; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1LINK(JNIEnv *env, jclass cls) { return H5E_LINK; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1LINKCOUNT(JNIEnv *env, jclass cls) { return H5E_LINKCOUNT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1MAJOR(JNIEnv *env, jclass cls) { return H5E_MAJOR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1MINOR(JNIEnv *env, jclass cls) { return H5E_MINOR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1MOUNT(JNIEnv *env, jclass cls) { return H5E_MOUNT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1MPI(JNIEnv *env, jclass cls) { return H5E_MPI; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1MPIERRSTR(JNIEnv *env, jclass cls) { return H5E_MPIERRSTR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOFILTER(JNIEnv *env, jclass cls) { return H5E_NOFILTER; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOIDS(JNIEnv *env, jclass cls) { return H5E_NOIDS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NONE_1MAJOR(JNIEnv *env, jclass cls) { return H5E_NONE_MAJOR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NONE_1MINOR(JNIEnv *env, jclass cls) { return H5E_NONE_MINOR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOSPACE(JNIEnv *env, jclass cls) { return H5E_NOSPACE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOTCACHED(JNIEnv *env, jclass cls) { return H5E_NOTCACHED; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOTFOUND(JNIEnv *env, jclass cls) { return H5E_NOTFOUND; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1NOTHDF5(JNIEnv *env, jclass cls) { return H5E_NOTHDF5; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1OHDR(JNIEnv *env, jclass cls) { return H5E_OHDR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1OVERFLOW(JNIEnv *env, jclass cls) { return H5E_OVERFLOW; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1PLINE(JNIEnv *env, jclass cls) { return H5E_PLINE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1PLIST(JNIEnv *env, jclass cls) { return H5E_PLIST; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1PROTECT(JNIEnv *env, jclass cls) { return H5E_PROTECT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1READERROR(JNIEnv *env, jclass cls) { return H5E_READERROR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1REFERENCE(JNIEnv *env, jclass cls) { return H5E_REFERENCE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1RESOURCE(JNIEnv *env, jclass cls) { return H5E_RESOURCE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1RS(JNIEnv *env, jclass cls) { return H5E_RS; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1SEEKERROR(JNIEnv *env, jclass cls) { return H5E_SEEKERROR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1SETLOCAL(JNIEnv *env, jclass cls) { return H5E_SETLOCAL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1STORAGE(JNIEnv *env, jclass cls) { return H5E_STORAGE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1SYM(JNIEnv *env, jclass cls) { return H5E_SYM; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1TRUNCATED(JNIEnv *env, jclass cls) { return H5E_TRUNCATED; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1TST(JNIEnv *env, jclass cls) { return H5E_TST; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1UNINITIALIZED(JNIEnv *env, jclass cls) { return H5E_UNINITIALIZED; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1UNSUPPORTED(JNIEnv *env, jclass cls) { return H5E_UNSUPPORTED; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1VERSION(JNIEnv *env, jclass cls) { return H5E_VERSION; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1VFL(JNIEnv *env, jclass cls) { return H5E_VFL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1WALK_1DOWNWARD(JNIEnv *env, jclass cls) { return H5E_WALK_DOWNWARD; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1WALK_1UPWARD(JNIEnv *env, jclass cls) { return H5E_WALK_UPWARD; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5E_1WRITEERROR(JNIEnv *env, jclass cls) { return H5E_WRITEERROR; }
+
+/* Java does not have unsigned native types */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wsign-conversion"
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1CREAT(JNIEnv *env, jclass cls) { return H5F_ACC_CREAT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1EXCL(JNIEnv *env, jclass cls) { return H5F_ACC_EXCL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1RDONLY(JNIEnv *env, jclass cls) { return H5F_ACC_RDONLY; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1RDWR(JNIEnv *env, jclass cls) { return H5F_ACC_RDWR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1TRUNC(JNIEnv *env, jclass cls) { return H5F_ACC_TRUNC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1DEFAULT(JNIEnv *env, jclass cls) { return H5F_ACC_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1SWMR_1READ(JNIEnv *env, jclass cls) { return H5F_ACC_SWMR_READ; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1ACC_1SWMR_1WRITE(JNIEnv *env, jclass cls) { return H5F_ACC_SWMR_WRITE; }
+#pragma GCC diagnostic pop
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1CLOSE_1DEFAULT(JNIEnv *env, jclass cls) { return H5F_CLOSE_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1CLOSE_1SEMI(JNIEnv *env, jclass cls) { return H5F_CLOSE_SEMI; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1CLOSE_1STRONG(JNIEnv *env, jclass cls) { return H5F_CLOSE_STRONG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1CLOSE_1WEAK(JNIEnv *env, jclass cls) { return H5F_CLOSE_WEAK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1EARLIEST(JNIEnv *env, jclass cls){return H5F_LIBVER_EARLIEST;}
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1LIBVER_1LATEST(JNIEnv *env, jclass cls){return H5F_LIBVER_LATEST;}
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1ALL(JNIEnv *env, jclass cls) { return H5F_OBJ_ALL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1ATTR(JNIEnv *env, jclass cls) { return H5F_OBJ_ATTR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1DATASET(JNIEnv *env, jclass cls) { return H5F_OBJ_DATASET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1DATATYPE(JNIEnv *env, jclass cls) { return H5F_OBJ_DATATYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1FILE(JNIEnv *env, jclass cls) { return H5F_OBJ_FILE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1GROUP(JNIEnv *env, jclass cls) { return H5F_OBJ_GROUP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1OBJ_1LOCAL(JNIEnv *env, jclass cls) { return H5F_OBJ_LOCAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1SCOPE_1GLOBAL(JNIEnv *env, jclass cls) { return H5F_SCOPE_GLOBAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1SCOPE_1LOCAL(JNIEnv *env, jclass cls) { return H5F_SCOPE_LOCAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1UNLIMITED(JNIEnv *env, jclass cls) { return (jint)H5F_UNLIMITED; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1DEFAULT(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1ALL_1PERSIST(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_ALL_PERSIST; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1ALL(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_ALL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1AGGR_1VFD(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_AGGR_VFD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1VFD(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_VFD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5F_1FILE_1SPACE_1NTYPES(JNIEnv *env, jclass cls) { return H5F_FILE_SPACE_NTYPES; }
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1CORE(JNIEnv *env, jclass cls) { return H5FD_CORE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1DIRECT(JNIEnv *env, jclass cls) {
+#ifdef H5_HAVE_DIRECT
+    return H5FD_DIRECT;
+#else
+    return -1;
+#endif
+}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1FAMILY(JNIEnv *env, jclass cls) { return H5FD_FAMILY; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG(JNIEnv *env, jclass cls) { return H5FD_LOG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MPIO(JNIEnv *env, jclass cls) { return H5FD_MPIO; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MULTI(JNIEnv *env, jclass cls) { return H5FD_MULTI; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1SEC2(JNIEnv *env, jclass cls) { return H5FD_SEC2; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1STDIO(JNIEnv *env, jclass cls) { return H5FD_STDIO; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1WINDOWS(JNIEnv *env, jclass cls) {
+#ifdef H5_HAVE_WINDOWS
+    return H5FD_DIRECT;
+#else
+    return -1;
+#endif
+}
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1LOC_1READ(JNIEnv *env, jclass cls) { return H5FD_LOG_LOC_READ; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1LOC_1WRITE(JNIEnv *env, jclass cls) { return H5FD_LOG_LOC_WRITE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1LOC_1SEEK(JNIEnv *env, jclass cls) { return H5FD_LOG_LOC_SEEK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1LOC_1IO(JNIEnv *env, jclass cls) { return H5FD_LOG_LOC_IO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1FILE_1READ(JNIEnv *env, jclass cls) { return H5FD_LOG_FILE_READ; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1FILE_1WRITE(JNIEnv *env, jclass cls) { return H5FD_LOG_FILE_WRITE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1FILE_1IO(JNIEnv *env, jclass cls) { return H5FD_LOG_FILE_IO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1FLAVOR(JNIEnv *env, jclass cls) { return H5FD_LOG_FLAVOR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1NUM_1READ(JNIEnv *env, jclass cls) { return H5FD_LOG_NUM_READ; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1NUM_1WRITE(JNIEnv *env, jclass cls) { return H5FD_LOG_NUM_WRITE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1NUM_1SEEK(JNIEnv *env, jclass cls) { return H5FD_LOG_NUM_SEEK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1NUM_1TRUNCATE(JNIEnv *env, jclass cls) { return H5FD_LOG_NUM_TRUNCATE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1NUM_1IO(JNIEnv *env, jclass cls) { return H5FD_LOG_NUM_IO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1OPEN(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_OPEN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1STAT(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_STAT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1READ(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_READ; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1WRITE(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_WRITE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1SEEK(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_SEEK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1CLOSE(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_CLOSE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1TIME_1IO(JNIEnv *env, jclass cls) { return H5FD_LOG_TIME_IO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1ALLOC(JNIEnv *env, jclass cls) { return H5FD_LOG_ALLOC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1LOG_1ALL(JNIEnv *env, jclass cls) { return H5FD_LOG_ALL; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1NOLIST(JNIEnv *env, jclass cls) { return H5FD_MEM_NOLIST; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT(JNIEnv *env, jclass cls) { return H5FD_MEM_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1SUPER(JNIEnv *env, jclass cls) { return H5FD_MEM_SUPER; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1BTREE(JNIEnv *env, jclass cls) { return H5FD_MEM_BTREE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DRAW(JNIEnv *env, jclass cls) { return H5FD_MEM_DRAW; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1GHEAP(JNIEnv *env, jclass cls) { return H5FD_MEM_GHEAP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1LHEAP(JNIEnv *env, jclass cls) { return H5FD_MEM_LHEAP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1OHDR(JNIEnv *env, jclass cls) { return H5FD_MEM_OHDR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1NTYPES(JNIEnv *env, jclass cls) { return H5FD_MEM_NTYPES; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1DEFAULT_1HADDR_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(HADDR_MAX/H5FD_MEM_NTYPES); }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)0; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1SUPER_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)0; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1BTREE_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(1 * (HADDR_MAX / (H5FD_MEM_NTYPES-1))); }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1DRAW_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(2 * (HADDR_MAX / (H5FD_MEM_NTYPES-1))); }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1GHEAP_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(3 * (HADDR_MAX / (H5FD_MEM_NTYPES-1))); }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1LHEAP_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(4 * (HADDR_MAX / (H5FD_MEM_NTYPES-1))); }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5FD_1MEM_1DEFAULT_1OHDR_1SIZE(JNIEnv *env, jclass cls) { return (hsize_t)(5 * (HADDR_MAX / (H5FD_MEM_NTYPES-1))); }
+
+
+/* Symbols defined for compatibility with previous versions of the HDF5 API.
+ *
+ * Use of these symbols is deprecated.
+ */
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1DATASET(JNIEnv *env, jclass cls) { return H5G_DATASET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1GROUP(JNIEnv *env, jclass cls) { return H5G_GROUP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1LINK(JNIEnv *env, jclass cls) { return H5G_LINK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1UDLINK(JNIEnv *env, jclass cls) { return H5G_UDLINK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1RESERVED_15(JNIEnv *env, jclass cls) { return H5G_RESERVED_5; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1RESERVED_16(JNIEnv *env, jclass cls) { return H5G_RESERVED_6; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1RESERVED_17(JNIEnv *env, jclass cls) { return H5G_RESERVED_7; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1TYPE(JNIEnv *env, jclass cls) { return H5G_TYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1UNKNOWN(JNIEnv *env, jclass cls) { return H5G_UNKNOWN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1LINK_1ERROR(JNIEnv *env, jclass cls) { return H5G_LINK_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1LINK_1HARD(JNIEnv *env, jclass cls) { return H5G_LINK_HARD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1LINK_1SOFT(JNIEnv *env, jclass cls) { return H5G_LINK_SOFT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1NLIBTYPES(JNIEnv *env, jclass cls) { return H5G_NLIBTYPES; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1NTYPES(JNIEnv *env, jclass cls) { return H5G_NTYPES; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1NUSERTYPES(JNIEnv *env, jclass cls) { return H5G_NUSERTYPES; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1SAME_1LOC(JNIEnv *env, jclass cls) { return H5G_SAME_LOC; }
+
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1STORAGE_1TYPE_1UNKNOWN(JNIEnv *env, jclass cls){ return H5G_STORAGE_TYPE_UNKNOWN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1STORAGE_1TYPE_1SYMBOL_1TABLE(JNIEnv *env, jclass cls){ return H5G_STORAGE_TYPE_SYMBOL_TABLE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1STORAGE_1TYPE_1COMPACT(JNIEnv *env, jclass cls){ return H5G_STORAGE_TYPE_COMPACT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5G_1STORAGE_1TYPE_1DENSE(JNIEnv *env, jclass cls){ return H5G_STORAGE_TYPE_DENSE; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1UNINIT(JNIEnv *env, jclass cls) { return H5I_UNINIT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1BADID(JNIEnv *env, jclass cls) { return H5I_BADID; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1FILE(JNIEnv *env, jclass cls) { return H5I_FILE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1GROUP(JNIEnv *env, jclass cls) { return H5I_GROUP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1DATATYPE(JNIEnv *env, jclass cls) { return H5I_DATATYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1DATASPACE(JNIEnv *env, jclass cls) { return H5I_DATASPACE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1DATASET(JNIEnv *env, jclass cls) { return H5I_DATASET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1ATTR(JNIEnv *env, jclass cls) { return H5I_ATTR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1REFERENCE(JNIEnv *env, jclass cls) { return H5I_REFERENCE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1VFL(JNIEnv *env, jclass cls) { return H5I_VFL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1INVALID_1HID(JNIEnv *env, jclass cls) { return H5I_INVALID_HID; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1GENPROP_1CLS(JNIEnv *env, jclass cls) { return H5I_GENPROP_CLS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1GENPROP_1LST(JNIEnv *env, jclass cls) { return H5I_GENPROP_LST; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1ERROR_1CLASS(JNIEnv *env, jclass cls) { return H5I_ERROR_CLASS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1ERROR_1MSG(JNIEnv *env, jclass cls) { return H5I_ERROR_MSG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1ERROR_1STACK(JNIEnv *env, jclass cls) { return H5I_ERROR_STACK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5I_1NTYPES(JNIEnv *env, jclass cls) { return H5I_NTYPES; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5L_1TYPE_1ERROR(JNIEnv *env, jclass cls) { return H5L_TYPE_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5L_1TYPE_1HARD(JNIEnv *env, jclass cls) { return H5L_TYPE_HARD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5L_1TYPE_1SOFT(JNIEnv *env, jclass cls) { return H5L_TYPE_SOFT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5L_1TYPE_1EXTERNAL(JNIEnv *env, jclass cls) { return H5L_TYPE_EXTERNAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5L_1TYPE_1MAX(JNIEnv *env, jclass cls) { return H5L_TYPE_MAX; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1SHALLOW_1HIERARCHY_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_SHALLOW_HIERARCHY_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1EXPAND_1SOFT_1LINK_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_EXPAND_SOFT_LINK_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1EXPAND_1EXT_1LINK_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_EXPAND_EXT_LINK_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1EXPAND_1REFERENCE_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_EXPAND_REFERENCE_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1WITHOUT_1ATTR_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_WITHOUT_ATTR_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1PRESERVE_1NULL_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_PRESERVE_NULL_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1NONE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_NONE_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1SDSPACE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_SDSPACE_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1DTYPE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_DTYPE_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1FILL_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_FILL_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1PLINE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_PLINE_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1ATTR_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_ATTR_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1ALL_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_ALL_FLAG; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1TYPE_1UNKNOWN(JNIEnv *env, jclass cls) { return H5O_TYPE_UNKNOWN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1TYPE_1GROUP(JNIEnv *env, jclass cls) { return H5O_TYPE_GROUP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1TYPE_1DATASET(JNIEnv *env, jclass cls) { return H5O_TYPE_DATASET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1TYPE_1NAMED_1DATATYPE(JNIEnv *env, jclass cls) { return H5O_TYPE_NAMED_DATATYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5O_1TYPE_1NTYPES(JNIEnv *env, jclass cls) { return H5O_TYPE_NTYPES; }
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1ROOT(JNIEnv *env, jclass cls){return H5P_ROOT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1OBJECT_1CREATE(JNIEnv *env, jclass cls){return H5P_OBJECT_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1CREATE(JNIEnv *env, jclass cls){return H5P_FILE_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1ACCESS(JNIEnv *env, jclass cls){return H5P_FILE_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1CREATE(JNIEnv *env, jclass cls){return H5P_DATASET_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1ACCESS(JNIEnv *env, jclass cls){return H5P_DATASET_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1XFER(JNIEnv *env, jclass cls){return H5P_DATASET_XFER;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1MOUNT(JNIEnv *env, jclass cls){return H5P_FILE_MOUNT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1GROUP_1CREATE(JNIEnv *env, jclass cls){return H5P_GROUP_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1GROUP_1ACCESS(JNIEnv *env, jclass cls){return H5P_GROUP_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATATYPE_1CREATE(JNIEnv *env, jclass cls){return H5P_DATATYPE_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATATYPE_1ACCESS(JNIEnv *env, jclass cls){return H5P_DATATYPE_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1STRING_1CREATE(JNIEnv *env, jclass cls){return H5P_STRING_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1ATTRIBUTE_1ACCESS(JNIEnv *env, jclass cls){return H5P_ATTRIBUTE_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1ATTRIBUTE_1CREATE(JNIEnv *env, jclass cls){return H5P_ATTRIBUTE_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1OBJECT_1COPY(JNIEnv *env, jclass cls){return H5P_OBJECT_COPY;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1CREATE(JNIEnv *env, jclass cls){return H5P_LINK_CREATE;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1ACCESS(JNIEnv *env, jclass cls){return H5P_LINK_ACCESS;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_FILE_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_FILE_ACCESS_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_DATASET_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_DATASET_ACCESS_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATASET_1XFER_1DEFAULT(JNIEnv *env, jclass cls){return H5P_DATASET_XFER_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1FILE_1MOUNT_1DEFAULT(JNIEnv *env, jclass cls){return H5P_FILE_MOUNT_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1GROUP_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_GROUP_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1GROUP_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_GROUP_ACCESS_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATATYPE_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_DATATYPE_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DATATYPE_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_DATATYPE_ACCESS_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1ATTRIBUTE_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_ATTRIBUTE_ACCESS_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1ATTRIBUTE_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_ATTRIBUTE_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1OBJECT_1COPY_1DEFAULT(JNIEnv *env, jclass cls){return H5P_OBJECT_COPY_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1CREATE_1DEFAULT(JNIEnv *env, jclass cls){return H5P_LINK_CREATE_DEFAULT;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1LINK_1ACCESS_1DEFAULT(JNIEnv *env, jclass cls){return H5P_LINK_ACCESS_DEFAULT;}
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1CRT_1ORDER_1TRACKED(JNIEnv *env, jclass cls){return H5P_CRT_ORDER_TRACKED;}
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1CRT_1ORDER_1INDEXED(JNIEnv *env, jclass cls){return H5P_CRT_ORDER_INDEXED;}
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1DEFAULT(JNIEnv *env, jclass cls) { return H5P_DEFAULT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5P_1NO_1CLASS(JNIEnv *env, jclass cls) { return H5P_ROOT; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5PL_1TYPE_1ERROR(JNIEnv *env, jclass cls) { return H5PL_TYPE_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5PL_1TYPE_1FILTER(JNIEnv *env, jclass cls) { return H5PL_TYPE_FILTER; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5PL_1FILTER_1PLUGIN(JNIEnv *env, jclass cls) { return H5PL_FILTER_PLUGIN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5PL_1ALL_1PLUGIN(JNIEnv *env, jclass cls) { return H5PL_ALL_PLUGIN; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1BADTYPE(JNIEnv *env, jclass cls) { return H5R_BADTYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1MAXTYPE(JNIEnv *env, jclass cls) { return H5R_MAXTYPE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1OBJ_1REF_1BUF_1SIZE(JNIEnv *env, jclass cls) { return H5R_OBJ_REF_BUF_SIZE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1DSET_1REG_1REF_1BUF_1SIZE(JNIEnv *env, jclass cls) { return H5R_DSET_REG_REF_BUF_SIZE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1OBJECT(JNIEnv *env, jclass cls) { return H5R_OBJECT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5R_1DATASET_1REGION(JNIEnv *env, jclass cls) { return H5R_DATASET_REGION; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1ALL(JNIEnv *env, jclass cls) { return H5S_ALL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1MAX_1RANK(JNIEnv *env, jclass cls) { return H5S_MAX_RANK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1NO_1CLASS(JNIEnv *env, jclass cls) { return H5S_NO_CLASS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1NULL(JNIEnv *env, jclass cls) { return H5S_NULL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SCALAR(JNIEnv *env, jclass cls) { return H5S_SCALAR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1ALL(JNIEnv *env, jclass cls) { return H5S_SEL_ALL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1ERROR(JNIEnv *env, jclass cls) { return H5S_SEL_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1HYPERSLABS(JNIEnv *env, jclass cls) { return H5S_SEL_HYPERSLABS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1N(JNIEnv *env, jclass cls) { return H5S_SEL_N; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1NONE(JNIEnv *env, jclass cls) { return H5S_SEL_NONE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SEL_1POINTS(JNIEnv *env, jclass cls) { return H5S_SEL_POINTS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1AND(JNIEnv *env, jclass cls) { return H5S_SELECT_AND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1APPEND(JNIEnv *env, jclass cls) { return H5S_SELECT_APPEND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1INVALID(JNIEnv *env, jclass cls) { return H5S_SELECT_INVALID; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1NOOP(JNIEnv *env, jclass cls) { return H5S_SELECT_NOOP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1NOTA(JNIEnv *env, jclass cls) { return H5S_SELECT_NOTA; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1NOTB(JNIEnv *env, jclass cls) { return H5S_SELECT_NOTB; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1OR(JNIEnv *env, jclass cls) { return H5S_SELECT_OR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1PREPEND(JNIEnv *env, jclass cls) { return H5S_SELECT_PREPEND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1SET(JNIEnv *env, jclass cls) { return H5S_SELECT_SET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SELECT_1XOR(JNIEnv *env, jclass cls) { return H5S_SELECT_XOR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1SIMPLE(JNIEnv *env, jclass cls) { return H5S_SIMPLE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5S_1UNLIMITED(JNIEnv *env, jclass cls) { return (jint)H5S_UNLIMITED; }
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1B16(JNIEnv *env, jclass cls) { return H5T_ALPHA_B16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1B32(JNIEnv *env, jclass cls) { return H5T_ALPHA_B32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1B64(JNIEnv *env, jclass cls) { return H5T_ALPHA_B64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1B8(JNIEnv *env, jclass cls) { return H5T_ALPHA_B8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1F32(JNIEnv *env, jclass cls) { return H5T_ALPHA_F32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1F64(JNIEnv *env, jclass cls) { return H5T_ALPHA_F64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1I16(JNIEnv *env, jclass cls) { return H5T_ALPHA_I16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1I32(JNIEnv *env, jclass cls) { return H5T_ALPHA_I32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1I64(JNIEnv *env, jclass cls) { return H5T_ALPHA_I64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1I8(JNIEnv *env, jclass cls) { return H5T_ALPHA_I8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1U16(JNIEnv *env, jclass cls) { return H5T_ALPHA_U16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1U32(JNIEnv *env, jclass cls) { return H5T_ALPHA_U32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1U64(JNIEnv *env, jclass cls) { return H5T_ALPHA_U64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ALPHA_1U8(JNIEnv *env, jclass cls) { return H5T_ALPHA_U8; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ARRAY(JNIEnv *env, jclass cls) { return H5T_ARRAY; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1BITFIELD(JNIEnv *env, jclass cls) { return H5T_BITFIELD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1BKG_1NO(JNIEnv *env, jclass cls) { return H5T_BKG_NO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1BKG_1YES(JNIEnv *env, jclass cls) { return H5T_BKG_YES; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1C_1S1(JNIEnv *env, jclass cls) { return H5T_C_S1; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1COMPOUND(JNIEnv *env, jclass cls) { return H5T_COMPOUND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CONV_1CONV(JNIEnv *env, jclass cls) { return H5T_CONV_CONV; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CONV_1FREE(JNIEnv *env, jclass cls) { return H5T_CONV_FREE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CONV_1INIT(JNIEnv *env, jclass cls) { return H5T_CONV_INIT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1ERROR(JNIEnv *env, jclass cls) { return H5T_CSET_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1ASCII(JNIEnv *env, jclass cls) { return H5T_CSET_ASCII; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1UTF8(JNIEnv *env, jclass cls) { return H5T_CSET_UTF8; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_110(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_10; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_111(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_11; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_112(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_12; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_113(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_13; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_114(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_14; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_115(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_15; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_12(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_2; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_13(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_3; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_14(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_4; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_15(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_5; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_16(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_6; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_17(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_7; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_18(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_8; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1CSET_1RESERVED_19(JNIEnv *env, jclass cls) { return H5T_CSET_RESERVED_9; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1DIR_1ASCEND(JNIEnv *env, jclass cls) { return H5T_DIR_ASCEND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1DIR_1DEFAULT(JNIEnv *env, jclass cls) { return H5T_DIR_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1DIR_1DESCEND(JNIEnv *env, jclass cls) { return H5T_DIR_DESCEND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ENUM(JNIEnv *env, jclass cls) { return H5T_ENUM; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1FLOAT(JNIEnv *env, jclass cls) { return H5T_FLOAT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1FORTRAN_1S1(JNIEnv *env, jclass cls) { return H5T_FORTRAN_S1; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1IEEE_1F32BE(JNIEnv *env, jclass cls) { return H5T_IEEE_F32BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1IEEE_1F32LE(JNIEnv *env, jclass cls) { return H5T_IEEE_F32LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1IEEE_1F64BE(JNIEnv *env, jclass cls) { return H5T_IEEE_F64BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1IEEE_1F64LE(JNIEnv *env, jclass cls) { return H5T_IEEE_F64LE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEGER(JNIEnv *env, jclass cls) { return H5T_INTEGER; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1B16(JNIEnv *env, jclass cls) { return H5T_INTEL_B16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1B32(JNIEnv *env, jclass cls) { return H5T_INTEL_B32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1B64(JNIEnv *env, jclass cls) { return H5T_INTEL_B64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1B8(JNIEnv *env, jclass cls) { return H5T_INTEL_B8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1F32(JNIEnv *env, jclass cls) { return H5T_INTEL_F32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1F64(JNIEnv *env, jclass cls) { return H5T_INTEL_F64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1I16(JNIEnv *env, jclass cls) { return H5T_INTEL_I16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1I32(JNIEnv *env, jclass cls) { return H5T_INTEL_I32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1I64(JNIEnv *env, jclass cls) { return H5T_INTEL_I64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1I8(JNIEnv *env, jclass cls) { return H5T_INTEL_I8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1U16(JNIEnv *env, jclass cls) { return H5T_INTEL_U16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1U32(JNIEnv *env, jclass cls) { return H5T_INTEL_U32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1U64(JNIEnv *env, jclass cls) { return H5T_INTEL_U64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1INTEL_1U8(JNIEnv *env, jclass cls) { return H5T_INTEL_U8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1B16(JNIEnv *env, jclass cls) { return H5T_MIPS_B16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1B32(JNIEnv *env, jclass cls) { return H5T_MIPS_B32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1B64(JNIEnv *env, jclass cls) { return H5T_MIPS_B64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1B8(JNIEnv *env, jclass cls) { return H5T_MIPS_B8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1F32(JNIEnv *env, jclass cls) { return H5T_MIPS_F32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1F64(JNIEnv *env, jclass cls) { return H5T_MIPS_F64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1I16(JNIEnv *env, jclass cls) { return H5T_MIPS_I16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1I32(JNIEnv *env, jclass cls) { return H5T_MIPS_I32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1I64(JNIEnv *env, jclass cls) { return H5T_MIPS_I64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1I8(JNIEnv *env, jclass cls) { return H5T_MIPS_I8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1U16(JNIEnv *env, jclass cls) { return H5T_MIPS_U16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1U32(JNIEnv *env, jclass cls) { return H5T_MIPS_U32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1U64(JNIEnv *env, jclass cls) { return H5T_MIPS_U64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1MIPS_1U8(JNIEnv *env, jclass cls) { return H5T_MIPS_U8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1B16(JNIEnv *env, jclass cls) { return H5T_NATIVE_B16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1B32(JNIEnv *env, jclass cls) { return H5T_NATIVE_B32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1B64(JNIEnv *env, jclass cls) { return H5T_NATIVE_B64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1B8(JNIEnv *env, jclass cls) { return H5T_NATIVE_B8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1CHAR(JNIEnv *env, jclass cls) { return H5T_NATIVE_CHAR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1DOUBLE(JNIEnv *env, jclass cls) { return H5T_NATIVE_DOUBLE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1FLOAT(JNIEnv *env, jclass cls) { return H5T_NATIVE_FLOAT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HADDR(JNIEnv *env, jclass cls) { return H5T_NATIVE_HADDR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HBOOL(JNIEnv *env, jclass cls) { return H5T_NATIVE_HBOOL; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HERR(JNIEnv *env, jclass cls) { return H5T_NATIVE_HERR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HSIZE(JNIEnv *env, jclass cls) { return H5T_NATIVE_HSIZE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1HSSIZE(JNIEnv *env, jclass cls) { return H5T_NATIVE_HSSIZE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1FAST16(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_FAST16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1FAST32(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_FAST32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1FAST64(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_FAST64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1FAST8(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_FAST8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1LEAST16(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_LEAST16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1LEAST32(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_LEAST32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1LEAST64(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_LEAST64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT_1LEAST8(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT_LEAST8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT16(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT32(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT64(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1INT8(JNIEnv *env, jclass cls) { return H5T_NATIVE_INT8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1LDOUBLE(JNIEnv *env, jclass cls) { return H5T_NATIVE_LDOUBLE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1LLONG(JNIEnv *env, jclass cls) { return H5T_NATIVE_LLONG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1LONG(JNIEnv *env, jclass cls) { return H5T_NATIVE_LONG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1OPAQUE(JNIEnv *env, jclass cls) { return H5T_NATIVE_OPAQUE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1SCHAR(JNIEnv *env, jclass cls) { return H5T_NATIVE_SCHAR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1SHORT(JNIEnv *env, jclass cls) { return H5T_NATIVE_SHORT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UCHAR(JNIEnv *env, jclass cls) { return H5T_NATIVE_UCHAR; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1FAST16(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_FAST16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1FAST32(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_FAST32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1FAST64(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_FAST64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1FAST8(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_FAST8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1LEAST16(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_LEAST16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1LEAST32(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_LEAST32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1LEAST64(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_LEAST64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT_1LEAST8(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT_LEAST8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT16(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT16; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT32(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT32; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT64(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT64; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1UINT8(JNIEnv *env, jclass cls) { return H5T_NATIVE_UINT8; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1ULLONG(JNIEnv *env, jclass cls) { return H5T_NATIVE_ULLONG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1ULONG(JNIEnv *env, jclass cls) { return H5T_NATIVE_ULONG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NATIVE_1USHORT(JNIEnv *env, jclass cls) { return H5T_NATIVE_USHORT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NCLASSES(JNIEnv *env, jclass cls) { return H5T_NCLASSES; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NO_1CLASS(JNIEnv *env, jclass cls) { return H5T_NO_CLASS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NORM_1ERROR(JNIEnv *env, jclass cls) { return H5T_NORM_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NORM_1IMPLIED(JNIEnv *env, jclass cls) { return H5T_NORM_IMPLIED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NORM_1MSBSET(JNIEnv *env, jclass cls) { return H5T_NORM_MSBSET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NORM_1NONE(JNIEnv *env, jclass cls) { return H5T_NORM_NONE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NPAD(JNIEnv *env, jclass cls) { return H5T_NPAD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1NSGN(JNIEnv *env, jclass cls) { return H5T_NSGN; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1OPAQUE(JNIEnv *env, jclass cls) { return H5T_OPAQUE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1OPAQUE_1TAG_1MAX(JNIEnv *env, jclass cls) { return H5T_OPAQUE_TAG_MAX; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ORDER_1BE(JNIEnv *env, jclass cls) { return H5T_ORDER_BE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ORDER_1ERROR(JNIEnv *env, jclass cls) { return H5T_ORDER_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ORDER_1LE(JNIEnv *env, jclass cls) { return H5T_ORDER_LE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ORDER_1NONE(JNIEnv *env, jclass cls) { return H5T_ORDER_NONE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1ORDER_1VAX(JNIEnv *env, jclass cls) { return H5T_ORDER_VAX; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PAD_1BACKGROUND(JNIEnv *env, jclass cls) { return H5T_PAD_BACKGROUND; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PAD_1ERROR(JNIEnv *env, jclass cls) { return H5T_PAD_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PAD_1ONE(JNIEnv *env, jclass cls) { return H5T_PAD_ONE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PAD_1ZERO(JNIEnv *env, jclass cls) { return H5T_PAD_ZERO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PERS_1DONTCARE(JNIEnv *env, jclass cls) { return H5T_PERS_DONTCARE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PERS_1HARD(JNIEnv *env, jclass cls) { return H5T_PERS_HARD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1PERS_1SOFT(JNIEnv *env, jclass cls) { return H5T_PERS_SOFT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1REFERENCE(JNIEnv *env, jclass cls) { return H5T_REFERENCE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1SGN_12(JNIEnv *env, jclass cls) { return H5T_SGN_2; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1SGN_1ERROR(JNIEnv *env, jclass cls) { return H5T_SGN_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1SGN_1NONE(JNIEnv *env, jclass cls) { return H5T_SGN_NONE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B16BE(JNIEnv *env, jclass cls) { return H5T_STD_B16BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B16LE(JNIEnv *env, jclass cls) { return H5T_STD_B16LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B32BE(JNIEnv *env, jclass cls) { return H5T_STD_B32BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B32LE(JNIEnv *env, jclass cls) { return H5T_STD_B32LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B64BE(JNIEnv *env, jclass cls) { return H5T_STD_B64BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B64LE(JNIEnv *env, jclass cls) { return H5T_STD_B64LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B8BE(JNIEnv *env, jclass cls) { return H5T_STD_B8BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1B8LE(JNIEnv *env, jclass cls) { return H5T_STD_B8LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I16BE(JNIEnv *env, jclass cls) { return H5T_STD_I16BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I16LE(JNIEnv *env, jclass cls) { return H5T_STD_I16LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I32BE(JNIEnv *env, jclass cls) { return H5T_STD_I32BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I32LE(JNIEnv *env, jclass cls) { return H5T_STD_I32LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I64BE(JNIEnv *env, jclass cls) { return H5T_STD_I64BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I64LE(JNIEnv *env, jclass cls) { return H5T_STD_I64LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I8BE(JNIEnv *env, jclass cls) { return H5T_STD_I8BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1I8LE(JNIEnv *env, jclass cls) { return H5T_STD_I8LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1REF_1DSETREG(JNIEnv *env, jclass cls) { return H5T_STD_REF_DSETREG; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1REF_1OBJ(JNIEnv *env, jclass cls) { return H5T_STD_REF_OBJ; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U16BE(JNIEnv *env, jclass cls) { return H5T_STD_U16BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U16LE(JNIEnv *env, jclass cls) { return H5T_STD_U16LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U32BE(JNIEnv *env, jclass cls) { return H5T_STD_U32BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U32LE(JNIEnv *env, jclass cls) { return H5T_STD_U32LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U64BE(JNIEnv *env, jclass cls) { return H5T_STD_U64BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U64LE(JNIEnv *env, jclass cls) { return H5T_STD_U64LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U8BE(JNIEnv *env, jclass cls) { return H5T_STD_U8BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STD_1U8LE(JNIEnv *env, jclass cls) { return H5T_STD_U8LE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1ERROR(JNIEnv *env, jclass cls) { return H5T_STR_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1NULLPAD(JNIEnv *env, jclass cls) { return H5T_STR_NULLPAD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1NULLTERM(JNIEnv *env, jclass cls) { return H5T_STR_NULLTERM; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_110(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_10; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_111(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_11; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_112(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_12; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_113(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_13; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_114(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_14; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_115(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_15; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_13(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_3; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_14(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_4; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_15(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_5; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_16(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_6; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_17(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_7; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_18(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_8; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1RESERVED_19(JNIEnv *env, jclass cls) { return H5T_STR_RESERVED_9; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STR_1SPACEPAD(JNIEnv *env, jclass cls) { return H5T_STR_SPACEPAD; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1STRING(JNIEnv *env, jclass cls) { return H5T_STRING; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1TIME(JNIEnv *env, jclass cls) { return H5T_TIME; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1UNIX_1D32BE(JNIEnv *env, jclass cls) { return H5T_UNIX_D32BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1UNIX_1D32LE(JNIEnv *env, jclass cls) { return H5T_UNIX_D32LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1UNIX_1D64BE(JNIEnv *env, jclass cls) { return H5T_UNIX_D64BE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1UNIX_1D64LE(JNIEnv *env, jclass cls) { return H5T_UNIX_D64LE; }
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1VARIABLE(JNIEnv *env, jclass cls) { return (int)H5T_VARIABLE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5T_1VLEN(JNIEnv *env, jclass cls) { return H5T_VLEN; }
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1CB_1CONT(JNIEnv *env, jclass cls) { return H5Z_CB_CONT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1CB_1ERROR(JNIEnv *env, jclass cls) { return H5Z_CB_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1CB_1FAIL(JNIEnv *env, jclass cls) { return H5Z_CB_FAIL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1CB_1NO(JNIEnv *env, jclass cls) { return H5Z_CB_NO; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1DISABLE_1EDC(JNIEnv *env, jclass cls) { return H5Z_DISABLE_EDC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1ENABLE_1EDC(JNIEnv *env, jclass cls) { return H5Z_ENABLE_EDC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1ERROR_1EDC(JNIEnv *env, jclass cls) { return H5Z_ERROR_EDC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1CONFIG_1DECODE_1ENABLED(JNIEnv *env, jclass cls) { return H5Z_FILTER_CONFIG_DECODE_ENABLED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1CONFIG_1ENCODE_1ENABLED(JNIEnv *env, jclass cls) { return H5Z_FILTER_CONFIG_ENCODE_ENABLED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1DEFLATE(JNIEnv *env, jclass cls) { return H5Z_FILTER_DEFLATE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1ERROR(JNIEnv *env, jclass cls) { return H5Z_FILTER_ERROR; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1FLETCHER32(JNIEnv *env, jclass cls) { return H5Z_FILTER_FLETCHER32; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1MAX(JNIEnv *env, jclass cls) { return H5Z_FILTER_MAX; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1NBIT(JNIEnv *env, jclass cls) {return H5Z_FILTER_NBIT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1NONE(JNIEnv *env, jclass cls) { return H5Z_FILTER_NONE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1RESERVED(JNIEnv *env, jclass cls) { return H5Z_FILTER_RESERVED; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1SCALEOFFSET(JNIEnv *env, jclass cls){ return H5Z_FILTER_SCALEOFFSET; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1SHUFFLE(JNIEnv *env, jclass cls) { return H5Z_FILTER_SHUFFLE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1SZIP(JNIEnv *env, jclass cls) { return H5Z_FILTER_SZIP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1DEFMASK(JNIEnv *env, jclass cls) { return H5Z_FLAG_DEFMASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1INVMASK(JNIEnv *env, jclass cls) { return H5Z_FLAG_INVMASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1MANDATORY(JNIEnv *env, jclass cls) { return H5Z_FLAG_MANDATORY; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1OPTIONAL(JNIEnv *env, jclass cls) { return H5Z_FLAG_OPTIONAL; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1REVERSE(JNIEnv *env, jclass cls) { return H5Z_FLAG_REVERSE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FLAG_1SKIP_1EDC(JNIEnv *env, jclass cls) { return H5Z_FLAG_SKIP_EDC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1MAX_1NFILTERS(JNIEnv *env, jclass cls) { return H5Z_MAX_NFILTERS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1NO_1EDC(JNIEnv *env, jclass cls) { return H5Z_NO_EDC; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SO_1INT_1MINBITS_1DEFAULT(JNIEnv *env, jclass cls) { return H5Z_SO_INT_MINBITS_DEFAULT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SO_1FLOAT_1DSCALE(JNIEnv *env, jclass cls){return H5Z_SO_FLOAT_DSCALE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SO_1FLOAT_1ESCALE(JNIEnv *env, jclass cls){return H5Z_SO_FLOAT_ESCALE; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SO_1INT(JNIEnv *env, jclass cls){return H5Z_SO_INT; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SHUFFLE_1USER_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_SHUFFLE_USER_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SHUFFLE_1TOTAL_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_SHUFFLE_TOTAL_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1USER_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_SZIP_USER_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1TOTAL_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_SZIP_TOTAL_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1PARM_1MASK(JNIEnv *env, jclass cls) { return H5Z_SZIP_PARM_MASK; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1PARM_1PPB(JNIEnv *env, jclass cls) { return H5Z_SZIP_PARM_PPB; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1PARM_1BPP(JNIEnv *env, jclass cls) { return H5Z_SZIP_PARM_BPP; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SZIP_1PARM_1PPS(JNIEnv *env, jclass cls) { return H5Z_SZIP_PARM_PPS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1NBIT_1USER_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_NBIT_USER_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1SCALEOFFSET_1USER_1NPARMS(JNIEnv *env, jclass cls) { return H5Z_SCALEOFFSET_USER_NPARMS; }
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_HDF5Constants_H5Z_1FILTER_1ALL(JNIEnv *env, jclass cls) { return H5Z_FILTER_ALL; }
+
+#pragma GCC diagnostic pop
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
diff --git a/java/src/jni/h5Imp.c b/java/src/jni/h5Imp.c
new file mode 100644
index 0000000..05d5d59
--- /dev/null
+++ b/java/src/jni/h5Imp.c
@@ -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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ *  This code is the C-interface called by Java programs to access the
+ *  general library functions of the HDF5 library.
+ *
+ *  Each routine wraps a single HDF entry point, generally with the
+ *  analogous arguments and return codes.
+ *
+ */
+
+#include "hdf5.h"
+#include <jni.h>
+#include "h5jni.h"
+#include "h5Imp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5open
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5open(JNIEnv *env, jclass clss)
+{
+    herr_t retVal = H5open();
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5open */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5close
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5close(JNIEnv *env, jclass clss)
+{
+    herr_t retVal = H5close();
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5close */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5dont_atexit
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5dont_1atexit(JNIEnv *env, jclass clss)
+{
+    herr_t retVal = H5dont_atexit();
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5dont_1atexit */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5get_libversion
+ * Signature: ([I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5get_1libversion(JNIEnv *env, jclass clss, jintArray libversion)
+{
+    unsigned *theArray = NULL;
+    herr_t    status = -1;
+    jboolean  isCopy;
+
+    if (libversion == NULL) {
+        h5nullArgument(env, "H5get_version:  libversion is NULL");
+    } /* end if */
+    else {
+        theArray = (unsigned*)ENVPTR->GetIntArrayElements(ENVPAR libversion, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError( env, "H5get_libversion:  input not pinned");
+        } /* end if */
+        else {
+            status = H5get_libversion(&(theArray[0]), &(theArray[1]), &(theArray[2]));
+
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR libversion, (jint*)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            ENVPTR->ReleaseIntArrayElements(ENVPAR libversion, (jint*)theArray,0);
+        } /* end else */
+    } /* end else */
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5get_1libversion */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5check_version
+ * Signature: (III)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5check_1version(JNIEnv *env, jclass clss, jint majnum, jint minnum, jint relnum)
+{
+    return (jint)H5check_version((unsigned)majnum, (unsigned)minnum, (unsigned)relnum);
+} /* end Java_hdf_hdf5lib_H5_H5check_1version */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5garbage_collect
+ * Signature: ()I
+ *
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5garbage_1collect(JNIEnv *env, jclass clss)
+{
+    herr_t retVal = H5garbage_collect();
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5garbage_1collect */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5set_free_list_limits
+ * Signature: (IIIIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5set_1free_1list_1limits(JNIEnv *env, jclass clss, jint reg_global_lim, jint reg_list_lim,
+        jint arr_global_lim, jint arr_list_lim, jint blk_global_lim, jint blk_list_lim )
+{
+    herr_t retVal = H5set_free_list_limits((int)reg_global_lim, (int)reg_list_lim,
+        (int)arr_global_lim, (int)arr_list_lim, (int)blk_global_lim, (int)blk_list_lim);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5set_1free_1list_1limits */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5is_library_threadsafe
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5is_1library_1threadsafe(JNIEnv *env, jclass clss)
+{
+    hbool_t is_ts = false;
+    H5is_library_threadsafe(&is_ts);
+    return (jboolean)is_ts;
+} /* end Java_hdf_hdf5lib_H5_H5is_1library_1threadsafe */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5Imp.h b/java/src/jni/h5Imp.h
new file mode 100644
index 0000000..6600378
--- /dev/null
+++ b/java/src/jni/h5Imp.h
@@ -0,0 +1,95 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5 */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5
+#define _Included_hdf_hdf5lib_H5_H5
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5open
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5open
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5close
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5close
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5dont_atexit
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5dont_1atexit
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5get_libversion
+ * Signature: ([I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5get_1libversion
+  (JNIEnv *, jclass, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5check_version
+ * Signature: (III)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5check_1version
+  (JNIEnv *, jclass, jint, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5garbage_collect
+ * Signature: ()I
+ *
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5garbage_1collect
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5set_free_list_limits
+ * Signature: (IIIIII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5set_1free_1list_1limits
+  (JNIEnv *, jclass, jint, jint, jint, jint, jint, jint );
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5is_library_threadsafe
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5is_1library_1threadsafe
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5 */
diff --git a/java/src/jni/h5aImp.c b/java/src/jni/h5aImp.c
new file mode 100644
index 0000000..a081271
--- /dev/null
+++ b/java/src/jni/h5aImp.c
@@ -0,0 +1,879 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "hdf5.h"
+#include "h5util.h"
+#include <jni.h>
+#include <stdlib.h>
+#include <string.h>
+#include "h5aImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+#ifdef __cplusplus
+#define CBENVPTR (cbenv)
+#define CBENVPAR
+#define JVMPTR (jvm)
+#define JVMPAR
+#define JVMPAR2
+#else
+#define CBENVPTR (*cbenv)
+#define CBENVPAR cbenv,
+#define JVMPTR (*jvm)
+#define JVMPAR jvm
+#define JVMPAR2 jvm,
+#endif
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5A_iterate_cb(hid_t g_id, const char *name, const H5A_info_t *info, void *op_data);
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Acreate
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Acreate(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong type_id,
+          jlong space_id, jlong create_plist)
+{
+    hid_t       attr_id = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    attr_id = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id, (hid_t)space_id, (hid_t)create_plist, (hid_t)H5P_DEFAULT);
+
+    UNPIN_JAVA_STRING(name, aName);
+
+    if (attr_id < 0)
+        h5libraryError(env);
+
+    return (jlong)attr_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Acreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aopen_name
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aopen_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring name)
+{
+    hid_t       attr_id = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    attr_id = H5Aopen_name((hid_t)loc_id, aName);
+
+    UNPIN_JAVA_STRING(name,aName);
+
+    if (attr_id < 0)
+        h5libraryError(env);
+
+    return (jlong)attr_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Aopen_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aopen_idx
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aopen_1idx(JNIEnv *env, jclass clss, jlong loc_id, jint idx)
+{
+    hid_t attr_id =  H5Aopen_idx((hid_t)loc_id, (unsigned int) idx);
+
+    if (attr_id < 0)
+        h5libraryError(env);
+
+    return (jlong)attr_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Aopen_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Awrite
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Awrite(JNIEnv *env, jclass clss, jlong attr_id, jlong mem_type_id, jbyteArray buf)
+{
+    herr_t   status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (buf == NULL) {
+        h5nullArgument( env,"H5Awrite:  buf is NULL");
+    } /* end if */
+    else {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError(env,"H5Awrite: buf is not pinned");
+        } /* end if */
+        else {
+            status = H5Awrite((hid_t)attr_id, (hid_t)mem_type_id, byteP);
+
+            /* free the buffer without copying back */
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, JNI_ABORT);
+
+            if (status < 0)
+                h5libraryError(env);
+        }
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Awrite */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aread
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Aread(JNIEnv *env, jclass clss, jlong attr_id, jlong mem_type_id, jbyteArray buf)
+{
+    herr_t   status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (buf == NULL) {
+        h5nullArgument( env,"H5Aread:  buf is NULL");
+    } /* end if */
+    else {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError( env,"H5Aread: buf is not pinned");
+        } /* end if */
+        else {
+            status = H5Aread((hid_t)attr_id, (hid_t)mem_type_id, byteP);
+
+            if (status < 0) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else  {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Aread */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_space
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aget_1space(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Aget_space((hid_t)attr_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aget_1space */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_type
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aget_1type(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Aget_type((hid_t)attr_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aget_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1name(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    char    *aName;
+    jstring  str = NULL;
+    ssize_t  buf_size;
+
+    /* get the length of the name */
+    buf_size = H5Aget_name((hid_t)attr_id, NULL, 0);
+
+    if (buf_size <= 0) {
+        h5badArgument(env, "H5Aget_name:  buf_size <= 0");
+    } /* end if */
+    else {
+        buf_size++; /* add extra space for the null terminator */
+        aName = (char*)HDmalloc(sizeof(char) * (size_t)buf_size);
+        if (aName == NULL) {
+            h5outOfMemory(env, "H5Aget_name:  malloc failed");
+        } /* end if */
+        else {
+            buf_size = H5Aget_name((hid_t)attr_id, (size_t)buf_size, aName);
+            if (buf_size < 0) {
+                HDfree(aName);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                /* save the string; */
+                str = ENVPTR->NewStringUTF(ENVPAR aName);
+                HDfree(aName);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_num_attrs
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1num_1attrs(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    int retVal = -1;
+
+    retVal = H5Aget_num_attrs((hid_t)loc_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1num_1attrs */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Adelete(JNIEnv *env, jclass clss, jlong loc_id, jstring name)
+{
+    herr_t      status = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    status = H5Adelete((hid_t)loc_id, aName);
+
+    UNPIN_JAVA_STRING(name, aName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Adelete */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Aclose(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    herr_t retVal = -1;
+
+    if (attr_id > 0)
+        retVal = H5Aclose((hid_t)attr_id);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Acreate2
+ * Signature: (JLjava/lang/String;JJJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Acreate2(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong type_id,
+        jlong space_id, jlong create_plist, jlong access_plist)
+{
+    hid_t       status = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    status = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id,
+        (hid_t)space_id, (hid_t)create_plist, (hid_t)access_plist );
+
+    UNPIN_JAVA_STRING(name, aName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Acreate2 */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aopen(JNIEnv *env, jclass clss, jlong obj_id, jstring name, jlong access_plist)
+
+{
+    hid_t       retVal = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    retVal = H5Aopen((hid_t)obj_id, aName, (hid_t)access_plist);
+
+    UNPIN_JAVA_STRING(name, aName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aopen */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen_by_idx
+ * Signature: (JLjava/lang/String;IIJJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aopen_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint idx_type, jint order, jlong n, jlong aapl_id, jlong lapl_id)
+{
+    hid_t       retVal = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(name, aName, -1);
+
+    retVal = H5Aopen_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type,
+            (H5_iter_order_t)order, (hsize_t)n, (hid_t)aapl_id, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING(name, aName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aopen_1by_1idx */
+
+/*
+* Class:     hdf_hdf5lib_H5
+* Method:    _H5Acreate_by_name
+* Signature: (JLjava/lang/String;Ljava/lang/String;JJJJJ)J
+*/
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Acreate_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong type_id, jlong space_id, jlong acpl_id, jlong aapl_id, jlong lapl_id)
+{
+    hid_t       retVal = -1;
+    const char *aName;
+    const char *attrName;
+
+    PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, -1);
+
+    retVal = H5Acreate_by_name((hid_t)loc_id, aName, attrName, (hid_t)type_id,
+            (hid_t)space_id, (hid_t)acpl_id, (hid_t)aapl_id, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Acreate_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aexists_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Aexists_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong lapl_id)
+{
+    htri_t      retVal = -1;
+    const char *aName;
+    const char *attrName;
+
+    PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, JNI_FALSE);
+
+    retVal = H5Aexists_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jboolean)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Aexists_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Arename
+ * Signature: (JLjava/lang/String;Ljava/lang/String)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Arename(JNIEnv *env, jclass clss, jlong loc_id, jstring old_attr_name, jstring new_attr_name)
+{
+    herr_t      retVal = -1;
+    const char *oName;
+    const char *nName;
+
+    PIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName, -1);
+
+    retVal = H5Arename((hid_t)loc_id, oName, nName);
+
+    UNPIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Arename */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Arename_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Arename_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring old_attr_name, jstring new_attr_name, jlong lapl_id)
+{
+    herr_t      retVal = -1;
+    const char *aName;
+    const char *oName;
+    const char *nName;
+
+    PIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName, -1);
+
+    retVal = H5Arename_by_name((hid_t)loc_id, aName, oName, nName, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Arename_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_name_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jint idx_type, jint order, jlong n, jlong lapl_id)
+{
+    size_t   buf_size;
+    char    *aValue;
+    jlong    status_size;
+    jstring  str = NULL;
+    const char *aName;
+
+    PIN_JAVA_STRING(obj_name, aName, NULL);
+
+    /* get the length of the attribute name */
+    status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type,
+            (H5_iter_order_t) order, (hsize_t) n, (char*)NULL, (size_t)0, (hid_t)lapl_id);
+
+    if(status_size < 0) {
+        UNPIN_JAVA_STRING(obj_name, aName);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */
+
+        aValue = (char*)HDmalloc(sizeof(char) * buf_size);
+        if (aValue == NULL) {
+            UNPIN_JAVA_STRING(obj_name, aName);
+            h5outOfMemory(env, "H5Aget_name_by_idx:  malloc failed ");
+        } /* end if */
+        else {
+            status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type,
+                    (H5_iter_order_t) order, (hsize_t) n, (char*)aValue, (size_t)buf_size, (hid_t)lapl_id);
+
+            UNPIN_JAVA_STRING(obj_name, aName);
+
+            if (status_size < 0) {
+                HDfree(aValue);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                str = ENVPTR->NewStringUTF(ENVPAR aValue);
+                HDfree(aValue);
+                if (str == NULL) {
+                    /* exception -- fatal JNI error */
+                    h5JNIFatalError(env, "H5Aget_name_by_idx:  return string not created");
+                } /* end if */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_storage_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1storage_1size(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    hsize_t retVal = (hsize_t)-1;
+
+    retVal = H5Aget_storage_size((hid_t)attr_id);
+/* probably returns '0' if fails--don't do an exception */
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1storage_1size */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1info(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    herr_t     status = -1;
+    H5A_info_t ainfo;
+    jvalue     args[4];
+    jobject    ret_obj = NULL;
+
+    status = H5Aget_info((hid_t)attr_id, &ainfo);
+
+    if (status < 0) {
+       h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].z = ainfo.corder_valid;
+        args[1].j = ainfo.corder;
+        args[2].i = ainfo.cset;
+        args[3].j = (jlong)ainfo.data_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jint idx_type, jint order, jlong n, jlong lapl_id)
+{
+    herr_t      status;
+    H5A_info_t  ainfo;
+    jvalue      args[4];
+    jobject     ret_obj = NULL;
+    const char *aName;
+
+    PIN_JAVA_STRING(obj_name, aName, NULL);
+
+    status = H5Aget_info_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type,
+            (H5_iter_order_t)order, (hsize_t)n, &ainfo, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING(obj_name, aName);
+
+    if (status < 0) {
+       h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].z = ainfo.corder_valid;
+        args[1].j = ainfo.corder;
+        args[2].i = ainfo.cset;
+        args[3].j = (jlong)ainfo.data_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong lapl_id)
+{
+    const char *aName;
+    const char *attrName;
+    herr_t      status;
+    H5A_info_t  ainfo;
+    jvalue      args[4];
+    jobject     ret_obj = NULL;
+
+    PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, NULL);
+
+    status = H5Aget_info_by_name((hid_t)loc_id, aName, attrName, &ainfo, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName);
+
+    if (status < 0) {
+       h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].z = ainfo.corder_valid;
+        args[1].j = ainfo.corder;
+        args[2].i = ainfo.cset;
+        args[3].j = (jlong)ainfo.data_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Adelete_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong lapl_id)
+{
+    herr_t      retVal = -1;
+    const char *aName;
+    const char *attrName;
+
+    PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, -1);
+
+    retVal = H5Adelete_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Adelete_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aexists
+ * Signature: (JLjava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Aexists(JNIEnv *env, jclass clss, jlong obj_id, jstring attr_name)
+{
+    htri_t      bval = JNI_FALSE;
+    const char *aName;
+
+    PIN_JAVA_STRING(attr_name, aName, JNI_FALSE);
+
+    bval = H5Aexists((hid_t)obj_id, aName);
+
+    UNPIN_JAVA_STRING(attr_name, aName);
+
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Aexists */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Adelete_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jint idx_type, jint order, jlong n, jlong lapl_id)
+{
+    herr_t      status = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING0(obj_name, aName);
+
+    status = H5Adelete_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t)n, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING(obj_name, aName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Adelete_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;JJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aopen_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong aapl_id, jlong lapl_id)
+
+{
+    hid_t       status = -1;
+    const char *aName;
+    const char *oName;
+
+    PIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName, -1);
+
+    status = H5Aopen_by_name((hid_t)loc_id, oName, aName, (hid_t)aapl_id, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Aopen_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Aget_1create_1plist(JNIEnv *env, jclass clss, jlong attr_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Aget_create_plist((hid_t)attr_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Aget_1create_1plist */
+
+static herr_t
+H5A_iterate_cb(hid_t g_id, const char *name, const H5A_info_t *info, void *op_data) {
+    JNIEnv    *cbenv;
+    jint       status = -1;
+    jclass     cls;
+    jmethodID  mid;
+    jstring    str;
+    jmethodID  constructor;
+    jvalue     args[4];
+    jobject    cb_info_t = NULL;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/structs/H5A_info_t;Lhdf/hdf5lib/callbacks/H5A_iterate_t;)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+
+                args[0].z = info->corder_valid;
+                args[1].j = info->corder;
+                args[2].i = info->cset;
+                args[3].j = (jlong)info->data_size;
+                /* get a reference to your class if you don't have it already */
+                cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5A_info_t");
+                if (cls != 0) {
+                    /* get a reference to the constructor; the name is <init> */
+                    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(ZJIJ)V");
+                    if (constructor != 0) {
+                        cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+                        status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, g_id, str, cb_info_t, op_data);
+                    } /* end if (constructor != 0) */
+                } /* end if (cls != 0) */
+            } /* end if (mid != 0) */
+        } /* end if (cls != 0) */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+
+    return (herr_t)status;
+} /* end H5A_iterate_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aiterate
+ * Signature: (JIIJLjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Aiterate(JNIEnv *env, jclass clss, jlong grp_id, jint idx_type, jint order,
+          jlong idx, jobject callback_op, jobject op_data)
+{
+    hsize_t       start_idx = (hsize_t)idx;
+    herr_t        status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Literate_by_name:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        status = H5Aiterate2((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5A_operator2_t)H5A_iterate_cb, (void*)op_data);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Aiterate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aiterate_by_name
+ * Signature: (JLjava/lang/String;IIJLjava/lang/Object;Ljava/lang/Object;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name(JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order,
+          jlong idx, jobject callback_op, jobject op_data, jlong access_id)
+{
+    const char   *lName;
+    hsize_t       start_idx = (hsize_t)idx;
+    herr_t        status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Literate_by_name:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(name, lName, -1);
+
+        status = H5Aiterate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5A_operator2_t)H5A_iterate_cb, (void*)op_data, (hid_t)access_id);
+
+        UNPIN_JAVA_STRING(name, lName);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5aImp.h b/java/src/jni/h5aImp.h
new file mode 100644
index 0000000..bbc61f5
--- /dev/null
+++ b/java/src/jni/h5aImp.h
@@ -0,0 +1,273 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5A */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5A
+#define _Included_hdf_hdf5lib_H5_H5A
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Acreate
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Acreate
+  (JNIEnv *, jclass, jlong, jstring, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aopen_name
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aopen_1name
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aopen_idx
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aopen_1idx
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Awrite
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Awrite
+  (JNIEnv *, jclass, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aread
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aread
+  (JNIEnv *, jclass, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_space
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aget_1space
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_type
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aget_1type
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Aget_1name
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_num_attrs
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aget_1num_1attrs
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Adelete
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Aclose
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Acreate2
+ * Signature: (JLjava/lang/String;JJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Acreate2
+(JNIEnv *, jclass, jlong, jstring, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aopen
+  (JNIEnv *, jclass, jlong, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen_by_idx
+ * Signature: (JLjava/lang/String;IIJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aopen_1by_1idx
+  (JNIEnv *, jclass, jlong, jstring, jint, jint, jlong, jlong, jlong);
+
+/*
+* Class:     hdf_hdf5lib_H5
+* Method:    _H5Acreate_by_name
+* Signature: (JLjava/lang/String;Ljava/lang/String;JJJJJ)J
+*/
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Acreate_1by_1name
+(JNIEnv *, jclass, jlong, jstring, jstring, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aexists_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Aexists_1by_1name
+  (JNIEnv *, jclass, jlong, jstring, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Arename
+ * Signature: (JLjava/lang/String;Ljava/lang/String)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Arename
+  (JNIEnv *, jclass, jlong, jstring, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Arename_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Arename_1by_1name
+  (JNIEnv *, jclass, jlong, jstring, jstring, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_name_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx
+  (JNIEnv *, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_storage_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Aget_1storage_1size
+  (JNIEnv *, jclass, jlong);
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Aget_1info
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1idx
+  (JNIEnv *, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_info_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)Lhdf/hdf5lib/structs/H5A_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1name
+  (JNIEnv *, jclass, jlong, jstring, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Adelete_1by_1name
+  (JNIEnv *, jclass, jlong, jstring, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aexists
+ * Signature: (JLjava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Aexists
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Adelete_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Adelete_1by_1idx
+  (JNIEnv *, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Aopen_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aopen_1by_1name
+  (JNIEnv *, jclass, jlong, jstring, jstring, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Aget_1create_1plist
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aiterate
+ * Signature: (JIIJLjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aiterate
+  (JNIEnv*, jclass, jlong, jint, jint, jlong, jobject, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Aiterate_by_name
+ * Signature: (JLjava/lang/String;IIJLjava/lang/Object;Ljava/lang/Object;J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name
+  (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jobject, jobject, jlong);
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5A */
diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c
new file mode 100644
index 0000000..f70cb5e
--- /dev/null
+++ b/java/src/jni/h5dImp.c
@@ -0,0 +1,1758 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "hdf5.h"
+#include "h5util.h"
+#include "h5dImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+#ifdef __cplusplus
+  #ifdef _WINDOWS
+    #include <direct.h>
+  #endif
+  #define CBENVPTR (cbenv)
+  #define CBENVPAR
+  #define JVMPTR (jvm)
+  #define JVMPAR
+  #define JVMPAR2
+#else
+  #define CBENVPTR (*cbenv)
+  #define CBENVPAR cbenv,
+  #define JVMPTR (*jvm)
+  #define JVMPAR jvm
+  #define JVMPAR2 jvm,
+#endif
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5DreadVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
+static herr_t H5DreadVL_array (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
+static herr_t H5DwriteVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
+static herr_t H5DwriteVL_array (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
+
+/********************/
+/* Local Macros     */
+/********************/
+
+#define PIN_BYTE_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jbyte*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy); \
+}
+
+#define UNPIN_BYTE_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+#define PIN_SHORT_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jshort*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetShortArrayElements(ENVPAR buf, &isCopy); \
+}
+
+#define UNPIN_SHORT_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseShortArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+#define PIN_INT_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jint*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetIntArrayElements(ENVPAR buf, &isCopy); \
+}
+
+#define UNPIN_INT_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseIntArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+#define PIN_LONG_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jlong*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetLongArrayElements(ENVPAR buf,&isCopy); \
+}
+
+#define UNPIN_LONG_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseLongArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+#define PIN_FLOAT_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jfloat*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetFloatArrayElements(ENVPAR buf, &isCopy); \
+}
+
+#define UNPIN_FLOAT_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseFloatArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+#define PIN_DOUBLE_ARRAY() { \
+    if (isCriticalPinning) \
+        buffP = (jdouble*)ENVPTR->GetPrimitiveArrayCritical(ENVPAR buf, &isCopy); \
+    else \
+        buffP = ENVPTR->GetDoubleArrayElements(ENVPAR buf, &isCopy); \
+}
+
+#define UNPIN_DOUBLE_ARRAY(mode) { \
+    if (isCriticalPinning) \
+        ENVPTR->ReleasePrimitiveArrayCritical(ENVPAR buf, buffP, mode); \
+    else \
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR buf, buffP, mode); \
+}
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dcreate(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong type_id,
+          jlong space_id, jlong create_plist_id)
+{
+    hid_t       dset_id = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, H5P_DEFAULT, (hid_t)create_plist_id, H5P_DEFAULT);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (dset_id < 0)
+        h5libraryError(env);
+
+    return (jlong)dset_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Dcreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dopen
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dopen(JNIEnv *env, jclass clss, jlong loc_id, jstring name)
+{
+    hid_t       dset_id = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    dset_id = H5Dopen2((hid_t)loc_id, fileName, H5P_DEFAULT);
+
+    UNPIN_JAVA_STRING(name, fileName);
+    if (dset_id < 0)
+        h5libraryError(env);
+
+    return (jlong)dset_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Dopen */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_space
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dget_1space(JNIEnv *env, jclass clss, jlong dataset_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Dget_space((hid_t)dataset_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Dget_1space */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_type
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dget_1type(JNIEnv *env, jclass clss, jlong dataset_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Dget_type((hid_t)dataset_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Dget_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dget_1create_1plist(JNIEnv *env, jclass clss, jlong dataset_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Dget_create_plist((hid_t)dataset_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Dget_1create_1plist */
+
+static htri_t
+H5Tdetect_variable_str(hid_t tid) {
+    htri_t ret_val = 0;
+
+    if (H5Tget_class(tid) == H5T_COMPOUND) {
+        unsigned i;
+        unsigned nm = (unsigned)H5Tget_nmembers(tid);
+        for(i = 0; i < nm; i++) {
+            htri_t status = 0;
+            hid_t mtid = 0;
+            if((mtid = H5Tget_member_type(tid, i)) < 0)
+                return -1; /* exit immediately on error */
+            if((status = H5Tdetect_variable_str(mtid)) < 0)
+                return status; /* exit immediately on error */
+            ret_val |= status;
+            H5Tclose (mtid);
+        } /* end for */
+    } /* end if */
+    else
+        ret_val = H5Tis_variable_str(tid);
+
+    return ret_val;
+} /* end H5Tdetect_variable_str */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread
+ * Signature: (JJJJJ[BZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jbyteArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status;
+    jbyte   *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_BYTE_ARRAY();
+
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_BYTE_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_BYTE_ARRAY(0); /* update java buffer for return */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite
+ * Signature: (JJJJJ[BZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jbyteArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status;
+    jbyte   *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_BYTE_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_BYTE_ARRAY(JNI_ABORT); /* no need to update buffer */
+
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Dclose(JNIEnv *env, jclass clss, jlong dataset_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Dclose((hid_t)dataset_id);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Dclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_storage_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Dget_1storage_1size(JNIEnv *env, jclass clss, jlong dataset_id)
+{
+    hsize_t retVal = (hsize_t)-1;
+
+    if (dataset_id < 0) {
+        h5badArgument(env, "H5Dget_storage_size: not a dataset");
+    } /* end if */
+    else {
+        retVal = H5Dget_storage_size((hid_t)dataset_id);
+    } /* end else */
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Dget_1storage_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dvlen_reclaim
+ * Signature: (JJJ[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dvlen_1reclaim(JNIEnv *env, jclass clss, jlong type_id, jlong space_id,
+          jlong xfer_plist_id, jbyteArray buf)
+{
+    herr_t   status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dvlen_reclaim:  buf is NULL");
+    } /* end if */
+    else {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError(env, "H5Dvlen_reclaim:  buf not pinned");
+        } /* end if */
+        else {
+            status = H5Dvlen_reclaim((hid_t)type_id, (hid_t)space_id, (hid_t)xfer_plist_id, byteP);
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, JNI_ABORT);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dvlen_1reclaim */
+
+/*
+    ////////////////////////////////////////////////////////////////////
+    //                                                                //
+    //         New APIs for read data from library                    //
+    //  Using H5Dread(..., Object buf) requires function calls        //
+    //  theArray.emptyBytes() and theArray.arrayify(buf), which       //
+    //  triples the actual memory needed by the data set.             //
+    //  Using the following APIs solves the problem.                  //
+    //                                                                //
+    ////////////////////////////////////////////////////////////////////
+*/
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_short
+ * Signature: (JJJJJ[SZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1short(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jshortArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jshort  *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_short:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread_short:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread_short: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread_short:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_SHORT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread_short:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_SHORT_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_SHORT_ARRAY(0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1short */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_short
+ * Signature: (JJJJJ[SZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1short(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jshortArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jshort  *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL ) {
+        h5nullArgument(env, "H5Dwrite_short:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite_short: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite_short:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite_short: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite_short:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_SHORT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite_short:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_SHORT_ARRAY(JNI_ABORT);
+
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1short */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_int
+ * Signature: (JJJJJ[IZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1int(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jintArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jint    *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_int:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread_int: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread_int:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread_int: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread_int:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_INT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread_int:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_INT_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_INT_ARRAY(0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_int
+ * Signature: (JJJJJ[IZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1int(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jintArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jint    *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_int:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite_int: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite_int:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite_int: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite_int:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_INT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite_int:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_INT_ARRAY(JNI_ABORT);
+
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_long
+ * Signature: (JJJJJ[JZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1long(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jlongArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jlong   *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_long:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread_long: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread_long:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread_long: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread_long:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_LONG_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread_long:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_LONG_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_LONG_ARRAY(0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_long
+ * Signature: (JJJJJ[JZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1long(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jlongArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jlong   *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_long:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite_long: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite_long:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite_long: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite_long:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_LONG_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite_long:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_LONG_ARRAY(JNI_ABORT);
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_float
+ * Signature: (JJJJJ[FZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1float(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jfloatArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jfloat  *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_float:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread_float: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread_float:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread_float: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread_float:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_FLOAT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread_float:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_FLOAT_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_FLOAT_ARRAY(0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1float */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_float
+ * Signature: (JJJJJ[FZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1float(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jfloatArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jfloat  *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_float:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite_float: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite_float:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite_float: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite_float:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_FLOAT_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite_float:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_FLOAT_ARRAY(JNI_ABORT);
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1float */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_double
+ * Signature: (JJJJJ[DZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1double(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jdoubleArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jdouble *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_double:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dread_double: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dread_double:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dread_double: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dread_double:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_DOUBLE_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dread_double:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                if (status < 0) {
+                    UNPIN_DOUBLE_ARRAY(JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    UNPIN_DOUBLE_ARRAY(0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1double */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_double
+ * Signature: (JJJJJ[DZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1double(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jdoubleArray buf, jboolean isCriticalPinning)
+{
+    herr_t   status = -1;
+    jdouble *buffP;
+    jboolean isCopy;
+    htri_t data_class;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_double:  buf is NULL");
+    } /* end if */
+    else if((data_class = H5Tdetect_class(mem_type_id, H5T_VLEN)) < 0) {
+        h5JNIFatalError(env, "H5Dwrite_double: H5Tdetect_class() failed");
+    } /* end else if */
+    else  if(data_class == 1) {
+        h5badArgument(env, "H5Dwrite_double:  buf does not support variable length type");
+    } /* end else if */
+    else {
+        /* recursive detect any vlen string in type (compound, array ...) */
+        if((data_class = H5Tdetect_variable_str(mem_type_id)) < 0) {
+            h5JNIFatalError(env, "H5Dwrite_double: H5Tdetect_variable_str() failed");
+        } /* end if */
+        else  if(data_class == 1) {
+            h5badArgument(env, "H5Dwrite_double:  buf does not support variable length type");
+        } /* end else if */
+        else {
+            PIN_DOUBLE_ARRAY();
+            if (buffP == NULL) {
+                h5JNIFatalError(env, "H5Dwrite_double:  buf not pinned");
+            } /* end if */
+            else {
+                status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, buffP);
+
+                UNPIN_DOUBLE_ARRAY(JNI_ABORT);
+                if (status < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1double */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_string
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1string(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jobjectArray j_buf)
+{
+    herr_t  status = -1;
+    char   *c_buf;
+    char   *cstr;
+    size_t  str_len;
+    jsize   i;
+    jsize   n;
+    size_t  pos;
+    jstring jstr;
+
+    c_buf = cstr = NULL;
+    if (j_buf == NULL) {
+        h5nullArgument(env, "H5Dread_string:  buf is NULL");
+    } /* end if */
+    else if ((n = ENVPTR->GetArrayLength(ENVPAR j_buf)) <= 0) {
+        h5nullArgument(env, "H5Dread_string:  buf length <= 0");
+    } /* end else if */
+    else if ((str_len = H5Tget_size((hid_t)mem_type_id)) <=0) {
+        h5libraryError(env);
+    } /* end else if */
+    else {
+        if ((cstr = (char*)HDmalloc(str_len + 1)) == NULL) {
+            h5JNIFatalError(env, "H5Dread_string: memory allocation failed.");
+        } /* end if */
+        else {
+            if ((c_buf = (char*)HDmalloc((size_t)n * str_len)) == NULL) {
+                if (cstr)
+                    HDfree(cstr);
+                cstr = NULL;
+                h5JNIFatalError(env, "H5Dread_string: memory allocation failed.");
+            } /* end if */
+            else {
+                status = H5Dread((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                                (hid_t)file_space_id, (hid_t)xfer_plist_id, c_buf);
+
+                if (status < 0) {
+                    if (cstr)
+                        HDfree(cstr);
+                    cstr = NULL;
+                    if (c_buf)
+                        HDfree(c_buf);
+                    c_buf = NULL;
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    pos = 0;
+                    for (i = 0; i < n; i++) {
+                        HDmemcpy(cstr, c_buf+pos, str_len);
+                        cstr[str_len] = '\0';
+                        jstr = ENVPTR->NewStringUTF(ENVPAR cstr);
+                        ENVPTR->SetObjectArrayElement(ENVPAR j_buf, i, jstr);
+                        pos += str_len;
+                    } /* end for */
+                } /* end else */
+
+                if (c_buf)
+                    HDfree(c_buf);
+            } /* end else cbuf allocation*/
+
+            if (cstr)
+                HDfree(cstr);
+        } /* end else cstr allocation*/
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1string */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_string
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1string(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jobjectArray j_buf)
+{
+    herr_t  status = -1;
+    char   *c_buf;
+    jsize  str_len;
+    jsize   i;
+    jsize   n;
+
+    if (j_buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_string:  buf is NULL");
+    } /* end if */
+    else if ((n = ENVPTR->GetArrayLength(ENVPAR j_buf)) <= 0) {
+        h5nullArgument(env, "H5Dwrite_string:  buf length <= 0");
+    } /* end else if */
+    else if ((str_len = (jsize)H5Tget_size((hid_t)mem_type_id)) <=0) {
+        h5libraryError(env);
+    } /* end else if */
+    else {
+        if ((c_buf = (char*)HDmalloc((size_t)n * (size_t)str_len)) == NULL) {
+            h5JNIFatalError(env, "H5Dwrite_string: memory allocation failed.");
+        } /* end if */
+        else {
+            for (i = 0; i < n; i++) {
+                jstring obj = (jstring)ENVPTR->GetObjectArrayElement(ENVPAR (jobjectArray)j_buf, i);
+                if (obj != 0) {
+                    jsize length = ENVPTR->GetStringUTFLength(ENVPAR obj);
+                    const char *utf8 = ENVPTR->GetStringUTFChars(ENVPAR obj, 0);
+
+                    if (utf8) {
+                        strncpy(&c_buf[i * str_len], utf8, str_len);
+                    } /* end if */
+
+                    ENVPTR->ReleaseStringUTFChars(ENVPAR obj, utf8);
+                    ENVPTR->DeleteLocalRef(ENVPAR obj);
+                } /* end if */
+            } /* end for */
+
+            status = H5Dwrite((hid_t)dataset_id, (hid_t)mem_type_id, (hid_t)mem_space_id,
+                            (hid_t)file_space_id, (hid_t)xfer_plist_id, c_buf);
+
+            if (c_buf)
+                HDfree(c_buf);
+            c_buf = NULL;
+
+            if (status < 0) {
+                h5libraryError(env);
+            } /* end if */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1string */
+
+/**
+ *  Read VLEN data into array of arrays.
+ *  Object[] buf contains VL arrays of data points
+ *  Currently only deal with variable length of atomic data types
+ */
+/* old version */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_VLStrings
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jobjectArray buf)
+{
+    herr_t  status = -1;
+    htri_t  isVlenStr=0;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dread_VLStrings:  buf is NULL");
+    } /* end if */
+    else {
+        isVlenStr = H5Tis_variable_str((hid_t)mem_type_id);
+
+        if (isVlenStr) {
+            status = H5DreadVL_str(env, (hid_t)dataset_id, (hid_t)mem_type_id,
+                                        (hid_t)mem_space_id, (hid_t)file_space_id,
+                                        (hid_t)xfer_plist_id, buf);
+        } /* end if */
+        else
+            h5badArgument(env, "H5Dread_VLStrings: type is not variable length String");
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1VLStrings */
+
+herr_t
+H5DreadVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t
+        file_sid, hid_t xfer_plist_id, jobjectArray buf)
+{
+    char  **strs;
+    jstring jstr;
+    jint    i;
+    jint    n;
+    herr_t  status = -1;
+
+    n = ENVPTR->GetArrayLength(ENVPAR buf);
+    strs =(char**)HDcalloc((size_t)n, sizeof(char*));
+
+    if (strs == NULL) {
+        h5JNIFatalError(env, "H5DreadVL_str:  failed to allocate buff for read variable length strings");
+    } /* end if */
+    else {
+        status = H5Dread(did, tid, mem_sid, file_sid, xfer_plist_id, strs);
+
+        if (status < 0) {
+            H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, strs);
+            HDfree(strs);
+            h5JNIFatalError(env, "H5DreadVL_str: failed to read variable length strings");
+        } /* end if */
+        else {
+            for (i=0; i < n; i++) {
+                jstr = ENVPTR->NewStringUTF(ENVPAR strs[i]);
+                ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr);
+                H5free_memory (strs[i]);
+            } /* end for */
+
+            /*
+            for repeatedly reading a dataset with a large number of strs (e.g., 1,000,000 strings,
+            H5Dvlen_reclaim() may crash on Windows because the Java GC will not be able to collect
+            free space in time. Instead, use "H5free_memory(strs[i])" above to free individual strings
+            after it is done.
+            H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, strs);
+            */
+
+            HDfree(strs);
+        } /* end else */
+    } /* end else */
+
+    return status;
+} /* end H5DreadVL_str */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_VLStrings
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings(JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+          jlong file_space_id, jlong xfer_plist_id, jobjectArray buf)
+{
+    herr_t  status = -1;
+    htri_t  isVlenStr=0;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dwrite_VLStrings:  buf is NULL");
+    } /* end if */
+    else {
+        isVlenStr = H5Tis_variable_str((hid_t)mem_type_id);
+
+        if (isVlenStr) {
+            status = H5DwriteVL_str(env, (hid_t)dataset_id, (hid_t)mem_type_id,
+                                        (hid_t)mem_space_id, (hid_t)file_space_id,
+                                        (hid_t)xfer_plist_id, buf);
+        } /* end if */
+        else
+            h5badArgument(env, "H5Dwrite_VLStrings: type is not variable length String");
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings */
+
+herr_t
+H5DwriteVL_str(JNIEnv *env, hid_t dataset_id, hid_t mem_type_id, hid_t mem_space_id,
+        hid_t file_space_id, hid_t xfer_plist_id, jobjectArray buf)
+{
+    herr_t  status = -1;
+    char  **wdata;
+    jsize   size;
+    jsize    i;
+
+    size = ENVPTR->GetArrayLength(ENVPAR (jarray) buf);
+    wdata = (char**)HDmalloc((size_t)size * sizeof (char*));
+
+    if (!wdata) {
+        h5JNIFatalError(env, "H5DwriteVL_string:  cannot allocate buffer");
+    } /* end if */
+    else {
+        HDmemset(wdata, 0, (size_t)size * sizeof(char*));
+        for (i = 0; i < size; ++i) {
+            jstring obj = (jstring) ENVPTR->GetObjectArrayElement(ENVPAR (jobjectArray)buf, i);
+            if (obj != 0) {
+                jsize length = ENVPTR->GetStringUTFLength(ENVPAR obj);
+                const char *utf8 = ENVPTR->GetStringUTFChars(ENVPAR obj, 0);
+
+                if (utf8) {
+                    wdata[i] = (char*)HDmalloc((size_t)length + 1);
+                    if (wdata[i]) {
+                        HDmemset(wdata[i], 0, (size_t)length + 1);
+                        HDstrncpy(wdata[i], utf8, (size_t)length + 1);
+                    } /* end if */
+                } /* end if */
+
+                ENVPTR->ReleaseStringUTFChars(ENVPAR obj, utf8);
+                ENVPTR->DeleteLocalRef(ENVPAR obj);
+            } /* end if */
+        } /* end for (i = 0; i < size; ++i) */
+
+        status = H5Dwrite(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, wdata);
+
+        /* now free memory*/
+        for (i = 0; i < size; i++) {
+            if(wdata[i]) {
+                HDfree(wdata[i]);
+            } /* end if */
+        } /* end for */
+        HDfree(wdata);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return status;
+} /* end H5DwriteVL_str */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_reg_ref
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref (JNIEnv *env, jclass clss,
+        jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+        jlong file_space_id, jlong xfer_plist_id, jobjectArray buf)
+{
+    herr_t    status = -1;
+    h5str_t   h5str;
+    size_t    size;
+    hdset_reg_ref_t *ref_data;
+    jint      i;
+    jint      n;
+    jstring   jstr;
+
+    hid_t region = -1;
+    hid_t did = (hid_t) dataset_id;
+    hid_t tid = (hid_t) mem_type_id;
+    hid_t mem_sid = (hid_t) mem_space_id;
+    hid_t file_sid = (hid_t) file_space_id;
+
+    n = ENVPTR->GetArrayLength(ENVPAR buf);
+    size = sizeof(hdset_reg_ref_t); /*H5Tget_size(tid);*/
+    ref_data = (hdset_reg_ref_t*)HDmalloc(size * (size_t)n);
+
+    if (ref_data == NULL) {
+        h5JNIFatalError(env, "H5Dread_reg_ref:  failed to allocate buff for read");
+        return -1;
+    } /* end if */
+
+    status = H5Dread(did, tid, mem_sid, file_sid, xfer_plist_id, ref_data);
+
+    if (status < 0) {
+        HDfree(ref_data);
+        h5JNIFatalError(env, "H5Dread_reg_ref: failed to read data");
+        return -1;
+    } /* end if */
+
+    HDmemset(&h5str, 0, sizeof(h5str_t));
+    h5str_new(&h5str, 1024);
+    for (i=0; i<n; i++) {
+        h5str.s[0] = '\0';
+        h5str_sprintf(&h5str, did, tid, ref_data[i], 0);
+        jstr = ENVPTR->NewStringUTF(ENVPAR h5str.s);
+
+        ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr);
+    } /* end for */
+
+    h5str_free(&h5str);
+    HDfree(ref_data);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_reg_ref_data
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref_1data (JNIEnv *env, jclass clss,
+        jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+        jlong file_space_id, jlong xfer_plist_id, jobjectArray buf)
+{
+    herr_t    status = -1;
+    h5str_t   h5str;
+    size_t    size;
+    hdset_reg_ref_t *ref_data;
+    jint      i;
+    jint      n;
+    jstring   jstr;
+
+    hid_t        region_obj;
+    H5S_sel_type region_type;
+
+    hid_t region = -1;
+    hid_t did = (hid_t) dataset_id;
+    hid_t tid = (hid_t) mem_type_id;
+    hid_t mem_sid = (hid_t) mem_space_id;
+    hid_t file_sid = (hid_t) file_space_id;
+
+    n = ENVPTR->GetArrayLength(ENVPAR buf);
+    size = sizeof(hdset_reg_ref_t); /*H5Tget_size(tid);*/
+    ref_data = (hdset_reg_ref_t*)HDmalloc(size * (size_t)n);
+
+    if (ref_data == NULL) {
+        h5JNIFatalError(env, "H5Dread_reg_ref_data:  failed to allocate buff for read");
+        return -1;
+    } /* end if */
+
+    status = H5Dread(did, tid, mem_sid, file_sid, xfer_plist_id, ref_data);
+
+    if (status < 0) {
+        HDfree(ref_data);
+        h5JNIFatalError(env, "H5Dread_reg_ref_data: failed to read data");
+        return -1;
+    } /* end if */
+
+    HDmemset(&h5str, 0, sizeof(h5str_t));
+    h5str_new(&h5str, 1024);
+    for (i=0; i<n; i++) {
+        h5str.s[0] = '\0';
+
+        /* get name of the dataset the region reference points to using H5Rget_name */
+        region_obj = H5Rdereference2(did, H5P_DEFAULT, H5R_DATASET_REGION, ref_data[i]);
+        if (region_obj >= 0) {
+            region = H5Rget_region(did, H5R_DATASET_REGION, ref_data[i]);
+            if (region >= 0) {
+                region_type = H5Sget_select_type(region);
+                if(region_type==H5S_SEL_POINTS) {
+                    h5str_dump_region_points_data(&h5str, region, region_obj);
+                } /* end if */
+                else {
+                    h5str_dump_region_blocks_data(&h5str, region, region_obj);
+                } /* end else */
+
+                H5Sclose(region);
+            } /* end if */
+            H5Dclose(region_obj);
+        } /* end if */
+        jstr = ENVPTR->NewStringUTF(ENVPAR h5str.s);
+
+        ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr);
+    } /* end for */
+
+    h5str_free(&h5str);
+    HDfree(ref_data);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref_1data */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate2
+ * Signature: (JLjava/lang/String;JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dcreate2(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong type_id,
+          jlong space_id, jlong link_plist_id, jlong create_plist_id, jlong access_plist_id)
+{
+    hid_t       dset_id = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id);
+
+    UNPIN_JAVA_STRING(name, fileName);
+    if (dset_id < 0)
+        h5libraryError(env);
+
+    return (jlong)dset_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Dcreate2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dopen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dopen2(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist)
+{
+    hid_t       dset_id;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    dset_id = H5Dopen2((hid_t)loc_id, fileName, (hid_t)access_plist);
+
+    UNPIN_JAVA_STRING(name, fileName);
+    if (dset_id < 0)
+        h5libraryError(env);
+
+    return (jlong)dset_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Dopen2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate_anon
+ * Signature: (JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Dcreate_1anon(JNIEnv *env, jclass clss, jlong loc_id, jlong type_id, jlong space_id, jlong dcpl_id, jlong dapl_id)
+{
+    hid_t dset_id = -1;
+
+    dset_id = H5Dcreate_anon((hid_t)loc_id, (hid_t)type_id, (hid_t)space_id, (hid_t)dcpl_id, (hid_t)dapl_id);
+    if (dset_id < 0)
+        h5libraryError(env);
+
+    return (jlong)dset_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Dcreate_1anon */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_space_status
+ * Signature: (J)I;
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dget_1space_1status(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    H5D_space_status_t space_status = H5D_SPACE_STATUS_ERROR;
+
+    if (H5Dget_space_status((hid_t)loc_id, &space_status) < 0)
+        h5libraryError(env);
+
+    return (jint)space_status;
+} /* end Java_hdf_hdf5lib_H5_H5Dget_1space_1status */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_access_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Dget_1access_1plist(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Dget_access_plist((hid_t)loc_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Dget_1access_1plist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_offset
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Dget_1offset(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    haddr_t offset = HADDR_UNDEF;
+
+    offset = H5Dget_offset((hid_t)loc_id);
+    if (offset == HADDR_UNDEF)
+        h5libraryError(env);
+
+    return (jlong)offset;
+} /* end Java_hdf_hdf5lib_H5_H5Dget_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dvlen_get_buf_size
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Dvlen_1get_1buf_1size(JNIEnv *env, jclass clss, jlong dataset_id, jlong type_id, jlong space_id)
+{
+  hsize_t sz = 0;
+
+  if (H5Dvlen_get_buf_size((hid_t)dataset_id, (hid_t)type_id, (hid_t)space_id, &sz) < 0)
+      h5libraryError(env);
+
+  return (jlong)sz;
+} /* end Java_hdf_hdf5lib_H5_H5Dvlen_1get_1buf_1size_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dfill
+ * Signature: ([BJ[BJJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Dfill(JNIEnv *env, jclass clss, jbyteArray fill, jlong fill_type_id, jbyteArray buf, jlong buf_type_id, jlong space_id)
+{
+    herr_t    status;
+    jbyte    *fillP;
+    jbyte    *buffP;
+    jboolean  isCopy1;
+    jboolean  isCopy2;
+
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dfill:  buf is NULL");
+        return;
+    } /* end if */
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy2);
+    if (buffP == NULL) {
+        h5JNIFatalError(env, "H5Dfill:  buf not pinned");
+        return;
+    } /* end if */
+
+    if(fill) {
+        fillP = ENVPTR->GetByteArrayElements(ENVPAR fill, &isCopy1);
+        if (fillP == NULL) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT);
+            h5JNIFatalError( env, "H5Dfill:  fill not pinned");
+            return;
+        } /* end if */
+    } /* end if */
+    else
+        fillP = NULL;
+
+    status = H5Dfill((const void*)fillP, (hid_t)fill_type_id, (void*)buffP, (hid_t)buf_type_id, (hid_t)space_id);
+    if(fillP) {
+        /* free the buffer without copying back */
+        /* end if */ ENVPTR->ReleaseByteArrayElements(ENVPAR fill, fillP, JNI_ABORT);
+    }
+    if (status < 0) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (isCopy2 == JNI_TRUE) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0);
+        } /* end if */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Dfill */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dset_extent
+ * Signature: (J[J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Dset_1extent(JNIEnv *env, jclass clss, jlong loc_id, jlongArray buf)
+{
+    herr_t    status;
+    hsize_t  *dims;
+    jlong    *buffP;
+    jsize     rank;
+    jboolean  isCopy;
+    int       i = 0;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Dset_extent:  buf is NULL");
+        return;
+    } /* end if */
+
+    rank = ENVPTR->GetArrayLength(ENVPAR buf);
+    if (rank <= 0) {
+        h5JNIFatalError(env, "H5Dset_extent:  rank <=0");
+    } /* end if */
+    else {
+        buffP = ENVPTR->GetLongArrayElements(ENVPAR buf, &isCopy);
+        if (buffP == NULL) {
+            h5JNIFatalError( env, "H5Dset_extent:  buf not pinned");
+        } /* end if */
+        else {
+            dims = (hsize_t*)HDmalloc((size_t)rank * sizeof(hsize_t));
+            for (i = 0; i< rank; i++)
+                dims[i] = (hsize_t)buffP[i];
+
+            status = H5Dset_extent((hid_t)loc_id, (hsize_t*)dims);
+
+            HDfree (dims);
+
+            /* free the buffer without copying back */
+            ENVPTR->ReleaseLongArrayElements(ENVPAR buf, buffP, JNI_ABORT);
+
+            if (status < 0) {
+                h5libraryError(env);
+            } /* end if */
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Dset_1extent */
+
+static herr_t
+H5D_iterate_cb(void* elem, hid_t elem_id, unsigned ndim, const hsize_t *point, void *op_data) {
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jbyteArray elemArray;
+    jlongArray pointArray;
+    jsize      size;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) != 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+    if (cls == 0) {
+       JVMPTR->DetachCurrentThread(JVMPAR);
+       return -1;
+    } /* end if */
+    mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "([BJI[JLhdf/hdf5lib/callbacks/H5D_iterate_t;)I");
+    if (mid == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+
+    if (elem == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    if (point == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+
+    size = (jsize)H5Tget_size(elem_id);
+    elemArray = CBENVPTR->NewByteArray(CBENVPAR size);
+    if (elemArray == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    CBENVPTR->SetByteArrayRegion(CBENVPAR elemArray, 0, size, (jbyte *)elem);
+
+    pointArray = CBENVPTR->NewLongArray(CBENVPAR 2);
+    if (pointArray == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    CBENVPTR->SetLongArrayRegion(CBENVPAR pointArray, 0, 2, (const jlong *)point);
+
+    status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, (void*)elemArray, elem_id, ndim, pointArray, op_data);
+
+    CBENVPTR->GetByteArrayRegion(CBENVPAR elemArray, 0, size, (jbyte *)elem);
+
+    JVMPTR->DetachCurrentThread(JVMPAR);
+
+    return status;
+} /* end H5D_iterate_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Diterate
+ * Signature: ([BJJLjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Diterate(JNIEnv *env, jclass clss, jbyteArray buf, jlong buf_type, jlong space,
+          jobject callback_op, jobject op_data)
+{
+    herr_t        status = -1;
+    jboolean      isCopy;
+    jbyte        *buffP;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if (op_data == NULL) {
+        h5nullArgument(env,  "H5Diterate:  op_data is NULL");
+        return -1;
+    } /* end if */
+    if (callback_op == NULL) {
+        h5nullArgument(env,  "H5Diterate:  callback_op is NULL");
+        return -1;
+    } /* end if */
+
+    if (buf == NULL) {
+        h5nullArgument(env,  "H5Diterate:  buf is NULL");
+        return -1;
+    } /* end if */
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+    if (buffP == NULL) {
+        h5JNIFatalError(env, "H5Diterate:  buf not pinned");
+    } /* end if */
+    else {
+        status = H5Diterate((void*)buffP, (hid_t)buf_type, (hid_t)space, (H5D_operator_t)H5D_iterate_cb, (void*)op_data);
+
+        if (status < 0) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT);
+        h5libraryError(env);
+        } /* end if */
+        else {
+            if (isCopy == JNI_TRUE) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0);
+            } /* end if */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Diterate */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5dImp.h b/java/src/jni/h5dImp.h
new file mode 100644
index 0000000..12078e8
--- /dev/null
+++ b/java/src/jni/h5dImp.h
@@ -0,0 +1,319 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5D */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5D
+#define _Included_hdf_hdf5lib_H5_H5D
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dcreate
+  (JNIEnv*, jclass, jlong, jstring, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dopen
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dopen
+  (JNIEnv*, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_space
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dget_1space
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_type
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dget_1type
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dget_1create_1plist
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread
+ * Signature: (JJJJJ[BZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jbyteArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite
+ * Signature: (JJJJJ[BZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jbyteArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Dclose
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_storage_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Dget_1storage_1size
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dvlen_reclaim
+ * Signature: (JJJ[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dvlen_1reclaim
+  (JNIEnv*, jclass, jlong, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_short
+ * Signature: (JJJJJ[SZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1short
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jshortArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_short
+ * Signature: (JJJJJ[SZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1short
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jshortArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_int
+ * Signature: (JJJJJ[IZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1int
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jintArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_int
+ * Signature: (JJJJJ[IZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1int
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jintArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_long
+ * Signature: (JJJJJ[JZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1long
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jlongArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_long
+ * Signature: (JJJJJ[JZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1long
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jlongArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_float
+ * Signature: (JJJJJ[FZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1float
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jfloatArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_float
+ * Signature: (JJJJJ[FZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1float
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jfloatArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_double
+ * Signature: (JJJJJ[DZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1double
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jdoubleArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_double
+ * Signature: (JJJJJ[DZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1double
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jdoubleArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_string
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1string
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_string
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1string
+(JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_VLStrings
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1VLStrings
+(JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dwrite_VLStrings
+ * Signature: (JJJJJ[BZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dwrite_1VLStrings
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_reg_ref
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref
+(JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dread_reg_ref_data
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dread_1reg_1ref_1data
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate2
+ * Signature: (JLjava/lang/String;JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dcreate2
+  (JNIEnv*, jclass, jlong, jstring, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dopen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dopen2
+  (JNIEnv*, jclass, jlong, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Dcreate_anon
+ * Signature: (JJJJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dcreate_1anon
+  (JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_space_status
+ * Signature: (J)I;
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dget_1space_1status
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_access_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Dget_1access_1plist
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dget_offset
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Dget_1offset
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dvlen_get_buf_size
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Dvlen_1get_1buf_1size
+  (JNIEnv*, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dfill
+ * Signature: ([BJ[BJJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Dfill
+  (JNIEnv*, jclass, jbyteArray, jlong, jbyteArray, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dset_extent
+ * Signature: (J[J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Dset_1extent
+  (JNIEnv*, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Diterate
+ * Signature: ([BJJLjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Diterate
+  (JNIEnv*, jclass, jbyteArray, jlong, jlong, jobject, jobject);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5D */
diff --git a/java/src/jni/h5eImp.c b/java/src/jni/h5eImp.c
new file mode 100644
index 0000000..f0c4135
--- /dev/null
+++ b/java/src/jni/h5eImp.c
@@ -0,0 +1,524 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ *  This code is the C-interface called by Java programs to access the
+ *  general library functions of the HDF5 library.
+ *
+ *  Each routine wraps a single HDF entry point, generally with the
+ *  analogous arguments and return codes.
+ *
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *   http://www.hdfgroup.org/HDF5/doc/
+ *
+ */
+
+#include <jni.h>
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "h5eImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+#ifdef __cplusplus
+  #define CBENVPTR (cbenv)
+  #define CBENVPAR
+  #define JVMPTR (jvm)
+  #define JVMPAR
+  #define JVMPAR2
+#else /* __cplusplus */
+  #define CBENVPTR (*cbenv)
+  #define CBENVPAR cbenv,
+  #define JVMPTR (*jvm)
+  #define JVMPAR jvm
+  #define JVMPAR2 jvm,
+#endif /* __cplusplus */
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5E_walk_cb(int nindx, const H5E_error2_t *info, void *op_data);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eauto_is_v2
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Eauto_1is_1v2(JNIEnv *env, jclass cls, jlong stk_id)
+{
+    unsigned int is_stack = 0;
+
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eauto_is_v2: invalid argument");
+    } /* end if */
+    else if (H5Eauto_is_v2((hid_t)stk_id, &is_stack) < 0)
+        h5libraryError(env);
+
+    return (jboolean)is_stack;
+} /* end Java_hdf_hdf5lib_H5_H5Eauto_1is_1v2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eregister_class
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Eregister_1class(JNIEnv *env, jclass cls, jstring cls_name, jstring lib_name, jstring version)
+{
+    hid_t       ret_val = -1;
+    const char* the_cls_name;
+    const char* the_lib_name;
+    const char* the_version;
+
+    PIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version, -1);
+
+    ret_val = H5Eregister_class(the_cls_name, the_lib_name, the_version);
+
+    UNPIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version);
+
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Eregister_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eunregister_class
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eunregister_1class(JNIEnv *env, jclass cls, jlong cls_id)
+{
+    if (cls_id < 0) {
+        h5badArgument(env, "H5Eunregister_class: invalid argument");
+    } /* end if */
+    else if (H5Eunregister_class((hid_t)cls_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Eunregister_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclose_msg
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eclose_1msg(JNIEnv *env, jclass cls, jlong err_id)
+{
+    if (err_id < 0) {
+        h5badArgument(env, "H5Eclose_msg: invalid argument");
+    } /* end if */
+    else if (H5Eclose_msg((hid_t)err_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Eclose_1msg */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ecreate_msg
+ * Signature: (JILjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Ecreate_1msg(JNIEnv *env, jclass cls, jlong err_id, jint msg_type, jstring err_msg)
+{
+    hid_t       ret_val = -1;
+    const char *the_err_msg;
+    H5E_type_t  error_msg_type = (H5E_type_t)msg_type;
+
+    if (err_id < 0) {
+        h5badArgument(env, "H5Ecreate_msg: invalid argument");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(err_msg, the_err_msg, -1);
+
+        ret_val = H5Ecreate_msg((hid_t)err_id, error_msg_type, the_err_msg);
+
+        UNPIN_JAVA_STRING(err_msg, the_err_msg);
+
+        if (ret_val < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Ecreate_1msg */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ecreate_stack
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Ecreate_1stack(JNIEnv *env, jclass cls)
+{
+    hid_t ret_val = -1;
+
+    ret_val = H5Ecreate_stack();
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Ecreate_1stack */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_current_stack
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Eget_1current_1stack(JNIEnv *env, jclass cls)
+{
+    hid_t ret_val = -1;
+
+    ret_val = H5Eget_current_stack();
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Eget_1current_1stack */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclose_stack
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eclose_1stack(JNIEnv *env, jclass cls, jlong stk_id)
+{
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eclose_stack: invalid argument");
+    } /* end if */
+    else if (H5Eclose_stack((hid_t)stk_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Eclose_1stack */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eprint2
+ * Signature: (JLjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eprint2(JNIEnv *env, jclass cls, jlong stk_id, jobject stream_obj)
+{
+    herr_t ret_val = -1;
+
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eprint2: invalid argument");
+    } /* end if */
+    else {
+        if(!stream_obj)
+            ret_val = H5Eprint2((hid_t)stk_id, stdout);
+        else
+            ret_val = H5Eprint2((hid_t)stk_id, (FILE*)stream_obj);
+
+        if (ret_val < 0)
+            h5libraryError(env);
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Eprint2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_class_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Eget_1class_1name(JNIEnv *env, jclass cls, jlong cls_id)
+{
+    char   *namePtr;
+    jstring str = NULL;
+    ssize_t buf_size;
+
+    if (cls_id < 0) {
+        h5badArgument(env, "H5Eget_class_name: invalid argument");
+    } /* end if */
+    else {
+        /* get the length of the name */
+        buf_size = H5Eget_class_name((hid_t)cls_id, NULL, 0);
+
+        if (buf_size < 0) {
+            h5badArgument( env, "H5Eget_class_name:  buf_size < 0");
+        } /* end if */
+        else if (buf_size == 0) {
+            h5badArgument( env, "H5Eget_class_name:  No class name");
+        } /* end else if */
+        else {
+            buf_size++; /* add extra space for the null terminator */
+            namePtr = (char*)HDmalloc(sizeof(char) * (size_t)buf_size);
+            if (namePtr == NULL) {
+                h5outOfMemory( env, "H5Eget_class_name:  malloc failed");
+            } /* end if */
+            else {
+                buf_size = H5Eget_class_name((hid_t)cls_id, (char *)namePtr, (size_t)buf_size);
+
+                if (buf_size < 0) {
+                    HDfree(namePtr);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR namePtr);
+                    HDfree(namePtr);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Eget_1class_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eset_current_stack
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eset_1current_1stack(JNIEnv *env, jclass cls, jlong stk_id)
+{
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eset_current_stack: invalid argument");
+    } /* end if */
+    else if (H5Eset_current_stack((hid_t)stk_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Eset_1current_1stack */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Epop
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Epop(JNIEnv *env, jclass cls, jlong stk_id, jlong count)
+{
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Epop: invalid argument");
+    } /* end if */
+    else if (H5Epop((hid_t)stk_id, (size_t)count) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Epop */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Epush2
+ * Signature: (JLjava/lang/String;Ljava/lang/String;IJJJLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Epush2(JNIEnv *env, jclass cls, jlong stk_id, jstring filename, jstring funcname,
+        jint linenumber, jlong class_id, jlong major_id, jlong minor_id, jstring err_desc)
+{
+    herr_t      ret_val = -1;
+    const char* fName;
+    const char* fncName;
+    const char* errMsg;
+
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Epush: invalid argument");
+    } /* end if */
+    else if (class_id < 0) {
+        h5badArgument(env, "H5Epush: invalid class_id argument");
+    } /* end else if */
+    else if (major_id < 0) {
+        h5badArgument(env, "H5Epush: invalid major_id argument");
+    } /* end else if */
+    else if (minor_id < 0) {
+        h5badArgument(env, "H5Epush: invalid minor_id argument");
+    } /* end else if */
+    else {
+        PIN_JAVA_STRING_THREE0(filename, fName, funcname, fncName, err_desc, errMsg);
+
+        ret_val = H5Epush2((hid_t)stk_id, fName, fncName, (unsigned)linenumber, (hid_t)class_id,
+                (hid_t)major_id, (hid_t)minor_id, errMsg);
+
+        UNPIN_JAVA_STRING_THREE(filename, fName, funcname, fncName, err_desc, errMsg);
+
+        if (ret_val < 0)
+            h5libraryError(env);
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Epush2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclear2
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Eclear2(JNIEnv *env, jclass cls, jlong stk_id)
+{
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eclear2: invalid argument");
+    } /* end if */
+    else if (H5Eclear2((hid_t)stk_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Eclear2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_msg
+ * Signature: (J[I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Eget_1msg(JNIEnv *env, jclass cls, jlong msg_id, jintArray error_msg_type_list)
+{
+    char      *namePtr;
+    jstring    str = NULL;
+    jboolean   isCopy;
+    ssize_t    buf_size;
+    jint      *theArray;
+    H5E_type_t error_msg_type;
+
+    if (msg_id < 0) {
+        h5badArgument(env, "H5Eget_msg: invalid argument");
+    } /* end if */
+    else if (error_msg_type_list == NULL) {
+        h5nullArgument(env, "H5Eget_msg:  error_msg_type_list is NULL");
+    } /* end if */
+    else {
+        /* get the length of the name */
+        buf_size = H5Eget_msg((hid_t)msg_id, NULL, NULL, 0);
+
+        if ((buf_size < 0) || (buf_size == 0)) {
+            h5JNIFatalError(env, "H5Eget_msg:  Invalid message");
+        } /* end if */
+        else {
+            buf_size++; /* add extra space for the null terminator */
+            namePtr = (char*)HDmalloc(sizeof(char) * (size_t)buf_size);
+            if (namePtr == NULL) {
+                h5outOfMemory(env, "H5Eget_msg:  malloc failed");
+            } /* end if */
+            else {
+                theArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR error_msg_type_list, &isCopy);
+                if (theArray == NULL) {
+                    HDfree(namePtr);
+                    h5JNIFatalError(env, "H5Eget_msg:  error_msg_type_list not pinned");
+                } /* end if */
+                else {
+                    buf_size = H5Eget_msg((hid_t)msg_id, &error_msg_type, (char *)namePtr, (size_t)buf_size);
+
+                    if (buf_size < 0) {
+                        HDfree(namePtr);
+                        ENVPTR->ReleaseIntArrayElements(ENVPAR error_msg_type_list, theArray, JNI_ABORT);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        theArray[0] = error_msg_type;
+                        ENVPTR->ReleaseIntArrayElements(ENVPAR error_msg_type_list, theArray, 0);
+
+                        str = ENVPTR->NewStringUTF(ENVPAR namePtr);
+                        HDfree(namePtr);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Eget_1msg */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_num
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Eget_1num(JNIEnv *env, jclass cls, jlong stk_id)
+{
+    ssize_t ret_val = -1;
+
+    if (stk_id < 0) {
+        h5badArgument(env, "H5Eget_num: invalid argument");
+    } /* end if */
+    else {
+        ret_val = H5Eget_num((hid_t)stk_id);
+        if (ret_val < 0)
+            h5libraryError(env);
+    } /* end else */
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Eget_1num */
+
+static herr_t
+H5E_walk_cb(int nindx, const H5E_error2_t *info, void *op_data)
+{
+    JNIEnv    *cbenv;
+    jint       status = -1;
+    jclass     cls;
+    jmethodID  mid;
+    jstring    str1, str2, str3;
+    jmethodID  constructor;
+    jvalue     args[7];
+    jobject    cb_info_t = NULL;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(ILhdf/hdf5lib/structs/H5E_error2_t;Lhdf/hdf5lib/callbacks/H5E_walk_t;)I");
+            if (mid != 0) {
+                args[0].j = info->cls_id;
+                args[1].j = info->maj_num;
+                args[2].j = info->min_num;
+                args[3].i = (jint)info->line;
+                str1 = CBENVPTR->NewStringUTF(CBENVPAR info->func_name);
+                args[4].l = str1;
+                str2 = CBENVPTR->NewStringUTF(CBENVPAR info->file_name);
+                args[5].l = str2;
+                str3 = CBENVPTR->NewStringUTF(CBENVPAR info->desc);
+                args[6].l = str3;
+                // get a reference to your class if you don't have it already
+                cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5E_error2_t");
+                if (cls != 0) {
+                    // get a reference to the constructor; the name is <init>
+                    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(JJJILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+                    if (constructor != 0) {
+                        cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+                        status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, nindx, cb_info_t, op_data);
+                    } /* end if (constructor != 0) */
+                } /* end if(cls != 0) */
+            } /* end if (mid != 0) */
+        } /* end if (cls != 0) */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return (herr_t)status;
+} /* end H5E_walk_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ewalk2
+ * Signature: (JJLjava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Ewalk2(JNIEnv *env, jclass cls, jlong stk_id, jlong direction, jobject callback_op, jobject op_data)
+{
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Ewalk2:  op_data or callback_op is NULL");
+    } /* end if */
+    else if (H5Ewalk2(stk_id, (H5E_direction_t)direction, (H5E_walk2_t)H5E_walk_cb, (void*)op_data) < 0)
+            h5libraryError(env);
+} /* end iJava_hdf_hdf5lib_H5_H5Ewalk2f */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5eImp.h b/java/src/jni/h5eImp.h
new file mode 100644
index 0000000..c40c013
--- /dev/null
+++ b/java/src/jni/h5eImp.h
@@ -0,0 +1,167 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5E */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5E
+#define _Included_hdf_hdf5lib_H5_H5E
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eauto_is_v2
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Eauto_1is_1v2
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eregister_class
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Eregister_1class
+  (JNIEnv *, jclass, jstring, jstring, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eunregister_class
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eunregister_1class
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclose_msg
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eclose_1msg
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ecreate_msg
+ * Signature: (JILjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Ecreate_1msg
+  (JNIEnv *, jclass, jlong, jint, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ecreate_stack
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Ecreate_1stack
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_current_stack
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Eget_1current_1stack
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclose_stack
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eclose_1stack
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eprint2
+ * Signature: (JLjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eprint2
+  (JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_class_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Eget_1class_1name
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eset_current_stack
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eset_1current_1stack
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Epop
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Epop
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Epush2
+ * Signature: (JLjava/lang/String;Ljava/lang/String;IJJJLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Epush2
+  (JNIEnv *, jclass, jlong, jstring, jstring, jint, jlong, jlong, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eclear2
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eclear2
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_msg
+ * Signature: (J[I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Eget_1msg
+  (JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Eget_num
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Eget_1num
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ewalk2
+ * Signature: (JJLjava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Ewalk2
+  (JNIEnv *, jclass, jlong, jlong, jobject, jobject);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5E */
diff --git a/java/src/jni/h5fImp.c b/java/src/jni/h5fImp.c
new file mode 100644
index 0000000..1666940
--- /dev/null
+++ b/java/src/jni/h5fImp.c
@@ -0,0 +1,589 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5fImp.h"
+#include "h5util.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fopen
+ * Signature: (Ljava/lang/String;IJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Fopen(JNIEnv *env, jclass clss, jstring name, jint flags, jlong access_id)
+{
+    hid_t       status = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    status = H5Fopen(fileName, (unsigned)flags, (hid_t)access_id );
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Fopen */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fcreate
+ * Signature: (Ljava/lang/String;IJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Fcreate(JNIEnv *env, jclass clss, jstring name, jint flags, jlong create_id, jlong access_id)
+{
+    hid_t       status = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    status = H5Fcreate(fileName, (unsigned)flags, create_id, access_id);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Fcreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fflush
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Fflush(JNIEnv *env, jclass clss, jlong object_id, jint scope)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Fflush((hid_t)object_id, (H5F_scope_t)scope );
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Fflush */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1name(JNIEnv *env, jclass cls, jlong file_id)
+{
+    char   *namePtr;
+    jstring str = NULL;
+    ssize_t buf_size;
+
+    /* get the length of the name */
+    buf_size = H5Fget_name((hid_t)file_id, NULL, 0);
+
+    if (buf_size <= 0) {
+        h5badArgument(env, "H5Fget_name:  buf_size <= 0");
+    } /* end if */
+    else {
+        buf_size++; /* add extra space for the null terminator */
+        namePtr = (char*)HDmalloc(sizeof(char) * (size_t)buf_size);
+        if (namePtr == NULL) {
+            h5outOfMemory(env, "H5Fget_name:  malloc failed");
+        } /* end if */
+        else {
+            buf_size = H5Fget_name((hid_t)file_id, namePtr, (size_t)buf_size);
+            if (buf_size < 0) {
+                HDfree(namePtr);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                str = ENVPTR->NewStringUTF(ENVPAR namePtr);
+                HDfree(namePtr);
+            }/* end else */
+        }/* end else */
+    }/* end else */
+
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fis_hdf5
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Fis_1hdf5(JNIEnv *env, jclass clss, jstring name)
+{
+    htri_t      bval = JNI_FALSE;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, JNI_FALSE);
+
+    bval = H5Fis_hdf5(fileName);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Fis_1hdf5 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Fget_1create_1plist(JNIEnv *env, jclass clss, jlong file_id)
+{
+    hid_t retVal = -1;
+
+    retVal =  H5Fget_create_plist((hid_t)file_id );
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Fget_1create_1plist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_access_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Fget_1access_1plist(JNIEnv *env, jclass clss, jlong file_id)
+{
+    hid_t retVal = -1;
+
+    retVal =  H5Fget_access_plist((hid_t)file_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Fget_1access_1plist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_intent
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1intent(JNIEnv *env, jclass cls, jlong file_id)
+{
+    unsigned intent = 0;
+
+    if (H5Fget_intent((hid_t)file_id, &intent) < 0)
+        h5libraryError(env);
+
+    return (jint)intent;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1intent */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Fclose(JNIEnv *env, jclass clss, jlong file_id)
+{
+    herr_t status = -1;
+
+    if (file_id > 0)
+        status = H5Fclose((hid_t)file_id );
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Fclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fmount
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Fmount(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong child_id, jlong plist_id)
+{
+    herr_t      status = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    status = H5Fmount((hid_t)loc_id, fileName, (hid_t)child_id, (hid_t)plist_id);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Fmount */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Funmount
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Funmount(JNIEnv *env, jclass clss, jlong loc_id, jstring name)
+{
+    herr_t      status = -1;
+    const char *fileName;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    status = H5Funmount((hid_t)loc_id, fileName);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Funmount */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_freespace
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1freespace(JNIEnv *env, jclass cls, jlong file_id)
+{
+    hssize_t ret_val = H5Fget_freespace((hid_t)file_id);
+
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1freespace */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Freopen
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Freopen(JNIEnv *env, jclass clss, jlong file_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Freopen((hid_t)file_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Freopen */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_obj_ids
+ * Signature: (JIJ[J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1obj_1ids(JNIEnv *env, jclass cls, jlong file_id, jint types, jlong maxObjs,
+          jlongArray obj_id_list)
+{
+    ssize_t  ret_val = -1;
+    jlong   *obj_id_listP;
+    jboolean isCopy;
+    hid_t   *id_list;
+    size_t   rank;
+    size_t   i;
+
+    if (obj_id_list == NULL) {
+        h5nullArgument(env, "H5Fget_obj_ids:  obj_id_list is NULL");
+    } /* end if */
+    else {
+        obj_id_listP = ENVPTR->GetLongArrayElements(ENVPAR obj_id_list, &isCopy);
+        if (obj_id_listP == NULL) {
+            h5JNIFatalError(env, "H5Fget_obj_ids:  obj_id_list not pinned");
+        } /* end if */
+        else {
+            rank = (size_t)ENVPTR->GetArrayLength(ENVPAR obj_id_list);
+
+            id_list = (hid_t *)HDmalloc(rank * sizeof(hid_t));
+            if (id_list == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR obj_id_list, obj_id_listP, JNI_ABORT);
+                h5JNIFatalError(env, "H5Fget_obj_ids:  obj_id_list not converted to hid_t");
+            } /* end if */
+            else {
+                ret_val = H5Fget_obj_ids((hid_t)file_id, (unsigned int)types, (size_t)maxObjs, id_list);
+
+                if (ret_val < 0) {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR obj_id_list, obj_id_listP, JNI_ABORT);
+                    HDfree(id_list);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    for (i = 0; i < rank; i++) {
+                        obj_id_listP[i] = (jlong)id_list[i];
+                    } /* end for */
+                    HDfree(id_list);
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR obj_id_list, obj_id_listP, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1obj_1ids */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_obj_count
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1obj_1count(JNIEnv *env, jclass cls, jlong file_id, jint types)
+{
+    ssize_t ret_val = H5Fget_obj_count((hid_t)file_id, (unsigned int)types);
+
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (jlong)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1obj_1count_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_filesize
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1filesize(JNIEnv *env, jclass clss, jlong file_id)
+{
+    hsize_t size = 0;
+
+    if (H5Fget_filesize ((hid_t)file_id, &size) < 0)
+        h5libraryError(env);
+
+    return (jlong) size;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1filesize */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_hit_rate
+ * Signature: (J)D
+ */
+JNIEXPORT jdouble JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1mdc_1hit_1rate(JNIEnv *env, jclass cls, jlong file_id)
+{
+    double rate = 0.0;
+
+    if (H5Fget_mdc_hit_rate((hid_t)file_id, &rate) < 0)
+        h5libraryError(env);
+
+    return (jdouble)rate;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1mdc_1hit_1rate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_size
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1mdc_1size(JNIEnv *env, jclass cls, jlong file_id, jlongArray metadata_cache)
+{
+    jint     size = 0;
+    jlong   *metadata_cache_ptr;
+    size_t   max_size = 0, min_clean_size = 0, cur_size = 0;
+    int      cur_num_entries = -1;
+    jboolean isCopy;
+
+    if (metadata_cache == NULL) {
+        h5nullArgument(env, "H5Fget_mdc_size:  metadata_cache is NULL");
+    } /* end if */
+    else {
+        size = (int)ENVPTR->GetArrayLength(ENVPAR metadata_cache);
+        if (size < 3) {
+            h5badArgument(env, "H5Fget_mdc_size:  length of metadata_cache < 3.");
+        } /* end if */
+        else {
+            if (H5Fget_mdc_size((hid_t)file_id, &max_size, &min_clean_size, &cur_size, &cur_num_entries) < 0) {
+                h5libraryError(env);
+            } /* end if */
+            else {
+                metadata_cache_ptr = ENVPTR->GetLongArrayElements(ENVPAR metadata_cache, &isCopy);
+                metadata_cache_ptr[0] = (jlong)max_size;
+                metadata_cache_ptr[1] = (jlong)min_clean_size;
+                metadata_cache_ptr[2] = (jlong)cur_size;
+                ENVPTR->ReleaseLongArrayElements(ENVPAR metadata_cache, metadata_cache_ptr, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)cur_num_entries;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1mdc_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5F_info2_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1info(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    H5F_info2_t  finfo;
+    jvalue      args[9];
+    jobject     ihinfobuf;
+    jobject     ret_obj = NULL;
+
+    if (H5Fget_info2((hid_t)obj_id, &finfo) < 0) {
+       h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].j = (jlong)finfo.sohm.msgs_info.index_size;
+        args[1].j = (jlong)finfo.sohm.msgs_info.heap_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+        ihinfobuf = ret_obj;
+
+        args[0].i = (jint)finfo.super.version;
+        args[1].j = (jlong)finfo.super.super_size;
+        args[2].j = (jlong)finfo.super.super_ext_size;
+        args[3].i = (jint)finfo.free.version;
+        args[4].j = (jlong)finfo.free.meta_size;
+        args[5].j = (jlong)finfo.free.tot_space;
+        args[6].j = (jint)finfo.sohm.version;
+        args[7].j = (jlong)finfo.sohm.hdr_size;
+        args[8].l = ihinfobuf;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5F_info2_t", "(IJJIJJIJLhdf/hdf5lib/structs/H5_ih_info_t;)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Freset_mdc_hit_rate_stats
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Freset_1mdc_1hit_1rate_1stats(JNIEnv *env, jclass cls, jlong file_id)
+{
+    if (H5Freset_mdc_hit_rate_stats((hid_t)file_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Freset_1mdc_1hit_1rate_1stats */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fclear_elink_file_cache
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Fclear_1elink_1file_1cache(JNIEnv *env, jclass cls, jlong file_id)
+{
+    if (H5Fclear_elink_file_cache((hid_t)file_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Fclear_1elink_1file_1cache */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstart_swmr_write
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Fstart_1swmr_1write(JNIEnv *env, jclass cls, jlong file_id)
+{
+    if (H5Fstart_swmr_write((hid_t)file_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Fstart_1swmr_1write */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstart_mdc_logging
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Fstart_1mdc_1logging(JNIEnv *env, jclass cls, jlong file_id)
+{
+    if (H5Fstart_mdc_logging((hid_t)file_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Fstart_1mdc_1logging */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstop_mdc_logging
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Fstop_1mdc_1logging  (JNIEnv *env, jclass cls, jlong file_id)
+{
+    if (H5Fstop_mdc_logging((hid_t)file_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Fstop_1mdc_1logging */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_logging_status
+ * Signature: (J[Z)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status(JNIEnv *env, jclass cls, jlong file_id,
+        jbooleanArray mdc_logging_status)
+{
+    hbool_t    is_enabled;
+    hbool_t    is_currently_logging;
+    jboolean  *mdc_logging_status_ptr;
+    jint       size;
+    jboolean   isCopy;
+
+    if (mdc_logging_status == NULL) {
+        h5nullArgument(env, "H5Fget_mdc_logging_status:  mdc_logging_status is NULL");
+    } /* end if */
+    else {
+        size = (int)ENVPTR->GetArrayLength(ENVPAR mdc_logging_status);
+        if (size < 2) {
+            h5badArgument(env, "H5Fget_mdc_logging_status:  length of mdc_logging_status < 2.");
+        } /* end if */
+        else {
+            if (H5Fget_mdc_logging_status((hid_t)file_id, &is_enabled, &is_currently_logging) < 0) {
+                h5libraryError(env);
+            } /* end if */
+            else {
+                mdc_logging_status_ptr = ENVPTR->GetBooleanArrayElements(ENVPAR mdc_logging_status, &isCopy);
+                mdc_logging_status_ptr[0] = (jboolean)is_enabled;
+                mdc_logging_status_ptr[1] = (jboolean)is_currently_logging;
+                ENVPTR->ReleaseBooleanArrayElements(ENVPAR mdc_logging_status, mdc_logging_status_ptr, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5fImp.h b/java/src/jni/h5fImp.h
new file mode 100644
index 0000000..909d1b8
--- /dev/null
+++ b/java/src/jni/h5fImp.h
@@ -0,0 +1,230 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5F */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5F
+#define _Included_hdf_hdf5lib_H5_H5F
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fopen
+ * Signature: (Ljava/lang/String;IJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Fopen
+  (JNIEnv*, jclass, jstring, jint, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fcreate
+ * Signature: (Ljava/lang/String;IJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Fcreate
+  (JNIEnv*, jclass, jstring, jint, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fflush
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Fflush
+  (JNIEnv*, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Fget_1name
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fis_hdf5
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Fis_1hdf5
+  (JNIEnv*, jclass, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Fget_1create_1plist
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_access_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Fget_1access_1plist
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_intent
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Fget_1intent
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Fclose
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fmount
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Fmount
+  (JNIEnv*, jclass, jlong, jstring, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Funmount
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Funmount
+  (JNIEnv*, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_freespace
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Fget_1freespace
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Freopen
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Freopen
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_obj_ids
+ * Signature: (JIJ[J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Fget_1obj_1ids
+  (JNIEnv*, jclass, jlong, jint, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_obj_count
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Fget_1obj_1count
+  (JNIEnv*, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_filesize
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Fget_1filesize
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_hit_rate
+ * Signature: (J)D
+ */
+JNIEXPORT jdouble JNICALL Java_hdf_hdf5lib_H5_H5Fget_1mdc_1hit_1rate
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_size
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Fget_1mdc_1size
+  (JNIEnv*, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Freset_mdc_hit_rate_stats
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Freset_1mdc_1hit_1rate_1stats
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5F_info2_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Fget_1info
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fclear_elink_file_cache
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Fclear_1elink_1file_1cache
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstart_swmr_write
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Fstart_1swmr_1write
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstart_mdc_logging
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Fstart_1mdc_1logging
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fstop_mdc_logging
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Fstop_1mdc_1logging
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Fget_mdc_logging_status
+ * Signature: (J[Z)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Fget_1mdc_1logging_1status
+  (JNIEnv *, jclass, jlong, jbooleanArray);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5F */
diff --git a/java/src/jni/h5gImp.c b/java/src/jni/h5gImp.c
new file mode 100644
index 0000000..632942a
--- /dev/null
+++ b/java/src/jni/h5gImp.c
@@ -0,0 +1,257 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "hdf5.h"
+#include "h5util.h"
+#include "h5gImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Gclose(JNIEnv *env, jclass clss, jlong group_id)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Gclose((hid_t)group_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Gclose */
+
+/*
+ * Create a java object of hdf.h5.structs.H5G_info_t
+ * public class H5G_info_t {
+ *   public H5G_STORAGE_TYPE  storage_type; // Type of storage for links in group
+ *   public long     nlinks;       // Number of links in group
+ *   public long     max_corder;   // Current max. creation order value for group
+ *   public int      mounted;      // Whether group has a file mounted on it
+ * }
+ *
+ */
+jobject
+create_H5G_info_t(JNIEnv *env, H5G_info_t group_info)
+{
+    jclass   cls;
+    jboolean jmounted;
+    jint     storage_type;
+    jobject  obj;
+    jfieldID fid_storage_type, fid_nlinks, fid_max_corder, fid_mounted;
+
+    cls = ENVPTR->FindClass(ENVPAR "hdf/hdf5lib/structs/H5G_info_t");
+    if (cls == NULL)
+        return NULL;
+
+    obj = ENVPTR->AllocObject(ENVPAR cls);
+    if (obj == NULL)
+        return NULL;
+
+    fid_storage_type = ENVPTR->GetFieldID(ENVPAR cls, "storage_type", "I");
+    fid_nlinks = ENVPTR->GetFieldID(ENVPAR cls, "nlinks", "J");
+    fid_max_corder = ENVPTR->GetFieldID(ENVPAR cls, "max_corder", "J");
+    fid_mounted = ENVPTR->GetFieldID(ENVPAR cls, "mounted", "Z");
+
+    if (fid_storage_type==NULL || fid_nlinks==NULL || fid_max_corder==NULL || fid_mounted == NULL)
+        return NULL;
+
+    jmounted = (group_info.mounted==0) ? JNI_FALSE : JNI_TRUE;
+    storage_type = (jint)group_info.storage_type;
+
+    ENVPTR->SetIntField(ENVPAR obj, fid_storage_type, (jint)storage_type);
+    ENVPTR->SetLongField(ENVPAR obj, fid_nlinks, (jlong)group_info.nlinks);
+    ENVPTR->SetLongField(ENVPAR obj, fid_max_corder, (jlong)group_info.max_corder);
+    ENVPTR->SetBooleanField(ENVPAR obj, fid_mounted, jmounted);
+
+    return obj;
+} /* end create_H5G_info_t */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gcreate2
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Gcreate2(JNIEnv *env, jclass clss, jlong loc_id, jstring name,
+          jlong link_plist_id, jlong create_plist_id, jlong access_plist_id)
+{
+    hid_t       group_id = -1;
+    const char *gName;
+
+    PIN_JAVA_STRING(name, gName, -1);
+
+    group_id = H5Gcreate2((hid_t)loc_id, gName, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id );
+
+    UNPIN_JAVA_STRING(name, gName);
+    if (group_id < 0)
+        h5libraryError(env);
+
+    return (jlong)group_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Gcreate2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gcreate_anon
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Gcreate_1anon(JNIEnv *env, jclass cls, jlong loc_id, jlong gcpl_id, jlong gapl_id)
+{
+    hid_t group_id = -1;
+
+    group_id = H5Gcreate_anon((hid_t)loc_id, (hid_t)gcpl_id, (hid_t)gapl_id);
+    if (group_id < 0)
+        h5libraryError(env);
+
+    return (jlong)group_id;
+} /* end JNICALL */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gopen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Gopen2(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist_id)
+{
+    hid_t group_id = -1;
+    const char *gName;
+
+    PIN_JAVA_STRING(name, gName, -1);
+
+    group_id = H5Gopen2((hid_t)loc_id, gName, (hid_t)access_plist_id );
+
+    UNPIN_JAVA_STRING(name, gName);
+
+    if (group_id < 0)
+        h5libraryError(env);
+
+    return (jlong)group_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Gopen2 */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1create_1plist(JNIEnv *env, jclass cls, jlong loc_id)
+{
+    hid_t plist_id = H5Gget_create_plist((hid_t)loc_id);
+
+    if (plist_id < 0)
+        h5libraryError(env);
+
+    return (jlong)plist_id;
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1create_1plist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1info(JNIEnv *env, jclass cls, jlong loc_id)
+{
+    H5G_info_t group_info;
+
+    if (H5Gget_info((hid_t)loc_id, &group_info) < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    return create_H5G_info_t(env, group_info);
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info_by_name
+ * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1name(JNIEnv *env, jclass cls, jlong loc_id, jstring name, jlong lapl_id)
+{
+    herr_t      ret_val = -1;
+    const char *gName;
+    H5G_info_t  group_info;
+
+    PIN_JAVA_STRING(name, gName, NULL);
+
+    ret_val = H5Gget_info_by_name((hid_t)loc_id, gName, &group_info, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING(name, gName);
+
+    if (ret_val < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    return create_H5G_info_t(env, group_info);
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx(JNIEnv *env, jclass cls, jlong loc_id, jstring name, jint index_type,
+          jint order, jlong n, jlong lapl_id)
+{
+    herr_t          ret_val = -1;
+    const char     *gName;
+    H5G_info_t      group_info;
+    H5_index_t      cindex_type = (H5_index_t)index_type;
+    H5_iter_order_t corder = (H5_iter_order_t)order;
+
+    PIN_JAVA_STRING(name, gName, NULL);
+
+    ret_val = H5Gget_info_by_idx((hid_t)loc_id, gName, cindex_type,
+            corder, (hsize_t)n, &group_info, (hid_t)lapl_id);
+
+    UNPIN_JAVA_STRING(name, gName);
+
+    if (ret_val < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    return create_H5G_info_t(env, group_info);
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5gImp.h b/java/src/jni/h5gImp.h
new file mode 100644
index 0000000..2b9bc57
--- /dev/null
+++ b/java/src/jni/h5gImp.h
@@ -0,0 +1,96 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5G */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5G
+#define _Included_hdf_hdf5lib_H5_H5G
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Gclose
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gcreate2
+ * Signature: (JLjava/lang/String;JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Gcreate2
+  (JNIEnv*, jclass, jlong, jstring, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gcreate_anon
+ * Signature: (JJJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Gcreate_1anon
+  (JNIEnv*, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Gopen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Gopen2
+  (JNIEnv*, jclass, jlong, jstring, jlong);
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_create_plist
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Gget_1create_1plist
+(JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Gget_1info
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info_by_name
+ * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1name
+  (JNIEnv*, jclass, jlong, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5G_info_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx
+  (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5G */
diff --git a/java/src/jni/h5iImp.c b/java/src/jni/h5iImp.c
new file mode 100644
index 0000000..e7d663f
--- /dev/null
+++ b/java/src/jni/h5iImp.c
@@ -0,0 +1,289 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "hdf5.h"
+#include <stdlib.h>
+#include <jni.h>
+#include "h5jni.h"
+#include "h5iImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Iget_1type(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    H5I_type_t retVal = H5I_BADID;
+
+    retVal =  H5Iget_type((hid_t)obj_id);
+    if (retVal == H5I_BADID)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Iget_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_name
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Iget_1name(JNIEnv *env, jclass clss, jlong obj_id, jobjectArray name, jlong buf_size)
+{
+    char *aName;
+    jstring str;
+    hssize_t size = -1;
+    long bs;
+
+    bs = (long)buf_size;
+    if (bs <= 0) {
+        h5badArgument(env, "H5Iget_name:  buf_size <= 0");
+    } /* end if */
+    else {
+        aName = (char*)HDmalloc(sizeof(char) * (size_t)bs);
+        if (aName == NULL) {
+            h5outOfMemory(env, "H5Iget_name:  malloc failed");
+        } /* end if */
+        else {
+            size = H5Iget_name((hid_t)obj_id, aName, (size_t)buf_size);
+            if (size < 0) {
+                h5libraryError(env);
+            } /* end if */
+            else {
+                str = ENVPTR->NewStringUTF(ENVPAR aName);
+                ENVPTR->SetObjectArrayElement(ENVPAR name, 0, str);
+            }
+            HDfree(aName);
+        }
+    }
+    return (jlong)size;
+} /* end Java_hdf_hdf5lib_H5_H5Iget_1name */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Iget_1ref(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    int retVal = -1;
+
+    retVal = H5Iget_ref((hid_t)obj_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Iget_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iinc_ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Iinc_1ref(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    int retVal = -1;
+
+    retVal = H5Iinc_ref((hid_t)obj_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Iinc_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idec_1ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Idec_1ref(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    int retVal = -1;
+
+    retVal = H5Idec_ref((hid_t)obj_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Idec_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_file_id
+ * Signature: (J)J
+ */
+
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Iget_1file_1id(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    hid_t file_id = -1;
+
+    file_id = H5Iget_file_id((hid_t)obj_id);
+    if (file_id < 0)
+        h5libraryError(env);
+
+    return (jlong) file_id;
+} /* end Java_hdf_hdf5lib_H5_H5Iget_1file_1id */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Iget_1type_1ref(JNIEnv *env, jclass clss, jint type)
+{
+    int retVal = -1;
+
+    retVal = H5Iget_type_ref((H5I_type_t)type);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Iget_1type_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idec_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Idec_1type_1ref(JNIEnv *env, jclass clss, jint type)
+{
+    int retVal = -1;
+
+    retVal = H5Idec_type_ref((H5I_type_t)type);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Idec_1type_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iinc_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Iinc_1type_1ref(JNIEnv *env, jclass clss, jint type)
+{
+    int retVal = -1;
+
+    retVal = H5Iinc_type_ref((H5I_type_t)type);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Iinc_1type_1ref */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Inmembers
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Inmembers(JNIEnv *env, jclass clss, jint type)
+{
+    hsize_t num_members;
+
+    if (H5Inmembers((H5I_type_t)type, &num_members) < 0)
+        h5libraryError(env);
+
+    return (jint)num_members;
+} /* end Java_hdf_hdf5lib_H5_H5Inmembers */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iis_valid
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Iis_1valid(JNIEnv *env, jclass clss, jlong obj_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Iis_valid((hid_t)obj_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Iis_1valid */
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Itype_exists
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Itype_1exists(JNIEnv *env, jclass clss, jint type)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Itype_exists((H5I_type_t)type);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end else Java_hdf_hdf5lib_H5_H5Itype_1exists */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iclear_type
+ * Signature: (IZ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Iclear_1type(JNIEnv *env, jclass clss, jint type, jboolean force)
+{
+     if (H5Iclear_type((H5I_type_t)type, (hbool_t)force) < 0)
+       h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Iclear_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idestroy_type
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Idestroy_1type(JNIEnv *env, jclass clss, jint type)
+{
+     if (H5Idestroy_type((H5I_type_t)type) < 0)
+       h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Idestroy_1type */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5iImp.h b/java/src/jni/h5iImp.h
new file mode 100644
index 0000000..fe36b5b
--- /dev/null
+++ b/java/src/jni/h5iImp.h
@@ -0,0 +1,143 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5I */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5I
+#define _Included_hdf_hdf5lib_H5_H5I
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Iget_1type
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_name
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Iget_1name
+  (JNIEnv*, jclass, jlong, jobjectArray, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Iget_1ref
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iinc_ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Iinc_1ref
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idec_1ref
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Idec_1ref
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_file_id
+ * Signature: (J)J
+ */
+
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Iget_1file_1id
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iget_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Iget_1type_1ref
+  (JNIEnv*, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idec_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Idec_1type_1ref
+  (JNIEnv*, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iinc_type_ref
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Iinc_1type_1ref
+  (JNIEnv*, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Inmembers
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Inmembers
+  (JNIEnv*, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iis_valid
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Iis_1valid
+  (JNIEnv*, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Itype_exists
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Itype_1exists
+  (JNIEnv*, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Iclear_type
+ * Signature: (IZ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Iclear_1type
+  (JNIEnv*, jclass, jint, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Idestroy_type
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Idestroy_1type
+  (JNIEnv*, jclass, jint);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5I */
diff --git a/java/src/jni/h5jni.h b/java/src/jni/h5jni.h
new file mode 100644
index 0000000..da49eeb
--- /dev/null
+++ b/java/src/jni/h5jni.h
@@ -0,0 +1,249 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#include <jni.h>
+#include "H5version.h"
+#include <string.h>
+#include "H5private.h"
+
+#ifndef _Included_h5jni
+#define _Included_h5jni
+
+#ifdef __cplusplus
+  #define ENVPTR (env)
+  #define ENVPAR
+  #define ENVONLY
+  #define CBENVPTR (cbenv)
+  #define CBENVPAR
+  #define JVMPTR (jvm)
+  #define JVMPAR
+  #define JVMPAR2
+#else /* __cplusplus */
+  #define ENVPTR (*env)
+  #define ENVPAR env,
+  #define ENVONLY env
+  #define CBENVPTR (*cbenv)
+  #define CBENVPAR cbenv,
+  #define JVMPTR (*jvm)
+  #define JVMPAR jvm
+  #define JVMPAR2 jvm,
+#endif /* __cplusplus */
+
+/* Macros for class access */
+/* Calling code must define ret_obj as jobject */
+#define CALL_CONSTRUCTOR(classname,classsig,args) {                              \
+    jclass     cls;                                                              \
+    jmethodID  constructor;                                                      \
+    cls = ENVPTR->FindClass(ENVPAR (classname));                                 \
+    if (cls == 0) {                                                              \
+        h5JNIFatalError(env, "JNI error: GetObjectClass\n");                     \
+        ret_obj = NULL;                                                          \
+    }                                                                            \
+    constructor = ENVPTR->GetMethodID(ENVPAR cls, "<init>", (classsig));         \
+    if (constructor == 0) {                                                      \
+        h5JNIFatalError(env, "JNI error: GetMethodID failed\n");                 \
+        ret_obj = NULL;                                                          \
+    }                                                                            \
+    ret_obj = ENVPTR->NewObjectA(ENVPAR cls, constructor, (args));               \
+}
+
+
+/* Macros for string access */
+#define PIN_JAVA_STRING(javastr,localstr,retdefault) {                           \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return (retdefault);                                                     \
+    }                                                                            \
+}
+
+#define PIN_JAVA_STRING0(javastr,localstr) {                                     \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return;                                                                  \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return;                                                                  \
+    }                                                                            \
+}
+
+#define UNPIN_JAVA_STRING(javastr,localstr) {                                      \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));                \
+}
+
+#define PIN_JAVA_STRING_TWO(javastr,localstr,java2str,local2str,retdefault) {    \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return (retdefault);                                                     \
+    }                                                                            \
+    if ((java2str) == NULL) {                                                    \
+        h5nullArgument(env, "second java string is NULL");                       \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy);         \
+    if ((local2str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        h5JNIFatalError(env, "second local c string is not pinned");             \
+        return (retdefault);                                                     \
+    }                                                                            \
+}
+
+#define PIN_JAVA_STRING_TWO0(javastr,localstr,java2str,local2str) {              \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return;                                                                  \
+    }                                                                            \
+    if ((java2str) == NULL) {                                                    \
+        h5nullArgument(env, "second java string is NULL");                       \
+        return;                                                                  \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return;                                                                  \
+    }                                                                            \
+    (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy);         \
+    if ((local2str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        h5JNIFatalError(env, "second local c string is not pinned");             \
+        return;                                                                  \
+    }                                                                            \
+}
+
+#define UNPIN_JAVA_STRING_TWO(javastr,localstr,java2str,local2str) {             \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));                \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str));              \
+}
+
+#define PIN_JAVA_STRING_THREE(javastr,localstr,java2str,local2str,java3str,local3str,retdefault) {       \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return (retdefault);                                                     \
+    }                                                                            \
+    if ((java2str) == NULL) {                                                    \
+        h5nullArgument(env, "second java string is NULL");                       \
+        return (retdefault);                                                     \
+    }                                                                            \
+    if ((java3str) == NULL) {                                                    \
+        h5nullArgument(env, "third java string is NULL");                        \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy);         \
+    if ((local2str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        h5JNIFatalError(env, "second local c string is not pinned");             \
+        return (retdefault);                                                     \
+    }                                                                            \
+    (local3str) = ENVPTR->GetStringUTFChars(ENVPAR (java3str), &isCopy);         \
+    if ((local3str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str));           \
+        h5JNIFatalError(env, "third local c string is not pinned");              \
+        return (retdefault);                                                     \
+    }                                                                            \
+}
+
+#define PIN_JAVA_STRING_THREE0(javastr,localstr,java2str,local2str,java3str,local3str) {       \
+    jboolean isCopy;                                                             \
+    if ((javastr) == NULL) {                                                     \
+        h5nullArgument(env, "java string is NULL");                              \
+        return;                                                                  \
+    }                                                                            \
+    if ((java2str) == NULL) {                                                    \
+        h5nullArgument(env, "second java string is NULL");                       \
+        return;                                                                  \
+    }                                                                            \
+    if ((java3str) == NULL) {                                                    \
+        h5nullArgument(env, "third java string is NULL");                        \
+        return;                                                                  \
+    }                                                                            \
+    (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy);           \
+    if ((localstr) == NULL) {                                                    \
+        h5JNIFatalError(env, "local c string is not pinned");                    \
+        return;                                                                  \
+    }                                                                            \
+    (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy);         \
+    if ((local2str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        h5JNIFatalError(env, "second local c string is not pinned");             \
+        return;                                                                  \
+    }                                                                            \
+    (local3str) = ENVPTR->GetStringUTFChars(ENVPAR (java3str), &isCopy);         \
+    if ((local3str) == NULL) {                                                   \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));             \
+        ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str));           \
+        h5JNIFatalError(env, "third local c string is not pinned");              \
+        return;                                                                  \
+    }                                                                            \
+}
+
+#define UNPIN_JAVA_STRING_THREE(javastr,localstr,java2str,local2str,java3str,local3str) {        \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr));                \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str));              \
+     ENVPTR->ReleaseStringUTFChars(ENVPAR (java3str), (local3str));              \
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+extern jboolean h5JNIFatalError(JNIEnv *, const char *);
+extern jboolean h5nullArgument(JNIEnv *, const char *);
+extern jboolean h5badArgument (JNIEnv *, const char *);
+extern jboolean h5outOfMemory (JNIEnv *, const char *);
+extern jboolean h5libraryError(JNIEnv *env );
+extern jboolean h5raiseException(JNIEnv *, const char *, const char *);
+extern jboolean h5unimplemented( JNIEnv *env, const char *functName);
+
+/* implemented at H5.c */
+extern jint get_enum_value(JNIEnv *env, jobject enum_obj);
+extern jobject get_enum_object(JNIEnv *env, const char* enum_class_name,
+    jint enum_val, const char* enum_field_desc);
+
+/* implemented at H5G.c */
+extern jobject create_H5G_info_t(JNIEnv *env, H5G_info_t group_info);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_h5jni */
diff --git a/java/src/jni/h5lImp.c b/java/src/jni/h5lImp.c
new file mode 100644
index 0000000..739e43b
--- /dev/null
+++ b/java/src/jni/h5lImp.c
@@ -0,0 +1,736 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "h5lImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5L_iterate_cb(hid_t g_id, const char *name, const H5L_info_t *info, void *op_data);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lcopy
+ * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lcopy(JNIEnv *env, jclass clss, jlong cur_loc_id, jstring cur_name, jlong dst_loc_id,
+        jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Lcopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Lcopy */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lcreate_external
+ * Signature: (Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lcreate_1external(JNIEnv *env, jclass clss, jstring file_name, jstring cur_name,
+        jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lFileName;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_THREE0(file_name, lFileName, cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Lcreate_external(lFileName, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_THREE(file_name, lFileName, cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Lcreate_1external */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lcreate_hard
+ * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lcreate_1hard(JNIEnv *env, jclass clss, jlong cur_loc_id, jstring cur_name,
+        jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Lcreate_hard((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Lcreate_1hard */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lcreate_soft
+ * Signature: (Ljava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lcreate_1soft(JNIEnv *env, jclass clss, jstring cur_name, jlong dst_loc_id,
+        jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Lcreate_soft(lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Lcreate_1soft */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ldelete
+ * Signature: (JLjava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Ldelete(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lName;
+
+    PIN_JAVA_STRING0(name, lName);
+
+    status = H5Ldelete((hid_t)loc_id, lName, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Ldelete */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ldelete_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Ldelete_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name,
+        jint index_field, jint order, jlong link_n, jlong access_id)
+{
+    hsize_t     n = (hsize_t)link_n;
+    herr_t      status;
+    const char *lName;
+
+    PIN_JAVA_STRING0(name, lName);
+
+    status = H5Ldelete_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, n, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Ldelete_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lexists
+ * Signature: (JLjava/lang/String;J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Lexists(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    htri_t   bval = JNI_FALSE;
+    const char *lName;
+
+    PIN_JAVA_STRING(name, lName, JNI_FALSE);
+
+    bval = H5Lexists((hid_t)loc_id, lName, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Lexists */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lget_info
+ * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5L_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Lget_1info(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    jobject     ret_obj = NULL;
+    jvalue      args[5];
+    herr_t      status;
+    H5L_info_t  infobuf;
+    const char *lName;
+
+    PIN_JAVA_STRING(name, lName, NULL);
+
+    status = H5Lget_info((hid_t)loc_id, lName, &infobuf, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].i = infobuf.type;
+        args[1].z = infobuf.corder_valid;
+        args[2].j = infobuf.corder;
+        args[3].i = infobuf.cset;
+        if(infobuf.type==0)
+            args[4].j = (jlong)infobuf.u.address;
+        else
+            args[4].j = (jlong)infobuf.u.val_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Lget_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5L_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name,
+        jint index_field, jint order, jlong link_n, jlong access_id)
+{
+    jobject     ret_obj = NULL;
+    jvalue      args[5];
+    herr_t      status;
+    H5L_info_t  infobuf;
+    const char *lName;
+
+    PIN_JAVA_STRING(name, lName, NULL);
+
+    status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].i = infobuf.type;
+        args[1].z = infobuf.corder_valid;
+        args[2].j = infobuf.corder;
+        args[3].i = infobuf.cset;
+        if(infobuf.type==0)
+            args[4].j = (jlong)infobuf.u.address;
+        else
+            args[4].j = (jlong)infobuf.u.val_size;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args);
+    } /* end els */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lget_name_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name,
+        jint index_field, jint order, jlong link_n, jlong access_id)
+{
+    jlong       status_size;
+    jstring     str = NULL;
+    size_t      buf_size;
+    const char *lName;
+    char       *lValue;
+
+    PIN_JAVA_STRING(name, lName, NULL);
+
+    /* get the length of the link name */
+    status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)NULL, (size_t)0, H5P_DEFAULT);
+    if(status_size < 0) {
+        UNPIN_JAVA_STRING(name, lName);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */
+
+        lValue = (char*)HDmalloc(sizeof(char) * buf_size);
+        if (lValue == NULL) {
+            UNPIN_JAVA_STRING(name, lName);
+            h5outOfMemory(env, "H5Lget_name_by_idx:  malloc failed ");
+        } /* end if */
+        else {
+            status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)lValue, (size_t)buf_size, (hid_t)access_id);
+
+            UNPIN_JAVA_STRING(name, lName);
+
+            if (status_size < 0) {
+                HDfree(lValue);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                str = ENVPTR->NewStringUTF(ENVPAR lValue);
+                HDfree(lValue);
+                if (str == NULL)
+                    h5JNIFatalError(env, "H5Lget_name_by_idx:  return string not created");
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lget_value
+ * Signature: (JLjava/lang/String;[Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Lget_1value(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jobjectArray link_value, jlong access_id)
+{
+    size_t      buf_size;
+    herr_t      status;
+    H5L_info_t  infobuf;
+    const char *lName;
+    char       *lValue;
+    const char *file_name;
+    const char *obj_name;
+    jstring     str;
+
+    PIN_JAVA_STRING(name, lName, -1);
+
+    infobuf.type = -1;
+    /* get the length of the link val */
+    status = H5Lget_info((hid_t)loc_id, lName, &infobuf, H5P_DEFAULT);
+    if(status < 0) {
+        UNPIN_JAVA_STRING(name, lName);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        buf_size = infobuf.u.val_size + 1;/* add extra space for the null terminator */
+
+        if(infobuf.type == H5L_TYPE_HARD) {
+            UNPIN_JAVA_STRING(name, lName);
+            h5JNIFatalError(env, "H5Lget_val:  link is hard type");
+        } /* end if */
+        else {
+            lValue = (char*)HDmalloc(sizeof(char) * buf_size);
+            if (lValue == NULL) {
+                UNPIN_JAVA_STRING(name, lName);
+                h5outOfMemory(env, "H5Lget_val:  malloc failed");
+            } /* end if */
+            else {
+                status = H5Lget_val((hid_t)loc_id, lName, (void*)lValue, buf_size, (hid_t)access_id);
+
+                UNPIN_JAVA_STRING(name, lName);
+
+                if (status < 0) {
+                    HDfree(lValue);
+                    h5libraryError(env);
+                } /* end if */
+                else if(infobuf.type == H5L_TYPE_EXTERNAL) {
+                    status = H5Lunpack_elink_val(lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, &file_name, &obj_name);
+                    if (status < 0) {
+                        HDfree(lValue);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        str = ENVPTR->NewStringUTF(ENVPAR obj_name);
+                        if (str == NULL) {
+                            HDfree(lValue);
+                            h5JNIFatalError(env, "H5Lget_val:  return string not created");
+                        } /* end if */
+                        else {
+                            ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str);
+
+                            str = ENVPTR->NewStringUTF(ENVPAR file_name);
+                            if (str == NULL) {
+                                HDfree(lValue);
+                                h5JNIFatalError(env, "H5Lget_val:  return string not created");
+                            } /* end if */
+                            else {
+                                ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str);
+                                HDfree(lValue);
+                            } /* end else */
+                        } /* end else */
+                    } /* end else */
+                } /* end else if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR lValue);
+                    if (str == NULL) {
+                        /* exception -- fatal JNI error */
+                        HDfree(lValue);
+                        h5JNIFatalError(env, "H5Lget_val:  return string not created");
+                    } /* end if */
+                    else {
+                        ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str);
+                        HDfree(lValue);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return infobuf.type;
+} /* end Java_hdf_hdf5lib_H5_H5Lget_1val */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lget_value_by_idx
+ * Signature: (JLjava/lang/String;IIJ[Ljava/lang/String;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Lget_1value_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint index_field, jint order,
+        jlong link_n, jobjectArray link_value, jlong access_id)
+{
+    herr_t      status;
+    size_t      buf_size;
+    H5L_info_t  infobuf;
+    const char *lName;
+    void       *lValue;
+    const char *file_name;
+    const char *obj_name;
+    jstring     str;
+
+    PIN_JAVA_STRING(name, lName, -1);
+
+    infobuf.type = -1;
+    /* get the length of the link valuee */
+    status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id);
+    if(status < 0) {
+        UNPIN_JAVA_STRING(name, lName);
+        h5libraryError(env);
+        return -1;
+    } /* end if */
+    else {
+        buf_size = infobuf.u.val_size;
+        if(buf_size < 0) {
+            UNPIN_JAVA_STRING(name, lName);
+            h5libraryError(env);
+            return -1;
+        } /* end if */
+        else {
+            lValue = (void*)HDmalloc(buf_size);
+            if (lValue == NULL) {
+                UNPIN_JAVA_STRING(name, lName);
+                h5outOfMemory(env, "H5Lget_val_by_idx:  malloc failed ");
+                return -1;
+            } /* end if */
+            else {
+                status = H5Lget_val_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (void*)lValue, (size_t)buf_size, (hid_t)access_id);
+
+                UNPIN_JAVA_STRING(name, lName);
+
+                if (status < 0) {
+                    HDfree(lValue);
+                    h5libraryError(env);
+                } /* end if */
+                else if(infobuf.type == H5L_TYPE_EXTERNAL) {
+                    status = H5Lunpack_elink_val((char*)lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, (const char**)&file_name, (const char**)&obj_name);
+                    if (status < 0) {
+                        HDfree(lValue);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        str = ENVPTR->NewStringUTF(ENVPAR obj_name);
+                        if (str == NULL) {
+                            HDfree(lValue);
+                            h5JNIFatalError(env, "H5Lget_val_by_idx:  return string not created");
+                        } /* end if */
+                        else {
+                            ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str);
+
+                            str = ENVPTR->NewStringUTF(ENVPAR file_name);
+                            if (str == NULL) {
+                                HDfree(lValue);
+                                h5JNIFatalError(env, "H5Lget_val_by_idx:  return string not created");
+                            } /* end if */
+                            else {
+                                ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str);
+                                HDfree(lValue);
+                            } /* end else */
+                        } /* end else */
+                    } /* end else */
+                } /* end else if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR (char *)lValue);
+                    if (str == NULL) {
+                        HDfree(lValue);
+                        h5JNIFatalError(env, "H5Lget_val_by_idx:  return string not created");
+                    } /* end if */
+                    else {
+                        ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str);
+                        HDfree(lValue);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return infobuf.type;
+} /* end Java_hdf_hdf5lib_H5_H5Lget_1val_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lmove
+ * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lmove(JNIEnv *env, jclass clss, jlong cur_loc_id, jstring cur_name,
+        jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t   status = -1;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Lmove((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+} /* end Java_hdf_hdf5lib_H5_H5Lmove */
+
+static herr_t
+H5L_iterate_cb(hid_t g_id, const char *name, const H5L_info_t *info, void *op_data) {
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jstring    str;
+    jmethodID  constructor;
+    jvalue     args[5];
+    jobject    cb_info_t = NULL;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/structs/H5L_info_t;Lhdf/hdf5lib/callbacks/H5L_iterate_t;)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+
+                args[0].i = info->type;
+                args[1].z = info->corder_valid;
+                args[2].j = info->corder;
+                args[3].i = info->cset;
+                if(info->type==0)
+                    args[4].j = (jlong)info->u.address;
+                else
+                    args[4].j = (jlong)info->u.val_size;
+                // get a reference to your class if you don't have it already
+                cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5L_info_t");
+                if (cls != 0) {
+                    // get a reference to the constructor; the name is <init>
+                    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(IZJIJ)V");
+                    if (constructor != 0) {
+                        cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+                        status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, g_id, str, cb_info_t, op_data);
+                    } /* end if */
+                } /* end if */
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5L_iterate_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lvisit
+ * Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Lvisit(JNIEnv *env, jclass clss, jlong grp_id, jint idx_type, jint order,
+        jobject callback_op, jobject op_data)
+{
+    herr_t status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Lvisit:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        status = H5Lvisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data);
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Lvisit */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lvisit_by_name
+ * Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Lvisit_1by_1name(JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order,
+        jobject callback_op, jobject op_data, jlong access_id)
+{
+    herr_t        status = -1;
+    const char   *lName;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Lvisit_by_name:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(name, lName, -1);
+
+        status = H5Lvisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id);
+
+        UNPIN_JAVA_STRING(name, lName);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Lvisit_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Literate
+ * Signature: (JIIJLjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Literate(JNIEnv *env, jclass clss, jlong grp_id, jint idx_type, jint order,
+        jlong idx, jobject callback_op, jobject op_data)
+{
+    hsize_t       start_idx = (hsize_t)idx;
+    herr_t        status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Literate:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        status = H5Literate((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Literate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Literate_by_name
+ * Signature: (JLjava/lang/String;IIJLjava/lang/Object;Ljava/lang/Object;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Literate_1by_1name(JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order,
+        jlong idx, jobject callback_op, jobject op_data, jlong access_id)
+{
+    hsize_t       start_idx = (hsize_t)idx;
+    herr_t        status = -1;
+    const char   *lName;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if ((op_data == NULL) || (callback_op == NULL)) {
+        h5nullArgument(env,  "H5Literate_by_name:  op_data or callback_op is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(name, lName, -1);
+
+        status = H5Literate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id);
+
+        UNPIN_JAVA_STRING(name, lName);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Literate_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lis_registered
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Lis_1registered(JNIEnv *env, jclass clss, jint link_cls_id)
+{
+    htri_t ret_val = H5Lis_registered((H5L_type_t)link_cls_id);
+
+    if (ret_val < 0)
+        h5libraryError(env);
+
+    return (int)ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Lis_1registered */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Lunregister
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Lunregister(JNIEnv *env, jclass clss, jint link_cls_id)
+{
+    if (H5Lunregister((H5L_type_t)link_cls_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Lunregister */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5lImp.h b/java/src/jni/h5lImp.h
new file mode 100644
index 0000000..f0a9a63
--- /dev/null
+++ b/java/src/jni/h5lImp.h
@@ -0,0 +1,183 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5_H5L */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5L
+#define _Included_hdf_hdf5lib_H5_H5L
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lcopy
+     * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lcopy
+      (JNIEnv*, jclass, jlong, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lcreate_external
+     * Signature: (Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lcreate_1external
+    (JNIEnv*, jclass, jstring, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lcreate_hard
+     * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lcreate_1hard
+      (JNIEnv*, jclass, jlong, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lcreate_soft
+     * Signature: (Ljava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lcreate_1soft
+      (JNIEnv*, jclass, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Ldelete
+     * Signature: (JLjava/lang/String;J)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Ldelete
+      (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Ldelete_by_idx
+     * Signature: (JLjava/lang/String;IIJJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Ldelete_1by_1idx
+    (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lexists
+     * Signature: (JLjava/lang/String;J)Z
+     */
+    JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Lexists
+      (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lget_info
+     * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5L_info_t;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Lget_1info
+    (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lget_info_by_idx
+     * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5L_info_t;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx
+    (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lget_name_by_idx
+     * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx
+    (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lget_value
+     * Signature: (JLjava/lang/String;[Ljava/lang/String;J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lget_1value
+      (JNIEnv*, jclass, jlong, jstring, jobjectArray, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lget_value_by_idx
+     * Signature: (JLjava/lang/String;IIJ[Ljava/lang/String;J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lget_1value_1by_1idx
+    (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jobjectArray, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lmove
+     * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lmove
+      (JNIEnv*, jclass, jlong, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lvisit
+     * Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lvisit
+      (JNIEnv*, jclass, jlong, jint, jint, jobject, jobject);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lvisit_by_name
+     * Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lvisit_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jint, jint, jobject, jobject, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Literate
+     * Signature: (JIIJLjava/lang/Object;Ljava/lang/Object;)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Literate
+      (JNIEnv*, jclass, jlong, jint, jint, jlong, jobject, jobject);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Literate_by_name
+     * Signature: (JLjava/lang/String;IIJLjava/lang/Object;Ljava/lang/Object;J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Literate_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jobject, jobject, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lis_registered
+     * Signature: (I)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lis_1registered
+      (JNIEnv*, jclass, jint);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Lunregister
+     * Signature: (I)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Lunregister
+      (JNIEnv*, jclass, jint);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5L */
diff --git a/java/src/jni/h5oImp.c b/java/src/jni/h5oImp.c
new file mode 100644
index 0000000..c38ec9a
--- /dev/null
+++ b/java/src/jni/h5oImp.c
@@ -0,0 +1,766 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "h5oImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5O_iterate_cb(hid_t g_id, const char *name, const H5O_info_t *info, void *op_data);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Oopen
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Oopen(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist_id)
+{
+    hid_t       status;
+    const char *oName;
+
+    PIN_JAVA_STRING(name, oName, -1);
+
+    status = H5Oopen((hid_t)loc_id, oName, (hid_t)access_plist_id );
+
+    UNPIN_JAVA_STRING(name, oName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Oopen */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Oclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Oclose(JNIEnv *env, jclass clss, jlong object_id)
+{
+    herr_t retVal = H5Oclose((hid_t)object_id);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Oclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ocopy
+ * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Ocopy(JNIEnv *env, jclass clss, jlong cur_loc_id, jstring cur_name,
+        jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lCurName;
+    const char *lDstName;
+
+    PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName);
+
+    status = H5Ocopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Ocopy */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oget_info
+ * Signature: (J)Lhdf/hdf5lib/structs/H5O_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Oget_1info(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    herr_t      status = -1;
+    H5O_info_t  infobuf;
+    jvalue      args[12];
+    jobject     hdrinfobuf;
+    jobject     ihinfobuf1;
+    jobject     ihinfobuf2;
+    jobject     ret_obj = NULL;
+
+    status = H5Oget_info((hid_t)loc_id, &infobuf);
+
+    if (status < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    args[0].i = (jint)infobuf.hdr.version;
+    args[1].i = (jint)infobuf.hdr.nmesgs;
+    args[2].i = (jint)infobuf.hdr.nchunks;
+    args[3].i = (jint)infobuf.hdr.flags;
+    args[4].j = (jlong)infobuf.hdr.space.total;
+    args[5].j = (jlong)infobuf.hdr.space.meta;
+    args[6].j = (jlong)infobuf.hdr.space.mesg;
+    args[7].j = (jlong)infobuf.hdr.space.free;
+    args[8].j = (jlong)infobuf.hdr.mesg.present;
+    args[9].j = (jlong)infobuf.hdr.mesg.shared;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args);
+    hdrinfobuf = ret_obj;
+
+    args[0].j = (jlong)infobuf.meta_size.obj.index_size;
+    args[1].j = (jlong)infobuf.meta_size.obj.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf1 = ret_obj;
+    args[0].j = (jlong)infobuf.meta_size.attr.index_size;
+    args[1].j = (jlong)infobuf.meta_size.attr.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf2 = ret_obj;
+
+    args[0].j = (jlong)infobuf.fileno;
+    args[1].j = (jlong)infobuf.addr;
+    args[2].i = infobuf.type;
+    args[3].i = (jint)infobuf.rc;
+    args[4].j = (jlong)infobuf.num_attrs;
+    args[5].j = infobuf.atime;
+    args[6].j = infobuf.mtime;
+    args[7].j = infobuf.ctime;
+    args[8].j = infobuf.btime;
+    args[9].l = hdrinfobuf;
+    args[10].l = ihinfobuf1;
+    args[11].l = ihinfobuf2;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args);
+
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Oget_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oget_info_by_name
+ * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5O_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    const char *lName;
+    herr_t      status = -1;
+    H5O_info_t  infobuf;
+    jvalue      args[12];
+    jobject     hdrinfobuf;
+    jobject     ihinfobuf1;
+    jobject     ihinfobuf2;
+    jobject     ret_obj = NULL;
+
+    PIN_JAVA_STRING(name, lName, NULL);
+
+    status = H5Oget_info_by_name((hid_t)loc_id, lName, &infobuf, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    args[0].i = (jint)infobuf.hdr.version;
+    args[1].i = (jint)infobuf.hdr.nmesgs;
+    args[2].i = (jint)infobuf.hdr.nchunks;
+    args[3].i = (jint)infobuf.hdr.flags;
+    args[4].j = (jlong)infobuf.hdr.space.total;
+    args[5].j = (jlong)infobuf.hdr.space.meta;
+    args[6].j = (jlong)infobuf.hdr.space.mesg;
+    args[7].j = (jlong)infobuf.hdr.space.free;
+    args[8].j = (jlong)infobuf.hdr.mesg.present;
+    args[9].j = (jlong)infobuf.hdr.mesg.shared;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args);
+    hdrinfobuf = ret_obj;
+
+    args[0].j = (jlong)infobuf.meta_size.obj.index_size;
+    args[1].j = (jlong)infobuf.meta_size.obj.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf1 = ret_obj;
+    args[0].j = (jlong)infobuf.meta_size.attr.index_size;
+    args[1].j = (jlong)infobuf.meta_size.attr.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf2 = ret_obj;
+
+    args[0].j = (jlong)infobuf.fileno;
+    args[1].j = (jlong)infobuf.addr;
+    args[2].i = infobuf.type;
+    args[3].i = (jint)infobuf.rc;
+    args[4].j = (jlong)infobuf.num_attrs;
+    args[5].j = infobuf.atime;
+    args[6].j = infobuf.mtime;
+    args[7].j = infobuf.ctime;
+    args[8].j = infobuf.btime;
+    args[9].l = hdrinfobuf;
+    args[10].l = ihinfobuf1;
+    args[11].l = ihinfobuf2;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args);
+
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oget_info_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5O_info_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id,
+        jstring name, jint index_field, jint order, jlong link_n, jlong access_id)
+{
+    const char *lName;
+    herr_t      status;
+    H5O_info_t  infobuf;
+    jvalue      args[12];
+    jobject     hdrinfobuf;
+    jobject     ihinfobuf1;
+    jobject     ihinfobuf2;
+    jobject     ret_obj = NULL;
+
+    PIN_JAVA_STRING(name, lName, NULL);
+
+    status = H5Oget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0) {
+        h5libraryError(env);
+        return NULL;
+    } /* end if */
+
+    args[0].i = (jint)infobuf.hdr.version;
+    args[1].i = (jint)infobuf.hdr.nmesgs;
+    args[2].i = (jint)infobuf.hdr.nchunks;
+    args[3].i = (jint)infobuf.hdr.flags;
+    args[4].j = (jlong)infobuf.hdr.space.total;
+    args[5].j = (jlong)infobuf.hdr.space.meta;
+    args[6].j = (jlong)infobuf.hdr.space.mesg;
+    args[7].j = (jlong)infobuf.hdr.space.free;
+    args[8].j = (jlong)infobuf.hdr.mesg.present;
+    args[9].j = (jlong)infobuf.hdr.mesg.shared;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args);
+    hdrinfobuf = ret_obj;
+
+    args[0].j = (jlong)infobuf.meta_size.obj.index_size;
+    args[1].j = (jlong)infobuf.meta_size.obj.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf1 = ret_obj;
+    args[0].j = (jlong)infobuf.meta_size.attr.index_size;
+    args[1].j = (jlong)infobuf.meta_size.attr.heap_size;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args);
+    ihinfobuf2 = ret_obj;
+
+    args[0].j = (jlong)infobuf.fileno;
+    args[1].j = (jlong)infobuf.addr;
+    args[2].i = infobuf.type;
+    args[3].i = (jint)infobuf.rc;
+    args[4].j = (jlong)infobuf.num_attrs;
+    args[5].j = infobuf.atime;
+    args[6].j = infobuf.mtime;
+    args[7].j = infobuf.ctime;
+    args[8].j = infobuf.btime;
+    args[9].l = hdrinfobuf;
+    args[10].l = ihinfobuf1;
+    args[11].l = ihinfobuf2;
+    CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args);
+
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Olink
+ * Signature: (JJLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Olink(JNIEnv *env, jclass clss, jlong cur_loc_id, jlong dst_loc_id,
+        jstring dst_name, jlong create_id, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *lDstName;
+
+    PIN_JAVA_STRING0(dst_name, lDstName);
+
+    status = H5Olink((hid_t)cur_loc_id, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(dst_name, lDstName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Olink */
+
+static herr_t
+H5O_iterate_cb(hid_t g_id, const char *name, const H5O_info_t *info, void *op_data)
+{
+    JNIEnv    *cbenv;
+    jint       status = -1;
+    jclass     cls;
+    jmethodID  mid;
+    jstring    str;
+    jmethodID  constructor;
+    jvalue     args[12];
+    jobject    hdrinfobuf;
+    jobject    ihinfobuf1;
+    jobject    ihinfobuf2;
+    jobject    cb_info_t = NULL;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) != 0) {
+        /* printf("JNI H5O_iterate_cb error: AttachCurrentThread failed\n"); */
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+    if (cls == 0) {
+        /* printf("JNI H5O_iterate_cb error: GetObjectClass failed\n"); */
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/structs/H5O_info_t;Lhdf/hdf5lib/callbacks/H5O_iterate_t;)I");
+    if (mid == 0) {
+        /* printf("JNI H5O_iterate_cb error: GetMethodID failed\n"); */
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    str = CBENVPTR->NewStringUTF(CBENVPAR name);
+
+    args[0].i = (jint)info->hdr.version;
+    args[1].i = (jint)info->hdr.nmesgs;
+    args[2].i = (jint)info->hdr.nchunks;
+    args[3].i = (jint)info->hdr.flags;
+    args[4].j = (jlong)info->hdr.space.total;
+    args[5].j = (jlong)info->hdr.space.meta;
+    args[6].j = (jlong)info->hdr.space.mesg;
+    args[7].j = (jlong)info->hdr.space.free;
+    args[8].j = (jlong)info->hdr.mesg.present;
+    args[9].j = (jlong)info->hdr.mesg.shared;
+    // get a reference to the H5_hdr_info_t class
+    cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_hdr_info_t");
+    if (cls == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    // get a reference to the constructor; the name is <init>
+    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(IIIIJJJJJJ)V");
+    if (constructor == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    hdrinfobuf = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+    args[0].j = (jlong)info->meta_size.obj.index_size;
+    args[1].j = (jlong)info->meta_size.obj.heap_size;
+    // get a reference to the H5_ih_info_t class
+    cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5_ih_info_t");
+    if (cls == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    // get a reference to the constructor; the name is <init>
+    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(JJ)V");
+    if (constructor == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    ihinfobuf1 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+    args[0].j = (jlong)info->meta_size.attr.index_size;
+    args[1].j = (jlong)info->meta_size.attr.heap_size;
+    ihinfobuf2 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+    args[0].j = (jlong)info->fileno;
+    args[1].j = (jlong)info->addr;
+    args[2].i = info->type;
+    args[3].i = (jint)info->rc;
+    args[4].j = (jlong)info->num_attrs;
+    args[5].j = info->atime;
+    args[6].j = info->mtime;
+    args[7].j = info->ctime;
+    args[8].j = info->btime;
+    args[9].l = hdrinfobuf;
+    args[10].l = ihinfobuf1;
+    args[11].l = ihinfobuf2;
+    // get a reference to the H5O_info_t class
+    cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_info_t");
+    if (cls == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    // get a reference to the constructor; the name is <init>
+    constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "<init>", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V");
+    if (constructor == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args);
+
+    status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, g_id, str, cb_info_t, op_data);
+
+    JVMPTR->DetachCurrentThread(JVMPAR);
+
+    return status;
+} /* end H5O_iterate_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ovisit
+ * Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Ovisit(JNIEnv *env, jclass clss, jlong grp_id, jint idx_type, jint order,
+        jobject callback_op, jobject op_data)
+{
+    herr_t   status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if (op_data == NULL) {
+        h5nullArgument(env, "H5Ovisit:  op_data is NULL");
+        return -1;
+    } /* end if */
+    if (callback_op == NULL) {
+        h5nullArgument(env, "H5Ovisit:  callback_op is NULL");
+        return -1;
+    } /* end if */
+
+    status = H5Ovisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Ovisit */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Ovisit_by_name
+ * Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name(JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order,
+        jobject callback_op, jobject op_data, jlong access_id)
+{
+    herr_t        status = -1;
+    const char   *lName;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if (op_data == NULL) {
+        h5nullArgument(env, "H5Ovisit_by_name:  op_data is NULL");
+        return -1;
+    } /* end if */
+    if (callback_op == NULL) {
+        h5nullArgument(env, "H5Ovisit_by_name:  callback_op is NULL");
+        return -1;
+    } /* end if */
+
+    PIN_JAVA_STRING(name, lName, -1);
+
+    status = H5Ovisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, lName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oset_comment
+ * Signature: (JLjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Oset_1comment(JNIEnv *env, jclass clss, jlong loc_id, jstring comment)
+{
+    herr_t      status = -1;
+    const char *oComment;
+    jboolean    isCopy;
+
+    if (comment == NULL) {
+        oComment = NULL;
+    } /* end if */
+    else {
+        oComment = ENVPTR->GetStringUTFChars(ENVPAR comment, &isCopy);
+        if (oComment == NULL) {
+            h5JNIFatalError( env, "H5Oset_comment:  comment not pinned");
+            return;
+        } /* end if */
+    } /* end else */
+
+    status = H5Oset_comment((hid_t)loc_id, oComment);
+
+    if(oComment)
+        ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Oset_1comment */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oset_comment_by_name
+ * Signature: (JLjava/lang/String;Ljava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Oset_1comment_1by_1name(JNIEnv *env, jclass clss, jlong loc_id,
+        jstring name, jstring comment, jlong access_id)
+{
+    herr_t      status = -1;
+    const char *oName;
+    const char *oComment;
+
+    PIN_JAVA_STRING0(name, oName);
+
+    if (comment == NULL) {
+        oComment = NULL;
+    } /* end if */
+    else {
+        jboolean    isCopy;
+        oComment = ENVPTR->GetStringUTFChars(ENVPAR comment, &isCopy);
+        if (oComment == NULL) {
+            UNPIN_JAVA_STRING(name, oName);
+            h5JNIFatalError( env, "H5Oset_comment_by_name:  comment not pinned");
+            return;
+        } /* end if */
+    } /* end else */
+
+    status = H5Oset_comment_by_name((hid_t)loc_id, oName, oComment, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, oName);
+
+    if(oComment)
+        ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Oset_1comment_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oget_comment
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Oget_1comment(JNIEnv *env, jclass clss, jlong loc_id)
+{
+    char    *oComment;
+    ssize_t  buf_size;
+    ssize_t  status;
+    jstring  str = NULL;
+
+    /* get the length of the comment */
+    buf_size = H5Oget_comment((hid_t)loc_id, NULL, 0);
+    if (buf_size < 0) {
+        h5badArgument( env, "H5Oget_comment:  buf_size < 0");
+        return NULL;
+    } /* end if */
+    if (buf_size == 0) {
+        return NULL;
+    } /* end if */
+
+    buf_size++; /* add extra space for the null terminator */
+    oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size);
+    if (oComment == NULL) {
+        /* exception -- out of memory */
+        h5outOfMemory( env, "H5Oget_comment:  malloc failed");
+        return NULL;
+    } /* end if */
+
+    status = H5Oget_comment((hid_t)loc_id, oComment, (size_t)buf_size);
+
+    if (status >= 0) {
+        /*  may throw OutOfMemoryError */
+        str = ENVPTR->NewStringUTF(ENVPAR oComment);
+        HDfree(oComment);
+        if (str == NULL) {
+            h5JNIFatalError( env, "H5Oget_comment:  return string not allocated");
+        } /* end if */
+    } /* end if */
+    else {
+        HDfree(oComment);
+        h5libraryError(env);
+    } /* end else */
+
+    return (jstring)str;
+} /* end Java_hdf_hdf5lib_H5_H5Oget_1comment */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oget_comment_by_name
+ * Signature: (JLjava/lang/String;J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    char       *oComment;
+    const char *oName;
+    ssize_t     buf_size;
+    ssize_t     status;
+    jstring     str = NULL;
+
+    PIN_JAVA_STRING(name, oName, NULL);
+
+    /* get the length of the comment */
+    buf_size = H5Oget_comment_by_name((hid_t)loc_id, oName, NULL, 0, (hid_t)access_id);
+    if (buf_size < 0) {
+        UNPIN_JAVA_STRING(name, oName);
+        h5badArgument( env, "H5Oget_comment_by_name:  buf_size < 0");
+        return NULL;
+    } /* end if */
+    if (buf_size == 0) {
+        UNPIN_JAVA_STRING(name, oName);
+        return NULL;
+    } /* end if */
+
+    buf_size++; /* add extra space for the null terminator */
+    oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size);
+    if (oComment == NULL) {
+        UNPIN_JAVA_STRING(name, oName);
+        h5outOfMemory( env, "H5Oget_comment_by_name:  malloc failed");
+        return NULL;
+    } /* end if */
+
+    status = H5Oget_comment_by_name((hid_t)loc_id, oName, oComment, (size_t)buf_size, (hid_t)access_id);
+    UNPIN_JAVA_STRING(name, oName);
+
+    if (status >= 0) {
+        /*  may throw OutOfMemoryError */
+        str = ENVPTR->NewStringUTF(ENVPAR oComment);
+        HDfree(oComment);
+        if (str == NULL) {
+            h5JNIFatalError( env, "H5Oget_comment_by_name:  return string not allocated");
+        } /* end if */
+    } /* end if */
+    else {
+        HDfree(oComment);
+        h5libraryError(env);
+    } /* end else */
+
+    return (jstring)str;
+} /* end Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oexists_by_name
+ * Signature: (JLjava/lang/String;J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Oexists_1by_1name(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
+{
+    htri_t      bval = JNI_FALSE;
+    const char *oName;
+
+    PIN_JAVA_STRING(name, oName, JNI_FALSE);
+
+    bval = H5Oexists_by_name((hid_t)loc_id, oName, (hid_t)access_id);
+
+    UNPIN_JAVA_STRING(name, oName);
+
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Oexists_1by_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Odecr_refcount
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Odecr_1refcount(JNIEnv *env, jclass clss, jlong object_id)
+{
+    if (H5Odecr_refcount((hid_t)object_id) < 0)
+        h5libraryError(env);
+}
+/* end Java_hdf_hdf5lib_H5_H5Odecr_1refcount */
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Oincr_refcount
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Oincr_1refcount(JNIEnv *env, jclass clss, jlong object_id)
+{
+    if (H5Oincr_refcount((hid_t)object_id) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Oincr_1refcount */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Oopen_by_addr
+ * Signature: (JJ)J;
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Oopen_1by_1addr(JNIEnv *env, jclass clss, jlong loc_id, jlong addr)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Oopen_by_addr((hid_t)loc_id, (haddr_t)addr );
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Oopen_1by_1addr */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Oopen_by_idx
+ * Signature: (JLjava/lang/String;IIJJ)J;
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx(JNIEnv *env, jclass clss, jlong loc_id, jstring name,
+        jint index_field, jint order, jlong link_n, jlong lapl_id)
+{
+    hid_t       retVal = -1;
+    const char *oName;
+
+    PIN_JAVA_STRING(name, oName, -1);
+
+    retVal = H5Oopen_by_idx((hid_t)loc_id, oName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (hid_t)lapl_id );
+
+    UNPIN_JAVA_STRING(name, oName);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5oImp.h b/java/src/jni/h5oImp.h
new file mode 100644
index 0000000..e6889b2
--- /dev/null
+++ b/java/src/jni/h5oImp.h
@@ -0,0 +1,175 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5_H5O */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5O
+#define _Included_hdf_hdf5lib_H5_H5O
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    _H5Oopen
+     * Signature: (JLjava/lang/String;J)J
+     */
+    JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen
+      (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    _H5Oclose
+     * Signature: (J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Oclose
+      (JNIEnv*, jclass, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Ocopy
+     * Signature: (JLjava/lang/String;JLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Ocopy
+      (JNIEnv*, jclass, jlong, jstring, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oget_info
+     * Signature: (J)Lhdf/hdf5lib/structs/H5O_info_t;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Oget_1info
+    (JNIEnv*, jclass, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oget_info_by_name
+     * Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5O_info_t;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name
+    (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oget_info_by_idx
+     * Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5O_info_t;
+     */
+    JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx
+    (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Olink
+     * Signature: (JJLjava/lang/String;JJ)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Olink
+      (JNIEnv*, jclass, jlong, jlong, jstring, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Ovisit
+     * Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Ovisit
+      (JNIEnv*, jclass, jlong, jint, jint, jobject, jobject);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Ovisit_by_name
+     * Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
+     */
+    JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jint, jint, jobject, jobject, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oset_comment
+     * Signature: (JLjava/lang/String;)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Oset_1comment
+      (JNIEnv*, jclass, jlong, jstring);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oset_comment_by_name
+     * Signature: (JLjava/lang/String;Ljava/lang/String;J)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Oset_1comment_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oget_comment
+     * Signature: (J)Ljava/lang/String;
+     */
+    JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Oget_1comment
+      (JNIEnv*, jclass, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oget_comment_by_name
+     * Signature: (JLjava/lang/String;J)Ljava/lang/String;
+     */
+    JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oexists_by_name
+     * Signature: (JLjava/lang/String;J)Z
+     */
+    JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Oexists_1by_1name
+      (JNIEnv*, jclass, jlong, jstring, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Odecr_refcount
+     * Signature: (J)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Odecr_1refcount
+      (JNIEnv*, jclass, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    H5Oincr_refcount
+     * Signature: (J)V
+     */
+    JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Oincr_1refcount
+      (JNIEnv*, jclass, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    _H5Oopen_by_addr
+     * Signature: (JJ)J;
+     */
+    JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen_1by_1addr
+      (JNIEnv*, jclass, jlong, jlong);
+
+    /*
+     * Class:     hdf_hdf5lib_H5
+     * Method:    _H5Oopen_by_idx
+     * Signature: (JLjava/lang/String;IIJJ)J;
+     */
+    JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx
+      (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5O */
diff --git a/java/src/jni/h5pImp.c b/java/src/jni/h5pImp.c
new file mode 100644
index 0000000..8ecd81c
--- /dev/null
+++ b/java/src/jni/h5pImp.c
@@ -0,0 +1,5506 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5util.h"
+#include "h5pImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+extern jobject copy_callback;
+extern jobject close_callback;
+extern jobject create_callback;
+extern jobject compare_callback;
+extern jobject get_callback;
+extern jobject set_callback;
+extern jobject delete_callback;
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5P_cls_create_func_cb(hid_t prop_id, void *create_data);
+static herr_t H5P_cls_copy_func_cb(hid_t new_prop_id, hid_t old_prop_id, void *copy_data);
+static herr_t H5P_cls_close_func_cb(hid_t prop_id, void *close_data);
+
+static herr_t H5P_prp_create_func_cb(const char *name, size_t size, void *value);
+static herr_t H5P_prp_copy_func_cb(const char *name, size_t size, void *value);
+static herr_t H5P_prp_close_func_cb(const char *name, size_t size, void *value);
+static int H5P_prp_compare_func_cb(void *value1, void *value2, size_t size);
+static herr_t H5P_prp_get_func_cb(hid_t prop_id, const char *name, size_t size, void *value);
+static herr_t H5P_prp_set_func_cb(hid_t prop_id, const char *name, size_t size, void *value);
+static herr_t H5P_prp_delete_func_cb(hid_t prop_id, const char *name, size_t size, void *value);
+
+static herr_t H5P_iterate_cb(hid_t prop_id, const char *name, void *op_data);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcreate
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Pcreate(JNIEnv *env, jclass clss, jlong type)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Pcreate((hid_t)type);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Pcreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Pclose(JNIEnv *env, jclass clss, jlong plist)
+{
+    herr_t retVal = 0;
+
+    if (plist > 0)
+        retVal = H5Pclose((hid_t)plist);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Pclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1class(JNIEnv *env, jclass clss, jlong plist)
+{
+    hid_t retVal = -1;
+
+    retVal = retVal = H5Pget_class((hid_t) plist);
+    if (retVal == H5P_ROOT)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Pcopy(JNIEnv *env, jclass clss, jlong plist)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Pcopy((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Pcopy */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_version
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1version(JNIEnv *env, jclass clss, jlong plist, jintArray version_info)
+{
+    herr_t   status = -1;
+    jint    *theArray;
+    jboolean isCopy;
+
+    if (version_info == NULL) {
+        h5nullArgument(env, "H5Pget_version:  version_info input array is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR version_info) < 4) {
+        h5badArgument(env, "H5Pget_version:  version_info input array < 4");
+    } /* end else if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR version_info, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_version:  version_info not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_version((hid_t)plist, (unsigned *)&(theArray[0]),
+                    (unsigned *)&(theArray[1]), (unsigned *)&(theArray[2]), (unsigned *)&(theArray[3]));
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR version_info, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR version_info, theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1version */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_userblock
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1userblock(JNIEnv *env, jclass clss, jlong plist, jlong size)
+{
+    herr_t retVal = -1;
+    long sz = (long)size;
+
+    retVal = H5Pset_userblock((hid_t)plist, (hsize_t)sz);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1userblock */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_userblock
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1userblock(JNIEnv *env, jclass clss, jlong plist, jlongArray size)
+{
+    herr_t   status = -1;
+    jlong   *theArray;
+    jboolean isCopy;
+    hsize_t  s;
+
+    if (size == NULL) {
+        h5nullArgument(env, "H5Pget_userblock:  size is NULL");
+    } /* end if */
+    else {
+        theArray = (jlong*)ENVPTR->GetLongArrayElements(ENVPAR size, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_userblock:  size not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_userblock((hid_t)plist, &s);
+
+            if (status < 0) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = (jlong)s;
+                ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1userblock */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sizes
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1sizes(JNIEnv *env, jclass clss, jlong plist, jint sizeof_addr, jint sizeof_size)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_sizes((hid_t)plist, (size_t)sizeof_addr, (size_t)sizeof_size);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1sizes */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sizes
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1sizes(JNIEnv *env, jclass clss, jlong plist, jlongArray size)
+{
+    herr_t   status = -1;
+    jlong   *theArray;
+    jboolean isCopy;
+    size_t   ss;
+    size_t   sa;
+
+    if (size == NULL) {
+        h5nullArgument(env, "H5Pget_sizes:  size is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR size) < 2) {
+        h5badArgument(env, "H5Pget_sizes:  size input array < 2 elements");
+    }
+    else {
+        theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR size, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_sizes:  size not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_sizes((hid_t)plist, &sa, &ss);
+            if (status < 0) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = (jlong)sa;
+                theArray[1] = (jlong)ss;
+                ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1sizes */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sym_k
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1sym_1k(JNIEnv *env, jclass clss, jlong plist, jint ik, jint lk)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_sym_k((hid_t)plist, (unsigned)ik, (unsigned)lk);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1sym_1k */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sym_k
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1sym_1k(JNIEnv *env, jclass clss, jlong plist, jintArray size)
+{
+    herr_t   status = -1;
+    jint    *theArray;
+    jboolean isCopy;
+
+    if (size == NULL) {
+        h5nullArgument(env, "H5Pget_sym_k:  size is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR size) < 2) {
+        h5badArgument(env, "H5Pget_sym_k:  size < 2 elements");
+    } /* end else if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR size, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_sym_k:  size not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_sym_k((hid_t)plist, (unsigned *)&(theArray[0]), (unsigned *)&(theArray[1]));
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR size, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR size, theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1sym_1k */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_istore_k
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1istore_1k(JNIEnv *env, jclass clss, jlong plist, jint ik)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_istore_k((hid_t)plist, (unsigned)ik);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1istore_1k */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_istore_k
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1istore_1k(JNIEnv *env, jclass clss, jlong plist, jintArray ik)
+{
+    herr_t   status = -1;
+    jint    *theArray;
+    jboolean isCopy;
+
+    if (ik == NULL) {
+        h5nullArgument(env, "H5Pget_store_k:  ik is NULL");
+    } /* end if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR ik, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_store_k:  size not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_istore_k((hid_t)plist, (unsigned *)&(theArray[0]));
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR ik, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR ik, theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1istore_1k */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_layout
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1layout(JNIEnv *env, jclass clss, jlong plist, jint layout)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_layout((hid_t)plist, (H5D_layout_t)layout);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1layout */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_layout
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1layout(JNIEnv *env, jclass clss, jlong plist)
+{
+    H5D_layout_t retVal = H5D_LAYOUT_ERROR;
+
+    retVal = H5Pget_layout((hid_t)plist);
+    if (retVal == H5D_LAYOUT_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1layout */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_chunk
+ * Signature: (JI[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1chunk(JNIEnv *env, jclass clss, jlong plist, jint ndims, jbyteArray dim)
+{
+    herr_t   status = -1;
+    jbyte   *theArray;
+    jboolean isCopy;
+    hsize_t *da;
+    hsize_t *lp;
+    jlong   *jlp;
+    size_t   i;
+    size_t   rank;
+
+    if (dim == NULL) {
+        h5nullArgument(env, "H5Pset_chunk:  dim array is NULL");
+    } /* end if */
+    else {
+        i = (size_t)ENVPTR->GetArrayLength(ENVPAR dim);
+        rank = i / sizeof(jlong);
+        if (rank < ndims) {
+            h5badArgument(env, "H5Pset_chunk:  dims array < ndims");
+        } /* end if */
+        else {
+            theArray = (jbyte *)ENVPTR->GetByteArrayElements(ENVPAR dim, &isCopy);
+            if (theArray == NULL) {
+                h5JNIFatalError(env, "H5Pset_chunk:  dim array not pinned");
+            } /* end if */
+            else {
+                da = lp = (hsize_t *)HDmalloc(rank * sizeof(hsize_t));
+                if (da == NULL) {
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR dim, theArray, JNI_ABORT);
+                    h5JNIFatalError(env,  "H5Pset_chunk:  dims not converted to hsize_t");
+                } /* end if */
+                else {
+                    jlp = (jlong *)theArray;
+                    for (i = 0; i < rank; i++) {
+                        *lp = (hsize_t)*jlp;
+                        lp++;
+                        jlp++;
+                    } /* end if */
+
+                    status = H5Pset_chunk((hid_t)plist, (int)ndims, da);
+
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR dim, theArray, JNI_ABORT);
+                    HDfree(da);
+
+                    if (status < 0)
+                        h5libraryError(env);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_chunk
+ * Signature: (JI[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1chunk(JNIEnv *env, jclass clss, jlong plist, jint max_ndims, jlongArray dims)
+{
+    herr_t   status = -1;
+    jlong   *theArray;
+    jboolean isCopy;
+    hsize_t *da;
+    int      i;
+
+    if (dims == NULL) {
+        h5nullArgument(env, "H5Pget_chunk:  dims is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR dims) < max_ndims) {
+        h5badArgument(env, "H5Pget_chunk:  dims array < max_ndims");
+    } /* end else if */
+    else {
+        theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR dims, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_chunk:  input dims not pinned");
+        } /* end if */
+        else {
+            da = (hsize_t *)HDmalloc((size_t)max_ndims * sizeof(hsize_t));
+            if (da == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, theArray, JNI_ABORT);
+                h5JNIFatalError(env, "H5Pget_chunk:  dims not converted to hsize_t");
+            } /* end if */
+            else {
+                status = H5Pget_chunk((hid_t)plist, (int)max_ndims, da);
+
+                if (status < 0)  {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR dims, theArray, JNI_ABORT);
+                    HDfree (da);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    for (i = 0; i < max_ndims; i++) {
+                        theArray[i] = (jlong)da[i];
+                    }
+                    HDfree (da);
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR dims, theArray, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_alignment
+ * Signature: (JJJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1alignment(JNIEnv *env, jclass clss, jlong plist, jlong threshold, jlong alignment)
+{
+    herr_t retVal = -1;
+    long thr = (long)threshold;
+    long align = (long)alignment;
+
+    retVal = H5Pset_alignment((hid_t)plist, (hsize_t)thr, (hsize_t)align);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1alignment */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_alignment
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1alignment(JNIEnv *env, jclass clss, jlong plist, jlongArray alignment)
+{
+    herr_t   status = -1;
+    jlong   *theArray;
+    jboolean isCopy;
+    hsize_t  t;
+    hsize_t  a;
+
+    if (alignment == NULL) {
+        h5nullArgument(env, "H5Pget_alignment:  input alignment is NULL");
+    } /* end if */
+    else {
+        if (ENVPTR->GetArrayLength(ENVPAR alignment) < 2) {
+            h5badArgument(env, "H5Pget_alignment:  alignment input array < 2");
+        } /* end if */
+        else {
+            theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR alignment, &isCopy);
+            if (theArray == NULL) {
+                h5JNIFatalError(env, "H5Pget_alignment:  input array not pinned");
+            } /* end if */
+            else {
+                status = H5Pget_alignment((hid_t)plist, &t, &a);
+                if (status < 0)  {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR alignment, theArray, JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    theArray[0] = (jlong)t;
+                    theArray[1] = (jlong)a;
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR alignment, theArray, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1alignment */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_external
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1external(JNIEnv *env, jclass clss, jlong plist, jstring name, jlong offset, jlong size)
+{
+    herr_t      status = -1;
+    const char *fileName;
+    off_t       off;
+    hsize_t     sz;
+    hid_t       plid;
+
+    plid = (hid_t)plist;
+    off = (off_t)offset;
+    sz = (hsize_t)size;
+
+    PIN_JAVA_STRING(name, fileName, -1);
+
+    status = H5Pset_external(plid, fileName, off, sz);
+
+    UNPIN_JAVA_STRING(name, fileName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1external */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_external_count
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1external_1count(JNIEnv *env, jclass clss, jlong plist)
+{
+    int retVal = -1;
+
+    retVal = H5Pget_external_count((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1external_1count */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_external
+ * Signature: (JIJ[Ljava/lang/String;[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1external(JNIEnv *env, jclass clss, jlong plist, jint idx, jlong name_size,
+        jobjectArray name, jlongArray size)
+{
+    herr_t   status = -1;
+    jlong   *theArray;
+    jboolean isCopy;
+    char    *file;
+    jstring  str;
+    off_t    o;
+    hsize_t  s;
+
+    if (name_size < 0) {
+        h5badArgument(env, "H5Pget_external:  name_size < 0");
+        return -1;
+    } /* end if */
+    else if (name_size == 0) {
+        file = NULL;
+    } /* end else if */
+    else {
+        file = (char *)HDmalloc(sizeof(char)*(size_t)name_size);
+    } /* end else */
+
+    if (size != NULL) {
+        if (ENVPTR->GetArrayLength(ENVPAR size) < 2) {
+            HDfree(file);
+            h5badArgument(env, "H5Pget_external:  size input array < 2");
+            return -1;
+        } /* end if */
+        theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR size, &isCopy);
+        if (theArray == NULL) {
+            HDfree(file);
+            h5JNIFatalError( env, "H5Pget_external:  size array not pinned");
+            return -1;
+        } /* end if */
+    } /* end if */
+
+    status = H5Pget_external((hid_t) plist, (unsigned)idx, (size_t)name_size,
+            file, (off_t *)&o, (hsize_t *)&s);
+    if (status < 0) {
+        if (size != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, JNI_ABORT);
+        } /* end if */
+        HDfree(file);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (size != NULL) {
+            theArray[0] = o;
+            theArray[1] = (jlong)s;
+            ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, 0);
+        } /* end if */
+
+        if (file != NULL) {
+            /*  NewStringUTF may throw OutOfMemoryError */
+            str = ENVPTR->NewStringUTF(ENVPAR file);
+            if (str == NULL) {
+                HDfree(file);
+                h5JNIFatalError(env, "H5Pget_external:  return array not created");
+            } /* end if */
+            else {
+                /*  SetObjectArrayElement may raise exceptions */
+                ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str);
+                HDfree(file);
+            } /* end else */
+        } /* end if */
+    } /* end else */
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1external */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fill_value
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fill_1value(JNIEnv *env, jclass clss, jlong plist_id, jlong type_id, jbyteArray value)
+{
+    jint     status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (value != NULL) {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError(env, "H5Pget_fill_value:  value array not pinned");
+            return -1;
+        } /* end if */
+    } /* end if */
+
+    status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP);
+
+    if (value != NULL)
+        ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1value */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fill_value
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fill_1value(JNIEnv *env, jclass clss, jlong plist_id, jlong type_id, jbyteArray value)
+{
+    jint     status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (value == NULL) {
+        h5badArgument(env, "H5Pget_fill_value:  value is NULL");
+    } /* end if */
+    else {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError(env, "H5Pget_fill_value:  value array not pinned");
+        } /* end if */
+        else {
+            status = H5Pget_fill_value((hid_t)plist_id, (hid_t)type_id, byteP);
+            if (status < 0) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, 0);
+        } /* end else */
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1value */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_filter
+ * Signature: (JIIJ[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter, jint flags,
+  jlong cd_nelmts, jintArray cd_values)
+{
+    herr_t   status = -1;
+    jint    *theArray;
+    jboolean isCopy;
+
+    if (cd_values == NULL) {
+        status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter,
+                (unsigned int)flags, (size_t)cd_nelmts, NULL);
+        if (status < 0)
+            h5libraryError(env);
+    } /* end if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pset_filter:  input array  not pinned");
+        }/* end if */
+        else {
+            status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter,
+                    (unsigned int)flags, (size_t)cd_nelmts, (const unsigned int *)theArray);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, theArray, JNI_ABORT);
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1filter */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nfilters
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1nfilters(JNIEnv *env, jclass clss, jlong plist)
+{
+    int retVal = -1;
+
+    retVal = H5Pget_nfilters((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1nfilters */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter_number, jintArray flags,
+        jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name)
+{
+    herr_t   status = -1;
+    jint    *flagsArray;
+    jlong   *cd_nelmtsArray;
+    jint    *cd_valuesArray;
+    jboolean isCopy;
+    jstring  str;
+    char    *filter;
+
+    if (namelen <= 0) {
+        h5badArgument(env, "H5Pget_filter:  namelen <= 0");
+    } /* end if */
+    else if (flags == NULL) {
+        h5badArgument(env, "H5Pget_filter:  flags is NULL");
+    } /* end else if */
+    else if (cd_nelmts == NULL) {
+        h5badArgument(env, "H5Pget_filter:  cd_nelmts is NULL");
+    } /* end else if */
+    else if (cd_values == NULL) {
+        h5badArgument(env, "H5Pget_filter:  cd_values is NULL");
+    } /* end else if */
+    else {
+        filter = (char *)HDmalloc(sizeof(char)*(size_t)namelen);
+        if (filter == NULL) {
+            h5outOfMemory(env, "H5Pget_filter:  namelent malloc failed");
+            return -1;
+        } /* end if */
+        flagsArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR flags, &isCopy);
+        if (flagsArray == NULL) {
+            HDfree(filter);
+            h5JNIFatalError(env, "H5Pget_filter:  flags array not pinned");
+            return -1;
+        } /* end if */
+        cd_nelmtsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy);
+        if (cd_nelmtsArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5JNIFatalError(env, "H5Pget_filter:  nelmts array not pinned");
+            return -1;
+        } /* end if */
+        cd_valuesArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy);
+        if (cd_valuesArray == NULL)  {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5JNIFatalError(env, "H5Pget_filter:  elmts array not pinned");
+            return -1;
+        } /* end if */
+
+        { /* direct cast (size_t *)variable fails on 32-bit environment */
+            long long cd_nelmts_temp = *(cd_nelmtsArray);
+            size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
+            unsigned int filter_config;
+            status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
+                (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
+                (size_t)namelen, filter, &filter_config);
+
+            *cd_nelmtsArray = (jlong)cd_nelmts_t;
+        } /* end direct cast special */
+
+        if (status < 0) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, 0);
+
+            /*  NewStringUTF may throw OutOfMemoryError */
+            str = ENVPTR->NewStringUTF(ENVPAR filter);
+            HDfree(filter);
+            if (str == NULL) {
+                h5JNIFatalError(env, "H5Pget_filter:  return string not pinned");
+            } /* end if */
+            else {
+                /*  SetObjectArrayElement may throw exceptiosn */
+                ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_driver
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1driver(JNIEnv *env, jclass clss, jlong plist)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Pget_driver((hid_t) plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1driver */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_cache
+ * Signature: (JIJJD)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1cache(JNIEnv *env, jclass clss, jlong plist, jint mdc_nelmts, jlong rdcc_nelmts,
+  jlong rdcc_nbytes, jdouble rdcc_w0)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_cache((hid_t)plist, (int)mdc_nelmts, (size_t)rdcc_nelmts,
+                (size_t)rdcc_nbytes, (double) rdcc_w0);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1cache */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_cache
+ * Signature: (J[I[J[J[D)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1cache(JNIEnv *env, jclass clss, jlong plist, jintArray mdc_nelmts,
+        jlongArray rdcc_nelmts, jlongArray rdcc_nbytes, jdoubleArray rdcc_w0)
+{
+    herr_t   status = -1;
+    jint     mode;
+    jdouble *w0Array;
+    jlong   *rdcc_nelmtsArray;
+    jlong   *nbytesArray;
+    jboolean isCopy;
+
+    if (rdcc_w0 == NULL) {
+        w0Array = (jdouble *)NULL;
+    } /* end if */
+    else {
+        w0Array = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR rdcc_w0, &isCopy);
+        if (w0Array == NULL) {
+            h5JNIFatalError(env, "H5Pget_cache:  w0_array array not pinned");
+            return -1;
+        } /* end if */
+    } /* end else */
+
+    if (rdcc_nelmts == NULL) {
+        rdcc_nelmtsArray = (jlong *) NULL;
+    } /* end if */
+    else {
+        rdcc_nelmtsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nelmts, &isCopy);
+        if (rdcc_nelmtsArray == NULL) {
+            /* exception -- out of memory */
+            if (w0Array != NULL) {
+                ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, JNI_ABORT);
+            }
+            h5JNIFatalError(env, "H5Pget_cache:  rdcc_nelmts array not pinned");
+            return -1;
+        } /* end if */
+    } /* end else */
+
+    if (rdcc_nbytes == NULL) {
+        nbytesArray = (jlong *) NULL;
+    } /* end if */
+    else {
+        nbytesArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nbytes, &isCopy);
+        if (nbytesArray == NULL) {
+            if (w0Array != NULL) {
+                ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, JNI_ABORT);
+            } /* end if */
+            if (rdcc_nelmtsArray != NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nelmts, rdcc_nelmtsArray, JNI_ABORT);
+            } /* end if */
+            h5JNIFatalError(env, "H5Pget_cache:  nbytesArray array not pinned");
+            return -1;
+        } /* end if */
+    } /* end else */
+
+    { /* direct cast (size_t *)variable fails on 32-bit environment */
+        long long rdcc_nelmts_temp = *(rdcc_nelmtsArray);
+        size_t rdcc_nelmts_t = (size_t)rdcc_nelmts_temp;
+        long long nbytes_temp = *(nbytesArray);
+        size_t nbytes_t = (size_t)nbytes_temp;
+
+        status = H5Pget_cache((hid_t)plist, (int *)NULL, &rdcc_nelmts_t,
+                &nbytes_t, (double *)w0Array);
+
+        *rdcc_nelmtsArray = (jlong)rdcc_nelmts_t;
+        *nbytesArray = (jlong)nbytes_t;
+    } /* end direct cast special */
+
+
+    if (status < 0) {
+        mode = JNI_ABORT;
+    } /* end if */
+    else {
+        mode = 0; /* commit and free */
+    } /* end else */
+
+    if (rdcc_nelmtsArray != NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nelmts, rdcc_nelmtsArray, mode);
+    } /* end if */
+
+    if (nbytesArray != NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nbytes, nbytesArray, mode);
+    } /* end if */
+
+    if (w0Array != NULL) {
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, mode);
+    } /* end if */
+
+    if (status < 0) {
+        h5libraryError(env);
+    } /* end if */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1cache */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_buffer
+ * Signature: (JJ[B[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1buffer(JNIEnv *env, jclass clss, jlong plist, jlong size, jbyteArray tconv, jbyteArray bkg)
+{
+    h5unimplemented(env, "H5Pset_buffer:  not implemented");
+    return -1;
+#ifdef notdef
+
+/* DON'T IMPLEMENT THIS!!! */
+    jint     status = -1;
+    jbyte   *tconvP;
+    jbyte   *bkgP;
+    jboolean isCopy;
+
+    if (tconv == NULL)
+        tconvP = (jbyte *)NULL;
+    else {
+        tconvP = ENVPTR->GetByteArrayElements(ENVPAR tconv, &isCopy);
+        if (tconvP == NULL) {
+            h5JNIFatalError(env, "H5Pset_buffer:  tconv not pinned");
+            return -1;
+        }
+    }
+    if (bkg == NULL)
+        bkgP = (jbyte *)NULL;
+    else {
+        bkgP = ENVPTR->GetByteArrayElements(ENVPAR bkg, &isCopy);
+        if (bkgP == NULL) {
+            h5JNIFatalError(env, "H5Pset_buffer:  bkg not pinned");
+            return -1;
+        }
+    }
+
+    status = H5Pset_buffer((hid_t)plist, (size_t)size, tconvP, bkgP);
+    if (status < 0) {
+        if (tconv != NULL)
+            ENVPTR->ReleaseByteArrayElements(ENVPAR tconv, tconvP, JNI_ABORT);
+        if (bkg != NULL)
+            ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, JNI_ABORT);
+        h5libraryError(env);
+        return -1;
+    }
+
+    if (tconv != NULL)
+        ENVPTR->ReleaseByteArrayElements(ENVPAR tconv, tconvP, 0);
+    if (bkg != NULL)
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, 0);
+
+    return status;
+#endif
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1buffer */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_buffer
+ * Signature: (J[B[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1buffer(JNIEnv *env, jclass clss, jlong plist, jbyteArray tconv, jbyteArray bkg)
+{
+    h5unimplemented(env, "H5Pget_buffer:  not implemented");
+    return -1;
+#ifdef notdef
+
+/* DON'T IMPLEMENT THIS!!! */
+    jlong     status = -1;
+    jbyte   *tconvP;
+    jbyte   *bkgP;
+    jboolean isCopy;
+
+    if (tconv == NULL) {
+        h5nullArgument(env, "H5Pget_buffer:  tconv input array is NULL");
+        return -1;
+    }
+    tconvP = ENVPTR->GetByteArrayElements(ENVPAR tconv, &isCopy);
+    if (tconvP == NULL) {
+        h5JNIFatalError(env, "H5Pget_buffer:  tconv not pinned");
+        return -1;
+    }
+    if (bkg == NULL) {
+        h5nullArgument(env, "H5Pget_buffer:  bkg array is NULL");
+        return -1;
+    }
+    bkgP = ENVPTR->GetByteArrayElements(ENVPAR bkg, &isCopy);
+    if (bkgP == NULL) {
+        h5JNIFatalError(env, "H5Pget_buffer:  bkg not pinned");
+        return -1;
+    }
+
+    status = H5Pget_buffer((hid_t)plist, tconvP, bkgP);
+    if (status < 0) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR tconv, tconvP, JNI_ABORT);
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, JNI_ABORT);
+        h5libraryError(env);
+        return -1;
+    }
+    ENVPTR->ReleaseByteArrayElements(ENVPAR tconv, tconvP, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, 0);
+
+    return status;
+#endif
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1buffer */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_buffer_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1buffer_1size(JNIEnv *env, jclass clss, jlong plist, jlong size)
+{
+    if (H5Pset_buffer((hid_t)plist, (size_t)size, NULL, NULL) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1buffer_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_buffer_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1buffer_1size(JNIEnv *env, jclass clss, jlong plist)
+{
+    size_t size = 0;
+
+    size = H5Pget_buffer((hid_t)plist, NULL, NULL);
+    if (size == 0)
+        h5libraryError(env);
+
+    return (jlong)size;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1buffer_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_preserve
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1preserve(JNIEnv *env, jclass clss, jlong plist, jboolean status)
+{
+    hbool_t st;
+    herr_t  retVal = -1;
+
+    if (status == JNI_TRUE) {
+        st = TRUE;
+    } /* end if */
+    else if (status == JNI_FALSE) {
+        st = false;
+    } /* end else if */
+    else {
+        h5badArgument(env, "H5Pset_preserve:  status not TRUE or FALSE");
+        return -1;
+    } /* end else */
+
+    retVal = H5Pset_preserve((hid_t)plist, st);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1preserve */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_preserve
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1preserve(JNIEnv *env, jclass clss, jlong plist)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pget_preserve((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1preserve */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_deflate
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1deflate(JNIEnv *env, jclass clss, jlong plist, jint level)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_deflate((hid_t)plist, (unsigned)level);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1deflate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_gc_references
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1gc_1references(JNIEnv *env, jclass clss, jlong fapl_id, jboolean gc_ref)
+{
+    herr_t   retVal = -1;
+    unsigned gc_ref_val;
+
+    if (gc_ref == JNI_TRUE)
+        gc_ref_val = 1;
+    else
+        gc_ref_val = 0;
+
+    retVal = H5Pset_gc_references((hid_t)fapl_id, gc_ref_val);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1gc_1references */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_gc_references
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1gc_1references(JNIEnv *env, jclass clss, jlong fapl_id)
+{
+    unsigned  gc_ref_val = 0;
+    jboolean  bval = JNI_FALSE;
+
+    if (H5Pget_gc_references((hid_t)fapl_id, (unsigned *)&gc_ref_val) < 0) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (gc_ref_val == 1)
+            bval =  JNI_TRUE;
+    } /* end else */
+
+    return bval;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1gc_1references */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_btree_ratios
+ * Signature: (JDDD)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1btree_1ratios(JNIEnv *env, jclass clss, jlong plist_id, jdouble left, jdouble middle, jdouble right)
+{
+    herr_t status = -1;
+
+    status = H5Pset_btree_ratios((hid_t)plist_id, (double)left,(double)middle, (double)right);
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1btree_1ratios */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_btree_ratios
+ * Signature: (J[D[D[D)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1btree_1ratios(JNIEnv *env, jclass clss, jlong plist_id, jdoubleArray left,
+        jdoubleArray middle, jdoubleArray right)
+{
+    herr_t   status = -1;
+    jdouble *leftP;
+    jdouble *middleP;
+    jdouble *rightP;
+    jboolean isCopy;
+
+    if (left == NULL) {
+        h5nullArgument(env, "H5Pget_btree_ratios:  left input array is NULL");
+    } /* end if */
+    else if (middle == NULL) {
+        h5nullArgument(env, "H5Pget_btree_ratios:  middle input array is NULL");
+    } /* end else if */
+    else if (right == NULL) {
+        h5nullArgument(env, "H5Pget_btree_ratios:  right input array is NULL");
+    } /* end else if */
+    else {
+        leftP = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR left, &isCopy);
+        if (leftP == NULL) {
+            h5JNIFatalError(env, "H5Pget_btree_ratios:  left not pinned");
+        } /* end if */
+        else {
+            middleP = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR middle, &isCopy);
+            if (middleP == NULL) {
+                ENVPTR->ReleaseDoubleArrayElements(ENVPAR left, leftP, JNI_ABORT);
+                h5JNIFatalError(env, "H5Pget_btree_ratios:  middle not pinned");
+            } /* end if */
+            else {
+                rightP = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR right, &isCopy);
+                if (rightP == NULL) {
+                    ENVPTR->ReleaseDoubleArrayElements(ENVPAR left, leftP, JNI_ABORT);
+                    ENVPTR->ReleaseDoubleArrayElements(ENVPAR middle, middleP, JNI_ABORT);
+                    h5JNIFatalError(env, "H5Pget_btree_ratios:  middle not pinned");
+                } /* end if */
+                else {
+                    status = H5Pget_btree_ratios((hid_t)plist_id, (double *)leftP,
+                            (double *)middleP, (double *)rightP);
+                    if (status < 0) {
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR left, leftP, JNI_ABORT);
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR middle, middleP, JNI_ABORT);
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR right, rightP, JNI_ABORT);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR left, leftP, 0);
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR middle, middleP, 0);
+                        ENVPTR->ReleaseDoubleArrayElements(ENVPAR right, rightP, 0);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1btree_1ratios */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_small_data_block_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size(JNIEnv *env, jclass clss, jlong plist, jlong size)
+{
+    long sz = (long)size;
+    herr_t retVal = -1;
+
+    retVal = H5Pset_small_data_block_size((hid_t)plist, (hsize_t)sz);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_small_data_block_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size(JNIEnv *env, jclass clss, jlong plist)
+{
+    hsize_t  s;
+
+    if (H5Pget_small_data_block_size((hid_t)plist, &s) < 0)
+        h5libraryError(env);
+
+    return (jlong)s;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_alloc_time
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time(JNIEnv *env, jclass clss, jlong plist, jint alloc_time)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_alloc_time((hid_t)plist, (H5D_alloc_time_t)alloc_time);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_alloc_time
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time(JNIEnv *env, jclass clss, jlong plist, jintArray alloc_time)
+{
+    herr_t           retVal = -1;
+    jint            *theArray;
+    jboolean         isCopy;
+    H5D_alloc_time_t time;
+
+    if (alloc_time == NULL) {
+        /* exception ? */
+        h5nullArgument(env, "H5Pget_alloc_time:  alloc_time is NULL");
+    } /* end if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR alloc_time, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_alloc_time:  alloc_time not pinned");
+        } /* end if */
+        else {
+            retVal =  H5Pget_alloc_time((hid_t)plist, &time);
+            if (retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR alloc_time, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = time;
+                ENVPTR->ReleaseIntArrayElements(ENVPAR alloc_time, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fill_time
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fill_1time(JNIEnv *env, jclass clss, jlong plist, jint fill_time)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_fill_time((hid_t)plist, (H5D_fill_time_t)fill_time);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1time */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fill_time
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fill_1time(JNIEnv *env, jclass clss, jlong plist, jintArray fill_time)
+{
+    herr_t          retVal = -1;
+    jint           *theArray;
+    jboolean        isCopy;
+    H5D_fill_time_t time;
+
+    if (fill_time == NULL) {
+        /* exception ? */
+        h5nullArgument(env, "H5Pget_fill_time:  fill_time is NULL");
+    } /* end if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR fill_time, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_fill_time:  fill_time not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pget_fill_time((hid_t)plist, &time);
+            if (retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR fill_time, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = (jint)time;
+                ENVPTR->ReleaseIntArrayElements(ENVPAR fill_time, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1time */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pfill_value_defined
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined(JNIEnv *env, jclass clss, jlong plist, jintArray status)
+{
+    herr_t retVal = -1;
+    jint *theArray;
+    jboolean isCopy;
+    H5D_fill_value_t value;
+
+    if (status == NULL) {
+        /* exception ? */
+        h5nullArgument(env, "H5Pfill_value_defined:  status is NULL");
+    } /* end if */
+    else {
+        theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR status, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pfill_value_defined:  status not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pfill_value_defined((hid_t)plist, &value);
+            if (retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR status, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = value;
+                ENVPTR->ReleaseIntArrayElements(ENVPAR status, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fletcher32
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fletcher32(JNIEnv *env, jclass clss, jlong plist)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_fletcher32((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fletcher32 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_edc_check
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1edc_1check(JNIEnv *env, jclass clss, jlong plist, jint check)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_edc_check((hid_t)plist, (H5Z_EDC_t)check);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1edc_1check */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_edc_check
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1edc_1check(JNIEnv *env, jclass clss, jlong plist)
+{
+    H5Z_EDC_t retVal = -1;
+
+    retVal = H5Pget_edc_check((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1edc_1check */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shuffle
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1shuffle(JNIEnv *env, jclass clss, jlong plist)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_shuffle((hid_t)plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1shuffle */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_szip
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1szip(JNIEnv *env, jclass clss, jlong plist, jint options_mask, jint pixels_per_block)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_szip((hid_t)plist, (unsigned int)options_mask, (unsigned int)pixels_per_block);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1szip */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_hyper_vector_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1hyper_1vector_1size(JNIEnv *env, jclass clss, jlong plist, jlong vector_size)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_hyper_vector_size((hid_t)plist, (size_t)vector_size);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1hyper_1vector_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_hyper_vector_size
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1hyper_1vector_1size(JNIEnv *env, jclass clss, jlong plist, jlongArray vector_size)
+{
+    herr_t   retVal = -1;
+    jlong   *theArray;
+    size_t   size;
+    jboolean isCopy;
+
+    if (vector_size == NULL) {
+        /* exception ? */
+        h5nullArgument(env, "H5Pget_hyper_vector_size:  vector_size is NULL");
+    } /* end if */
+    else {
+        theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR vector_size, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_hyper_vector_size:  vector_size not pinned");
+        } /* end if */
+        else {
+            retVal =  H5Pget_hyper_vector_size((hid_t)plist, &size);
+            if (retVal < 0) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR vector_size, theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                theArray[0] = (jlong)size;
+                ENVPTR->ReleaseLongArrayElements(ENVPAR vector_size, theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1hyper_1vector_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pall_filters_avail
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail(JNIEnv *env, jclass clss, jlong dcpl_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Pall_filters_avail((hid_t)dcpl_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pmodify_filter
+ * Signature: (JIIJ[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pmodify_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter,
+        jint flags, jlong cd_nelmts, jintArray cd_values)
+{
+    herr_t   status = -1;
+    jint    *cd_valuesP;
+    jboolean isCopy;
+
+    if (cd_values == NULL) {
+        h5nullArgument(env, "H5Pmodify_filter:  cd_values is NULL");
+    } /* end if */
+    else {
+        cd_valuesP = ENVPTR->GetIntArrayElements(ENVPAR cd_values,&isCopy);
+        if (cd_valuesP == NULL) {
+            h5JNIFatalError(env, "H5Pmodify_filter:  cd_values not pinned");
+        } /* end if */
+        else {
+            status = H5Pmodify_filter((hid_t)plist, (H5Z_filter_t)filter,(const unsigned int)flags,
+                    (size_t)cd_nelmts, (unsigned int *)cd_valuesP);
+
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesP, JNI_ABORT);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pmodify_1filter */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter_by_id
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id(JNIEnv *env, jclass clss, jlong plist, jint filter,
+        jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name)
+{
+    jboolean     isCopy;
+    herr_t       status = -1;
+    jint        *cd_valuesArray;
+    jint        *flagsArray;
+    jlong       *cd_nelmtsArray;
+    jstring      str;
+    char        *aName;
+    int          i = 0;
+    int          rank;
+    long         bs;
+
+    bs = (long)namelen;
+    if (bs <= 0) {
+        h5badArgument(env, "H5Pget_filter_by_id:  namelen <= 0");
+    } /* end if */
+    else if (flags == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  flags is NULL");
+    } /* end else if */
+    else if (cd_nelmts == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  cd_nelms is NULL");
+    } /* end else if */
+    else if (cd_values == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  cd_values is NULL");
+    } /* end else if */
+    else if (name == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  name is NULL");
+    } /* end else if */
+    else {
+        aName = (char*)HDmalloc(sizeof(char) * (size_t)bs);
+        if (aName == NULL) {
+            h5outOfMemory(env, "H5Pget_filter_by_id:  malloc failed");
+            return -1;
+        } /* end if */
+
+        flagsArray = ENVPTR->GetIntArrayElements(ENVPAR flags, &isCopy);
+        if (flagsArray == NULL) {
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  flags not pinned");
+            return -1;
+        } /* end if */
+
+        cd_nelmtsArray = ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy);
+        if (cd_nelmtsArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  cd_nelms not pinned");
+            return -1;
+        } /* end if */
+
+        cd_valuesArray = ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy);
+        rank = ENVPTR->GetArrayLength(ENVPAR cd_values);
+        if (cd_valuesArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  cd_values array not converted to unsigned int.");
+            return -1;
+        } /* end if */
+
+        { /* direct cast (size_t *)variable fails on 32-bit environment */
+            long long cd_nelmts_temp = *(cd_nelmtsArray);
+            size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
+            unsigned int filter_config;
+
+            status = H5Pget_filter_by_id2( (hid_t)plist, (H5Z_filter_t)filter,
+                    (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
+                    (size_t)namelen, (char *)aName, &filter_config);
+
+            *cd_nelmtsArray = (jlong)cd_nelmts_t;
+        } /* end direct cast special */
+
+        if (status < 0) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            HDfree(aName);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            str = ENVPTR->NewStringUTF(ENVPAR aName);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, 0);
+
+            HDfree(aName);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fclose_degree
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree(JNIEnv *env, jclass clss, jlong plist, jint fc_degree)
+{
+    herr_t  retVal = -1;
+
+    retVal = H5Pset_fclose_degree((hid_t)plist, (H5F_close_degree_t)fc_degree);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fclose_degree
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree(JNIEnv *env, jclass clss, jlong plist)
+{
+    H5F_close_degree_t degree;
+
+    if (H5Pget_fclose_degree((hid_t)plist, &degree) < 0)
+        h5libraryError(env);
+
+    return (jint)degree;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree */
+
+
+/**********************************************************************
+ *                                                                    *
+ *                    File access properties                          *
+ *                                                                    *
+ **********************************************************************/
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_family
+ * Signature: (JJJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family(JNIEnv *env, jclass clss, jlong plist, jlong memb_size, jlong memb_plist)
+{
+    long ms = (long)memb_size;
+    herr_t retVal = -1;
+
+    retVal = H5Pset_fapl_family((hid_t)plist, (hsize_t)ms, (hid_t)memb_plist);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_family
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family(JNIEnv *env, jclass clss, jlong tid, jlongArray memb_size, jlongArray memb_plist)
+{
+    herr_t   status = -1;
+    jlong   *sizeArray;
+    jlong   *plistArray;
+    jboolean isCopy;
+    hsize_t *sa;
+    size_t   i;
+    size_t   rank;
+
+    if (memb_size == NULL) {
+        h5nullArgument(env, "H5Pget_family:  memb_size is NULL");
+    } /* end if */
+    else if (memb_plist == NULL) {
+        h5nullArgument(env, "H5Pget_family:  memb_plist is NULL");
+    } /* end else if */
+    else {
+        sizeArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_size, &isCopy);
+        if (sizeArray == NULL) {
+            h5JNIFatalError(env,  "H5Pget_family:  sizeArray not pinned");
+            return -1;
+        } /* end if */
+        rank = (size_t)ENVPTR->GetArrayLength(ENVPAR  memb_size);
+        sa = (hsize_t *)HDmalloc(rank * sizeof(hsize_t));
+        if (sa == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT);
+            h5JNIFatalError(env,  "H5Screate-simple:  dims not converted to hsize_t");
+            return -1;
+        } /* end if */
+        plistArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_plist, &isCopy);
+        if (plistArray == NULL) {
+            HDfree(sa);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT);
+            h5JNIFatalError(env,  "H5Pget_family:  plistArray not pinned");
+            return -1;
+        } /* end if */
+
+        status = H5Pget_fapl_family ((hid_t)tid, sa, (hid_t *)plistArray);
+
+        if (status < 0) {
+            HDfree(sa);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_plist, plistArray, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            for (i = 0; i < rank; i++) {
+                sizeArray[i] = (jlong)sa[i];
+            } /* end for */
+            HDfree(sa);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR memb_plist, plistArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_core
+ * Signature: (JJZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core(JNIEnv *env, jclass clss, jlong fapl_id, jlong increment, jboolean backing_store)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Pset_fapl_core((hid_t)fapl_id, (size_t)increment, (hbool_t)backing_store);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_core
+ * Signature: (J[J[Z)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core(JNIEnv *env, jclass clss, jlong fapl_id, jlongArray increment, jbooleanArray backing_store)
+{
+    herr_t    status = -1;
+    jlong    *incArray;
+    jboolean *backArray;
+    jboolean  isCopy;
+
+    if (increment == NULL) {
+        h5nullArgument(env, "H5Pget_fapl_core:  increment is NULL");
+    } /* end if */
+    else if (backing_store == NULL) {
+        h5nullArgument(env, "H5Pget_fapl_core:  backing_store is NULL");
+    } /* end else if */
+    else {
+        incArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR increment, &isCopy);
+        if (incArray == NULL) {
+            h5JNIFatalError(env,  "H5Pget_fapl_core:  incArray not pinned");
+            return -1;
+        } /* end if */
+
+        backArray = (jboolean *)ENVPTR->GetBooleanArrayElements(ENVPAR backing_store, &isCopy);
+        if (backArray == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_fapl_core:  backArray not pinned");
+            return -1;
+        } /* end if */
+
+        { /* direct cast (size_t *)variable fails on 32-bit environment */
+            long long inc_temp = *(incArray);
+            size_t inc_t = (size_t)inc_temp;
+
+            status = H5Pget_fapl_core((hid_t)fapl_id, &inc_t, (hbool_t *)backArray);
+
+            *incArray = (jlong)inc_t;
+        } /* end direct cast special */
+
+        if (status < 0) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, JNI_ABORT);
+            ENVPTR->ReleaseBooleanArrayElements(ENVPAR backing_store, backArray, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, 0);
+            ENVPTR->ReleaseBooleanArrayElements(ENVPAR backing_store, backArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_family_offset
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1family_1offset(JNIEnv *env, jclass clss, jlong fapl_id, jlong offset)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Pset_family_offset ((hid_t)fapl_id, (hsize_t)offset);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1family_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_family_offset
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1family_1offset(JNIEnv *env, jclass clss, jlong fapl_id)
+{
+    hsize_t offset = 0;
+    herr_t  retVal = -1;
+
+    retVal = H5Pget_family_offset ((hid_t)fapl_id, &offset);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)offset;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1family_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_log
+ * Signature: (JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log(JNIEnv *env, jclass clss, jlong fapl_id, jstring logfile, jlong flags, jlong buf_size)
+{
+    herr_t      retVal = -1;
+    const char *pLogfile;
+
+    PIN_JAVA_STRING0(logfile, pLogfile);
+
+    retVal = H5Pset_fapl_log( (hid_t)fapl_id, pLogfile, (unsigned long long)flags, (size_t)buf_size );
+
+    UNPIN_JAVA_STRING(logfile, pLogfile);
+
+    if (retVal < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Premove_filter
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5P1remove_1filter(JNIEnv *env, jclass clss, jlong obj_id, jint filter)
+{
+    herr_t status = -1;
+
+    status = H5Premove_filter ((hid_t)obj_id, (H5Z_filter_t)filter);
+    if (status < 0)
+        h5libraryError(env);
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5P1remove_1filter */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset
+ * Signature: (JLjava/lang/String;I)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pset(JNIEnv *env, jclass clss, jlong plid, jstring name, jint val)
+{
+    hid_t       retVal = -1;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal =  H5Pset((hid_t)plid, cstr, &val);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pexist
+ * Signature: (JLjava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pexist(JNIEnv *env, jclass clss, jlong plid, jstring name)
+{
+    htri_t bval = JNI_FALSE;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    bval = H5Pexist((hid_t)plid, cstr);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Pexist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_size
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1size(JNIEnv *env, jclass clss, jlong plid, jstring name)
+{
+    hid_t       retVal = -1;
+    const char *cstr;
+    size_t      size;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal = H5Pget_size((hid_t)plid, cstr, &size);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong) size;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nprops
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1nprops(JNIEnv *env, jclass clss, jlong plid)
+{
+    size_t nprops;
+
+    if (H5Pget_nprops((hid_t)plid, &nprops) < 0)
+        h5libraryError(env);
+
+    return (jlong)nprops;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1nprops */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1class_1name(JNIEnv *env, jclass clss, jlong plid)
+{
+    char   *c_str;
+    jstring j_str;
+
+    c_str = H5Pget_class_name((hid_t)plid);
+    if (c_str == NULL) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        j_str = ENVPTR->NewStringUTF(ENVPAR c_str);
+        H5free_memory(c_str);
+
+        if (j_str == NULL)
+            h5JNIFatalError(env,"H5Pget_class_name: return string failed");
+    } /* end else */
+    return j_str;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1class_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class_parent
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1class_1parent(JNIEnv *env, jclass clss, jlong plid)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Pget_class_parent((hid_t)plid);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1class_1parent */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pisa_class
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pisa_1class(JNIEnv *env, jclass clss, jlong plid, jlong pcls)
+{
+    htri_t retVal = -1;
+
+    retVal = H5Pisa_class((hid_t)plid, (hid_t)pcls);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pisa_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget(JNIEnv *env, jclass clss, jlong plid, jstring name)
+{
+    herr_t      retVal = -1;
+    const char *cstr;
+    jint        val;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal = H5Pget((hid_t)plid, cstr, &val);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)val;
+} /* end Java_hdf_hdf5lib_H5_H5Pget */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pequal
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pequal(JNIEnv *env, jclass clss, jlong plid1, jlong plid2)
+{
+    htri_t retVal = -1;
+
+    retVal = H5Pequal((hid_t)plid1, (hid_t)plid2);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pequal */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcopy_prop
+ * Signature: (JJLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pcopy_1prop(JNIEnv *env, jclass clss, jlong dst_plid, jlong src_plid, jstring name)
+{
+    herr_t      retVal = -1;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal = H5Pcopy_prop((hid_t)dst_plid, (hid_t)src_plid, cstr);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pcopy_1prop */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Premove
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Premove(JNIEnv *env, jclass clss, jlong plid, jstring name)
+{
+    herr_t      retVal = -1;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal = H5Premove((hid_t)plid, cstr);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Premove */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Punregister
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Punregister(JNIEnv *env, jclass clss, jlong plid, jstring name)
+{
+    herr_t      retVal = -1;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    retVal = H5Punregister((hid_t)plid, cstr);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Punregister */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pclose_class
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Pclose_1class(JNIEnv *env, jclass clss, jlong plid)
+{
+    herr_t  retVal = -1;
+
+    retVal = H5Pclose_class((hid_t)plid);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter2
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1filter2(JNIEnv *env, jclass clss, jlong plist, jint filter_number,
+        jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen,
+        jobjectArray name, jintArray filter_config)
+{
+    herr_t   status = -1;
+    jint    *flagsArray;
+    jlong   *cd_nelmtsArray;
+    jint    *cd_valuesArray;
+    jint    *filter_configArray;
+    jboolean isCopy;
+    char    *filter;
+    jstring  str;
+
+    if (namelen <= 0) {
+        h5badArgument(env, "H5Pget_filter:  namelen <= 0");
+    } /* end if */
+    else if (flags == NULL) {
+        h5badArgument(env, "H5Pget_filter:  flags is NULL");
+    } /* end else if */
+    else if (cd_nelmts == NULL) {
+        h5badArgument(env, "H5Pget_filter:  cd_nelmts is NULL");
+    } /* end else if */
+    else if (filter_config == NULL) {
+        h5badArgument(env, "H5Pget_filter:  filter_config is NULL");
+    } /* end else if */
+    else {
+        filter = (char*)HDmalloc(sizeof(char)*(size_t)namelen);
+        if (filter == NULL) {
+            h5outOfMemory(env, "H5Pget_filter:  namelent malloc failed");
+            return -1;
+        } /* end if */
+        flagsArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR flags, &isCopy);
+        if (flagsArray == NULL) {
+            HDfree(filter);
+            h5JNIFatalError(env,  "H5Pget_filter:  flags array not pinned");
+            return -1;
+        } /* end if */
+
+        cd_nelmtsArray = (jlong*)ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy);
+        if (cd_nelmtsArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5JNIFatalError(env,  "H5Pget_filter:  nelmts array not pinned");
+            return -1;
+        } /* end if */
+        filter_configArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR filter_config, &isCopy);
+        if (filter_configArray == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5JNIFatalError(env,  "H5Pget_filter:  filter_config array not pinned");
+            return -1;
+        } /* end if */
+
+        if (*cd_nelmtsArray == 0 && cd_values == NULL) {
+            /* direct cast (size_t *)variable fails on 32-bit environment */
+            long long cd_nelmts_temp = 0;
+            size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
+
+            status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
+                    (unsigned int *)flagsArray, &cd_nelmts_t, NULL,
+                    (size_t)namelen, filter, (unsigned int *)filter_configArray);
+
+            *cd_nelmtsArray = (jlong)cd_nelmts_t;
+        } /* end if */
+        else {
+            if (cd_values == NULL) {
+                h5badArgument(env, "H5Pget_filter:  cd_values is NULL");
+                return -1;
+            } /* end if */
+            cd_valuesArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy);
+            if (cd_valuesArray == NULL)  {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR filter_config, filter_configArray, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+                ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+                HDfree(filter);
+                h5JNIFatalError(env,  "H5Pget_filter:  elmts array not pinned");
+                return -1;
+            } /* end if */
+
+            { /* direct cast (size_t *)variable fails on 32-bit environment */
+                long long cd_nelmts_temp = *(cd_nelmtsArray);
+                size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
+
+                status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
+                        (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
+                        (size_t)namelen, filter, (unsigned int *)filter_configArray);
+
+                *cd_nelmtsArray = (jlong)cd_nelmts_t;
+            } /* end direct cast special */
+        } /* end else */
+
+        if (status < 0) {
+            if (cd_values)
+                ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR filter_config, filter_configArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(filter);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            if (cd_values)
+                ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR filter_config, filter_configArray, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, 0);
+            /*  NewStringUTF may throw OutOfMemoryError */
+            str = ENVPTR->NewStringUTF(ENVPAR filter);
+            HDfree(filter);
+            if (str == NULL)
+                h5JNIFatalError(env,  "H5Pget_filter:  return string not pinned");
+            else
+                ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter_by_id2
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2(JNIEnv *env, jclass clss, jlong plist, jint filter,
+        jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name, jintArray filter_config)
+{
+    herr_t   status = -1;
+    int      i = 0;
+    jint    *cd_valuesArray;
+    jint    *flagsArray;
+    jint    *filter_configArray;
+    jlong   *cd_nelmtsArray;
+    jboolean isCopy;
+    long     bs;
+    char    *aName;
+    jstring  str;
+
+    bs = (long)namelen;
+    if (bs <= 0) {
+        h5badArgument(env, "H5Pget_filter_by_id:  namelen <= 0");
+    } /* end if */
+    else if (flags == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  flags is NULL");
+    } /* end else if */
+    else if (cd_nelmts == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  cd_nelms is NULL");
+    } /* end else if */
+    else if (cd_values == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  cd_values is NULL");
+    } /* end else if */
+    else if (name == NULL) {
+        h5nullArgument(env, "H5Pget_filter_by_id:  name is NULL");
+    } /* end else if */
+    else if (filter_config == NULL) {
+        h5badArgument(env, "H5Pget_filter_by_id:  filter_config is NULL");
+    } /* end else if */
+    else {
+        aName = (char*)HDmalloc(sizeof(char) * (size_t)bs);
+        if (aName == NULL) {
+            h5outOfMemory(env, "H5Pget_filter_by_id:  malloc failed");
+            return -1;
+        } /* end if */
+        flagsArray = ENVPTR->GetIntArrayElements(ENVPAR flags,&isCopy);
+        if (flagsArray == NULL) {
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  flags not pinned");
+            return -1;
+        } /* end if */
+        cd_nelmtsArray = ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy);
+        if (cd_nelmtsArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  cd_nelms not pinned");
+            return -1;
+        } /* end if */
+        cd_valuesArray = ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy);
+        if (cd_valuesArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            HDfree(aName);
+            h5JNIFatalError(env, "H5Pget_filter_by_id:  cd_values array not converted to unsigned int.");
+            return -1;
+        } /* end if */
+        filter_configArray = ENVPTR->GetIntArrayElements(ENVPAR filter_config, &isCopy);
+        if (filter_configArray == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            HDfree(aName);
+            h5JNIFatalError(env,  "H5Pget_filter_by_id:  flags not pinned");
+            return -1;
+        } /* end if */
+
+        { /* direct cast (size_t *)variable fails on 32-bit environment */
+            long long cd_nelmts_temp = *(cd_nelmtsArray);
+            size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
+
+            status = H5Pget_filter_by_id2((hid_t)plist, (H5Z_filter_t)filter,
+                (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
+                (size_t)namelen, (char *)aName, (unsigned int *)filter_configArray);
+
+            *cd_nelmtsArray = (jlong)cd_nelmts_t;
+        } /* end direct cast special handling */
+
+        if (status < 0) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR filter_config, filter_configArray, JNI_ABORT);
+            HDfree(aName);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            str = ENVPTR->NewStringUTF(ENVPAR aName);
+            HDfree(aName);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, 0);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR filter_config, filter_configArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nlinks
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1nlinks(JNIEnv *env, jclass clss, jlong lapl_id)
+{
+    size_t nlinks;
+    if (H5Pget_nlinks((hid_t)lapl_id, &nlinks) < 0)
+        h5libraryError(env);
+
+    return (jlong) nlinks;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1nlinks */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_nlinks
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1nlinks(JNIEnv *env, jclass clss, jlong lapl_id, jlong nlinks)
+{
+     herr_t retVal = -1;
+
+     if (nlinks <= 0) {
+         h5badArgument(env, "H5Pset_1nlinks:  nlinks_l <= 0");
+     } /* end if */
+     else {
+        retVal = H5Pset_nlinks((hid_t)lapl_id, (size_t)nlinks);
+        if(retVal < 0)
+            h5libraryError(env);
+     } /* end else */
+     return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1nlinks */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_libver_bounds
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds(JNIEnv *env, jclass clss, jlong fapl_id, jintArray libver)
+{
+    herr_t        retVal = -1;
+    H5F_libver_t *theArray = NULL;
+    jboolean      isCopy;
+
+    if (libver == NULL) {
+        h5nullArgument(env, "H5Pget_libver_bounds:  libversion bounds is NULL");
+    } /* end if */
+    else {
+        theArray = (H5F_libver_t*)ENVPTR->GetIntArrayElements(ENVPAR libver, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_libver_bounds:  input not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pget_libver_bounds((hid_t)fapl_id, &(theArray[0]), &(theArray[1]));
+            if(retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR libver, (jint*)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR libver, (jint*)theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_libver_bounds
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds(JNIEnv *env, jclass clss, jlong fapl_id, jint low, jint high)
+{
+    herr_t retVal = -1;
+
+    if ((H5F_libver_t)high != H5F_LIBVER_LATEST) {
+        h5badArgument(env, "H5Pset_libver_bounds:  invalid high library version bound");
+    } /* end if */
+    else if(((H5F_libver_t)low !=H5F_LIBVER_EARLIEST) && ((H5F_libver_t)low != H5F_LIBVER_LATEST)) {
+        h5badArgument(env, "H5Pset_libver_bounds:  invalid low library version bound");
+    } /* end else if */
+    else {
+        retVal = H5Pset_libver_bounds((hid_t)fapl_id, (H5F_libver_t)low, (H5F_libver_t)high);
+        if(retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_link_creation_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1link_1creation_1order(JNIEnv *env, jclass clss, jlong gcpl_id)
+{
+    unsigned crt_order_flags;
+
+    if(H5Pget_link_creation_order((hid_t)gcpl_id, &crt_order_flags) < 0)
+        h5libraryError(env);
+
+    return (jint)crt_order_flags;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1link_1creation_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_link_creation_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1link_1creation_1order(JNIEnv *env, jclass clss, jlong gcpl_id, jint crt_order_flags)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_link_creation_order((hid_t)gcpl_id, (unsigned)crt_order_flags);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1link_1creation_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_attr_creation_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1attr_1creation_1order(JNIEnv *env, jclass clss, jlong ocpl_id)
+{
+    unsigned crt_order_flags;
+
+    if(H5Pget_attr_creation_order((hid_t)ocpl_id, &crt_order_flags) < 0)
+        h5libraryError(env);
+
+    return (jint)crt_order_flags;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1attr_1creation_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_attr_creation_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1attr_1creation_1order(JNIEnv *env, jclass clss, jlong ocpl_id, jint crt_order_flags)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_attr_creation_order((hid_t)ocpl_id, (unsigned)crt_order_flags);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1attr_1creation_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_copy_object
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1copy_1object(JNIEnv *env, jclass clss, jlong ocp_plist_id, jint copy_options)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_copy_object((hid_t)ocp_plist_id, (unsigned)copy_options);
+    if(retVal < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1copy_1object */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_copy_object
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1copy_1object(JNIEnv *env, jclass clss, jlong ocp_plist_id)
+{
+    unsigned copy_options;
+
+    if(H5Pget_copy_object((hid_t)ocp_plist_id, &copy_options) < 0)
+        h5libraryError(env);
+
+    return (jint)copy_options;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1copy_1object */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_create_intermediate_group
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1create_1intermediate_1group(JNIEnv *env, jclass clss, jlong lcpl_id, jboolean crt_intermed_group)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_create_intermediate_group((hid_t)lcpl_id, (unsigned)crt_intermed_group);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1create_1intermediate_1group */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_create_intermediate_group
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1create_1intermediate_1group(JNIEnv *env, jclass clss, jlong lcpl_id)
+{
+    unsigned crt_intermed_group;
+
+    if(H5Pget_create_intermediate_group((hid_t)lcpl_id, &crt_intermed_group) < 0)
+        h5libraryError(env);
+
+    return (jboolean)crt_intermed_group;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1create_1intermediate_1group */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_data_transform
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1data_1transform(JNIEnv *env, jclass clss, jlong plist_id, jstring expression)
+{
+    herr_t      retVal = -1;
+    const char *express;
+
+    PIN_JAVA_STRING(expression, express, -1);
+
+    retVal = H5Pset_data_transform((hid_t)plist_id, express);
+
+    UNPIN_JAVA_STRING(expression, express);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1data_1transform */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_data_transform
+ * Signature: (J[Ljava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1data_1transform(JNIEnv *env, jclass clss, jlong plist_id, jobjectArray expression, jlong size)
+{
+    size_t   buf_size;
+    char    *express;
+    jlong    express_size = -1;
+    jstring  str = NULL;
+
+    if (size <= 0) {
+        h5badArgument(env, "H5Pget_data_transform:  size <= 0");
+    } /* end if */
+    else {
+        express_size = (jlong)H5Pget_data_transform((hid_t)plist_id, (char*)NULL, (size_t)size);
+        if(express_size < 0) {
+            h5libraryError(env);
+        } /* end if */
+        else {
+            buf_size = (size_t)express_size + 1;/* add extra space for the null terminator */
+            express = (char*)HDmalloc(sizeof(char) * buf_size);
+            if (express == NULL) {
+                h5outOfMemory(env, "H5Pget_data_transform:  malloc failed ");
+            } /* end if */
+            else {
+                express_size = (jlong)H5Pget_data_transform((hid_t)plist_id, express, (size_t)size);
+                if (express_size < 0) {
+                    HDfree(express);
+                    h5libraryError(env);
+                }
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR express);
+                    HDfree(express);
+                    if (str == NULL)
+                        h5JNIFatalError(env, "H5Pget_data_transform:  return string not created");
+                    else
+                        ENVPTR->SetObjectArrayElement(ENVPAR expression, 0, str);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+    return express_size;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1data_1transform */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_acc_flags
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1elink_1acc_1flags(JNIEnv *env, jclass clss, jlong lapl_id)
+{
+    unsigned flags;
+
+    if(H5Pget_elink_acc_flags((hid_t)lapl_id, &flags) < 0)
+        h5libraryError(env);
+
+    return (jint)flags;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1elink_1acc_1flags */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_acc_flags
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1elink_1acc_1flags(JNIEnv *env, jclass clss, jlong lapl_id, jint flags)
+{
+    herr_t retVal = -1;
+
+    if (((unsigned) flags != H5F_ACC_RDWR) &&
+            ((unsigned) flags != H5F_ACC_RDONLY) &&
+            ((unsigned) flags != H5F_ACC_DEFAULT)) {
+        h5badArgument(env, "H5Pset_elink_acc_flags: invalid flags value");
+    } /* end if */
+    else {
+        retVal = H5Pset_elink_acc_flags((hid_t)lapl_id, (unsigned)flags);
+        if (retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+    return (jint) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1acc_1flags */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_link_phase_change
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1link_1phase_1change(JNIEnv *env, jclass clss, jlong gcpl_id, jint max_compact, jint min_dense)
+{
+    herr_t retVal = -1;
+
+    if(max_compact < min_dense) {
+        h5badArgument(env, "H5Pset_link_phase_change: max compact value must be >= min dense value");
+    } /* end if */
+    else if(max_compact > 65535) {
+        h5badArgument(env, "H5Pset_link_phase_change: max compact value must be < 65536");
+    } /* end else if */
+    else if(min_dense > 65535) {
+        h5badArgument(env, "H5Pset_link_phase_change: min dense value must be < 65536");
+    } /* end else if */
+    else {
+        retVal = H5Pset_link_phase_change((hid_t)gcpl_id, (unsigned)max_compact, (unsigned)min_dense);
+        if(retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1link_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_link_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1link_1phase_1change  (JNIEnv *env, jclass clss, jlong gcpl_id, jintArray links)
+{
+    herr_t    retVal = -1;
+    unsigned *theArray = NULL;
+    jboolean  isCopy;
+
+    if (links == NULL) {
+        h5nullArgument( env, "H5Pget_link_phase_change:  links is NULL");
+    } /* end if */
+    else {
+        theArray = (unsigned *)ENVPTR->GetIntArrayElements(ENVPAR links, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError( env, "H5Pget_link_phase_change:  input not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pget_link_phase_change((hid_t)gcpl_id, &(theArray[0]), &(theArray[1]));
+            if(retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR links, (jint *)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR links, (jint *)theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1link_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_attr_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1attr_1phase_1change(JNIEnv *env, jclass clss, jlong ocpl_id, jintArray attributes)
+{
+    herr_t    retVal = -1;
+    unsigned *theArray = NULL;
+    jboolean  isCopy;
+
+    if (attributes == NULL) {
+        h5nullArgument(env, "H5Pget_attr_phase_change:  attributes is NULL");
+    } /* end if */
+    else {
+        theArray = (unsigned *)ENVPTR->GetIntArrayElements(ENVPAR attributes, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_attr_phase_change:  input not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pget_attr_phase_change((hid_t)ocpl_id, &(theArray[0]), &(theArray[1]));
+            if(retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR attributes, (jint *)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR attributes, (jint *)theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1attr_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_attr_phase_change
+ * Signature: (JII)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1attr_1phase_1change(JNIEnv *env, jclass clss, jlong ocpl_id, jint max_compact, jint min_dense)
+{
+    herr_t    retVal = -1;
+
+    retVal = H5Pset_attr_phase_change((hid_t)ocpl_id, (unsigned)max_compact, (unsigned)min_dense);
+    if(retVal < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1attr_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1phase_1change(JNIEnv *env, jclass clss, jlong fcpl_id, jintArray size)
+{
+    herr_t    retVal = -1;
+    unsigned *theArray = NULL;
+    jboolean  isCopy;
+
+    if (size == NULL) {
+        h5nullArgument(env, "H5Pget_shared_mesg_phase_change:  size is NULL");
+    } /* end if */
+    else {
+        theArray = (unsigned *)ENVPTR->GetIntArrayElements(ENVPAR size, &isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_shared_mesg_phase_change:  input not pinned");
+        } /* end if */
+        else {
+            retVal = H5Pget_shared_mesg_phase_change((hid_t)fcpl_id, &(theArray[0]), &(theArray[1]));
+            if(retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR size, (jint *)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR size, (jint *)theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_phase_change
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1phase_1change(JNIEnv *env, jclass clss, jlong fcpl_id, jint max_list, jint min_btree)
+{
+    herr_t retVal = -1;
+
+    /* Check that values are sensible.  The min_btree value must be no greater
+     * than the max list plus one.
+     *
+     * Range check to make certain they will fit into encoded form.
+     */
+
+    if(max_list + 1 < min_btree) {
+        h5badArgument(env, "H5Pset_shared_mesg_phase_change: minimum B-tree value is greater than maximum list value");
+    } /* end if */
+    else if(max_list > H5O_SHMESG_MAX_LIST_SIZE) {
+        h5badArgument(env, "H5Pset_shared_mesg_phase_change: max list value is larger than H5O_SHMESG_MAX_LIST_SIZE");
+    } /* end else if */
+    else if(min_btree > H5O_SHMESG_MAX_LIST_SIZE) {
+        h5badArgument(env, "H5Pset_shared_mesg_phase_change: min btree value is larger than H5O_SHMESG_MAX_LIST_SIZE");
+    } /* end else if */
+    else {
+        retVal = H5Pset_shared_mesg_phase_change((hid_t)fcpl_id, (unsigned)max_list, (unsigned)min_btree);
+        if(retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1phase_1change */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_nindexes
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1nindexes(JNIEnv *env, jclass clss, jlong fcpl_id)
+{
+    unsigned nindexes;
+
+    if(H5Pget_shared_mesg_nindexes((hid_t)fcpl_id, &nindexes) < 0)
+        h5libraryError(env);
+
+    return (jint)nindexes;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1nindexes */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_nindexes
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1nindexes(JNIEnv *env, jclass clss, jlong plist_id, jint nindexes)
+{
+    herr_t retVal = -1;
+
+    if (nindexes > H5O_SHMESG_MAX_NINDEXES) {
+        h5badArgument(env, "H5Pset_shared_mesg_nindexes: number of indexes is greater than H5O_SHMESG_MAX_NINDEXES");
+    } /* end if */
+    else {
+        retVal = H5Pset_shared_mesg_nindexes((hid_t)plist_id, (unsigned)nindexes);
+        if(retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1nindexes */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_index
+ * Signature: (JIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1index(JNIEnv *env, jclass clss, jlong fcpl_id, jint index_num,
+        jint mesg_type_flags, jint min_mesg_size)
+{
+    herr_t      retVal = -1;
+    unsigned    nindexes;/* Number of SOHM indexes */
+
+    /* Check arguments */
+    if(mesg_type_flags > H5O_SHMESG_ALL_FLAG) {
+        h5badArgument(env, "H5Pset_shared_mesg_index: unrecognized flags in mesg_type_flags");
+    } /* end if */
+    else if(H5Pget_shared_mesg_nindexes((hid_t)fcpl_id, &nindexes) < 0) { /* Read the current number of indexes */
+        h5libraryError(env);
+    } /* end else if */
+    else {
+        /* Range check */
+        if((unsigned)index_num >= nindexes) {
+            h5badArgument(env, "H5Pset_shared_mesg_index: index_num is too large; no such index");
+        } /* end if */
+        else {
+            retVal = H5Pset_shared_mesg_index((hid_t)fcpl_id, (unsigned)index_num, (unsigned) mesg_type_flags, (unsigned) min_mesg_size);
+            if(retVal < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1index */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_index
+ * Signature: (JI[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1index(JNIEnv *env, jclass clss, jlong fcpl_id, jint index_num, jintArray mesg_info)
+{
+    herr_t    retVal = -1;
+    unsigned  nindexes;/* Number of SOHM indexes */
+    unsigned *theArray = NULL;
+    jboolean  isCopy;
+
+    /* Read the current number of indexes */
+    if(H5Pget_shared_mesg_nindexes((hid_t)fcpl_id, &nindexes)<0) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        /* Range check */
+        if((unsigned)index_num >= nindexes) {
+            h5badArgument(env, "H5Pget_shared_mesg_index: index_num is too large; no such index");
+        } /* end if */
+        else if (mesg_info == NULL) {
+            h5nullArgument(env, "H5Pget_shared_mesg_index:  mesg_info is NULL");
+        } /* end else if */
+        else {
+            theArray = (unsigned *)ENVPTR->GetIntArrayElements(ENVPAR mesg_info, &isCopy);
+            if (theArray == NULL) {
+                h5JNIFatalError(env, "H5Pget_shared_mesg_index:  input not pinned");
+            } /* end if */
+            else {
+                retVal = H5Pget_shared_mesg_index((hid_t)fcpl_id, (unsigned)index_num, &(theArray[0]), &(theArray[1]));
+                if(retVal < 0) {
+                    ENVPTR->ReleaseIntArrayElements(ENVPAR mesg_info, (jint*)theArray, JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else
+                    ENVPTR->ReleaseIntArrayElements(ENVPAR mesg_info, (jint*)theArray, 0);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1index */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_local_heap_size_hint
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1local_1heap_1size_1hint(JNIEnv *env, jclass clss, jlong gcpl_id, jlong size_hint)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_local_heap_size_hint((hid_t)gcpl_id, (size_t)size_hint);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1local_1heap_1size_1hint */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_local_heap_size_hint
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1local_1heap_1size_1hint(JNIEnv *env, jclass clss, jlong gcpl_id)
+{
+    size_t size_hint;
+
+    if(H5Pget_local_heap_size_hint((hid_t)gcpl_id, &size_hint) < 0)
+        h5libraryError(env);
+
+    return (jlong)size_hint;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1local_1heap_1size_1hint */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_nbit
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1nbit(JNIEnv *env, jclass clss, jlong plist_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_nbit((hid_t)plist_id);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1nbit */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_scaleoffset
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset(JNIEnv *env, jclass clss, jlong plist_id, jint scale_type, jint scale_factor)
+{
+    herr_t retVal = -1;
+
+    /* Check arguments */
+    if(scale_factor < 0) {
+        h5badArgument(env, "H5Pset_scaleoffset: scale factor must be > 0");
+    } /* end if */
+    else {
+        if(scale_type != H5Z_SO_FLOAT_DSCALE && scale_type != H5Z_SO_FLOAT_ESCALE && scale_type != H5Z_SO_INT){
+            h5badArgument(env, "H5Pset_scaleoffset: invalid scale type");
+        } /* end if */
+        else {
+            retVal = H5Pset_scaleoffset((hid_t)plist_id, (H5Z_SO_scale_type_t)scale_type, scale_factor);
+            if(retVal < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_est_link_info
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1est_1link_1info(JNIEnv *env, jclass clss, jlong gcpl_id, jint est_num_entries, jint est_name_len)
+{
+    herr_t retVal = -1;
+
+    /* Range check values */
+    if((est_num_entries > 65535) || (est_name_len > 65535)) {
+        h5badArgument(env, "H5Pset_est_link_info: est. name length or number of entries must be < 65536");
+    } /* end if */
+    else {
+        retVal = H5Pset_est_link_info((hid_t)gcpl_id, (unsigned)est_num_entries, (unsigned)est_name_len);
+        if(retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1est_1link_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_est_link_info
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1est_1link_1info(JNIEnv *env, jclass clss, jlong gcpl_id, jintArray link_info)
+{
+    herr_t    retVal = -1;
+    unsigned *theArray = NULL;
+    jboolean  isCopy;
+
+    if (link_info == NULL) {
+        h5nullArgument(env, "H5Pget_est_link_info:  link_info is NULL");
+    } /* end if */
+    else {
+        theArray = (unsigned *)ENVPTR->GetIntArrayElements(ENVPAR link_info,&isCopy);
+        if (theArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_est_link_info:  input not pinned");
+        } /* end if */
+        else {
+            retVal= H5Pget_est_link_info((hid_t)gcpl_id, &(theArray[0]), &(theArray[1]));
+            if(retVal < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR link_info, (jint *)theArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR link_info, (jint *)theArray, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1est_1link_1info */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_fapl
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1elink_1fapl(JNIEnv *env, jclass clss, jlong lapl_id, jlong fapl_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_elink_fapl((hid_t)lapl_id, (hid_t)fapl_id);
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1fapl */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pget_elink_fapl
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Pget_1elink_1fapl(JNIEnv *env, jclass clss, jlong lapl_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Pget_elink_fapl((hid_t)lapl_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Pget_1elink_1fapl */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_prefix
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1elink_1prefix(JNIEnv *env, jclass clss, jlong lapl_id, jstring prefix)
+{
+    herr_t      retVal = -1;
+    const char *aName;
+
+    PIN_JAVA_STRING(prefix, aName, -1);
+
+    retVal = H5Pset_elink_prefix((hid_t)lapl_id, aName);
+
+    UNPIN_JAVA_STRING(prefix, aName);
+
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1prefix */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_prefix
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1elink_1prefix(JNIEnv *env, jclass clss, jlong lapl_id, jobjectArray prefix)
+{
+    size_t  size = 0;
+    char   *pre;
+    jlong   prefix_size;
+    jstring str = NULL;
+
+    if (prefix == NULL) {
+        h5nullArgument(env, "H5Pget_elink_prefix: prefix is NULL");
+    } /* end if */
+    else {
+        prefix_size = (jlong)H5Pget_elink_prefix((hid_t)lapl_id, (char*)NULL, size);
+        if(prefix_size < 0) {
+            h5libraryError(env);
+        } /* end if */
+        else {
+            size = (size_t)prefix_size + 1;/* add extra space for the null terminator */
+            pre = (char*)HDmalloc(sizeof(char)*size);
+            if (pre == NULL) {
+                h5outOfMemory(env, "H5Pget_elink_prefix:  malloc failed ");
+            } /* end if */
+            else {
+                prefix_size = (jlong)H5Pget_elink_prefix((hid_t)lapl_id, (char*)pre, size);
+
+                if (prefix_size < 0) {
+                    HDfree(pre);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR pre);
+                    HDfree(pre);
+                    if (str == NULL) {
+                        h5JNIFatalError(env, "H5Pget_elink_prefix:  return string not created");
+                    } /* end if */
+                    else
+                        ENVPTR->SetObjectArrayElement(ENVPAR prefix, 0, str);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return prefix_size;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1elink_1prefix */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_direct
+ * Signature: (JJJJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct(JNIEnv *env, jclass clss, jlong fapl_id, jlong alignment,
+        jlong block_size, jlong cbuf_size)
+{
+    herr_t retVal = -1;
+
+#ifdef H5_HAVE_DIRECT
+    retVal = H5Pset_fapl_direct((hid_t)fapl_id, (size_t)alignment, (size_t)block_size, (size_t)cbuf_size);
+#endif
+    if(retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_direct
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct(JNIEnv *env, jclass clss, jlong fapl_id, jlongArray info)
+{
+    herr_t   retVal = -1;
+
+#ifdef H5_HAVE_DIRECT
+    size_t   alignment = 0;
+    size_t   block_size = 0;
+    size_t   cbuf_size = 0;
+    jlong   *theArray;
+    jboolean isCopy;
+    if (info == NULL) {
+        h5nullArgument(env, "H5Pget_fapl_direct:  info input array is NULL");
+    } /* end if */
+    else {
+        if (ENVPTR->GetArrayLength(ENVPAR info) < 3) {
+            h5badArgument( env, "H5Pget_fapl_direct:  info input array < 4");
+        } /* end if */
+        else {
+            theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR info, &isCopy);
+            if (theArray == NULL) {
+                h5JNIFatalError(env, "H5Pget_fapl_direct:  info not pinned");
+            } /* end if */
+            else {
+                retVal = H5Pget_fapl_direct((hid_t)fapl_id, &alignment, &block_size, &cbuf_size);
+                if(retVal < 0) {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR info, theArray, JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    theArray[0] = (jlong)alignment;
+                    theArray[1] = (jlong)block_size;
+                    theArray[2] = (jlong)cbuf_size;
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR info, theArray, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+   } /* end else */
+#else
+    if (retVal < 0)
+        h5libraryError(env);
+#endif
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_sec2
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2(JNIEnv *env, jclass clss, jlong fapl_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_fapl_sec2((hid_t) fapl_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_stdio
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio(JNIEnv *env, jclass clss, jlong fapl_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Pset_fapl_stdio((hid_t) fapl_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_windows
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows(JNIEnv *env, jclass clss, jlong fapl_id)
+{
+    herr_t retVal = -1;
+
+#ifdef H5_HAVE_WINDOWS
+    retVal = H5Pset_fapl_windows((hid_t) fapl_id);
+#endif
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_muti
+ * Signature: (J[I[J[Ljava/lang/String;[J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi(JNIEnv *env, jclass clss, jlong tid, jintArray memb_map,
+        jlongArray memb_fapl, jobjectArray memb_name, jlongArray memb_addr)
+{
+    herr_t   status = -1;
+    int      i;
+    jint    *themapArray = NULL;
+    jlong   *thefaplArray = NULL;
+    jlong   *theaddrArray = NULL;
+    char   **mName = NULL;
+    jstring  str;
+    jboolean isCopy;
+    int relax = 0;
+
+    if (memb_map) {
+        themapArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR memb_map, &isCopy);
+        if (themapArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_map not pinned");
+            return 0;
+        } /* end if */
+    } /* end if */
+
+    if (memb_fapl) {
+        thefaplArray = (jlong*)ENVPTR->GetLongArrayElements(ENVPAR memb_fapl, &isCopy);
+        if (thefaplArray == NULL) {
+            if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_fapl not pinned");
+            return 0;
+        } /* end if */
+    } /* end if */
+
+    if (memb_addr) {
+        theaddrArray = (jlong*)ENVPTR->GetLongArrayElements(ENVPAR memb_addr, &isCopy);
+        if (theaddrArray == NULL) {
+            if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+            if (memb_fapl) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_addr not pinned");
+            return 0;
+        } /* end if */
+    } /* end if */
+
+    if (memb_name)
+        mName = (char**)HDcalloc(H5FD_MEM_NTYPES, sizeof (*mName));
+
+    status = H5Pget_fapl_multi((hid_t)tid, (H5FD_mem_t*)themapArray, (hid_t*)thefaplArray, mName, (haddr_t*)theaddrArray, (hbool_t*)&relax);
+
+    if (status < 0) {
+        if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+        if (memb_fapl) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, JNI_ABORT);
+        if (memb_addr) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_addr, theaddrArray, JNI_ABORT);
+        if (memb_name) h5str_array_free(mName, H5FD_MEM_NTYPES);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, 0);
+        if (memb_fapl) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, 0);
+        if (memb_addr) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_addr, theaddrArray, 0);
+
+        if (memb_name) {
+            if (mName) {
+                for (i = 0; i < H5FD_MEM_NTYPES; i++) {
+                    if (*(mName + i)) {
+                        str = ENVPTR->NewStringUTF(ENVPAR *(mName+i));
+                        ENVPTR->SetObjectArrayElement(ENVPAR memb_name, i, (jobject)str);
+                    } /* end if */
+                } /* for (i=0; i<n; i++)*/
+            } /* end if */
+            h5str_array_free(mName, H5FD_MEM_NTYPES);
+        } /* end if */
+    } /* end else */
+
+    return (relax!=0);
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_muti
+ * Signature: (J[I[J[Ljava/lang/String;[JZ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi(JNIEnv *env, jclass clss, jlong tid, jintArray memb_map,
+        jlongArray memb_fapl, jobjectArray memb_name, jlongArray memb_addr, jboolean relax)
+{
+    herr_t       status = -1;
+    jint        *themapArray = NULL;
+    jlong       *thefaplArray = NULL;
+    jlong       *theaddrArray = NULL;
+    jboolean     isCopy;
+    jclass       Sjc;
+    jstring      rstring;
+    jobject      o;
+    jboolean     bb;
+    const char **mName = NULL;
+    char        *member_name[H5FD_MEM_NTYPES];
+
+    if (memb_map) {
+        themapArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR memb_map, &isCopy);
+        if (themapArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_map not pinned");
+            return;
+        } /* end if */
+    } /* end if */
+
+    if (memb_fapl) {
+        thefaplArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_fapl, &isCopy);
+        if (thefaplArray == NULL) {
+            if (memb_map)
+                ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_fapl not pinned");
+            return;
+        } /* end if */
+    } /* end if */
+
+    if (memb_addr) {
+        theaddrArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_addr, &isCopy);
+        if (theaddrArray == NULL) {
+            if (memb_map)
+                ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+            if (memb_fapl)
+                ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_fapl_muti:  memb_addr not pinned");
+            return;
+        } /* end if */
+    } /* end if */
+
+    HDmemset(member_name, 0, H5FD_MEM_NTYPES * sizeof(char*));
+    if (memb_name) {
+        int i;
+        for (i = 0; i < H5FD_MEM_NTYPES; i++) {
+            jstring obj = (jstring) ENVPTR->GetObjectArrayElement(ENVPAR (jobjectArray) memb_name, i);
+            if (obj != 0) {
+                jsize length = ENVPTR->GetStringUTFLength(ENVPAR obj);
+                const char *utf8 = ENVPTR->GetStringUTFChars(ENVPAR obj, 0);
+
+                if (utf8) {
+                    member_name[i] = (char*)HDmalloc(strlen(utf8) + 1);
+                    if (member_name[i]) {
+                        strcpy(member_name[i], utf8);
+                    } /* end if */
+                } /* end if */
+
+                ENVPTR->ReleaseStringUTFChars(ENVPAR obj, utf8);
+                ENVPTR->DeleteLocalRef(ENVPAR obj);
+            } /* end if */
+        } /* end for */
+        mName = (const char **)member_name;
+    } /* end if */
+
+    status = H5Pset_fapl_multi((hid_t)tid, (const H5FD_mem_t *)themapArray, (const hid_t *)thefaplArray, mName, (const haddr_t *)theaddrArray, (hbool_t)relax);
+
+    if (status < 0) {
+        if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, JNI_ABORT);
+        if (memb_fapl) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, JNI_ABORT);
+        if (memb_addr) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_addr, theaddrArray, JNI_ABORT);
+        if (memb_name) {
+            int i;
+            for (i = 0; i < H5FD_MEM_NTYPES; i++)
+                HDfree(member_name[i]);
+        } /* end if */
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (memb_map) ENVPTR->ReleaseIntArrayElements(ENVPAR memb_map, themapArray, 0);
+        if (memb_fapl) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_fapl, thefaplArray, 0);
+        if (memb_addr) ENVPTR->ReleaseLongArrayElements(ENVPAR memb_addr, theaddrArray, 0);
+        if (memb_name) {
+            if (mName != NULL) {
+                int i;
+                Sjc = ENVPTR->FindClass(ENVPAR  "java/lang/String");
+                if (Sjc != NULL) {
+                    for (i = 0; i < H5FD_MEM_NTYPES; i++) {
+                        rstring = ENVPTR->NewStringUTF(ENVPAR member_name[i]);
+                        o = ENVPTR->GetObjectArrayElement(ENVPAR memb_name, i);
+                        if (o != NULL) {
+                            bb = ENVPTR->IsInstanceOf(ENVPAR o, Sjc);
+                            if (bb == JNI_TRUE) {
+                                ENVPTR->SetObjectArrayElement(ENVPAR memb_name, i, (jobject)rstring);
+                            } /* end if */
+                            ENVPTR->DeleteLocalRef(ENVPAR o);
+                        } /* end if */
+                        HDfree(member_name[i]);
+                    } /* end for */
+                } /* end if */
+            } /* end if */
+        } /* end if */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_split
+ * Signature: (JLjava/lang/String;JLjava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split(JNIEnv *env, jclass clss, jlong fapl_id, jstring metaext, jlong meta_pl_id, jstring rawext, jlong raw_pl_id)
+{
+    herr_t      retVal = -1;
+    const char *mstr;
+    const char *rstr;
+
+    PIN_JAVA_STRING_TWO0(metaext, mstr, rawext, rstr);
+
+    retVal = H5Pset_fapl_split((hid_t)fapl_id, mstr, (hid_t)meta_pl_id, rstr, (hid_t)raw_pl_id);
+
+    UNPIN_JAVA_STRING_TWO(metaext, mstr, rawext, rstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_meta_block_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size(JNIEnv *env, jclass clss, jlong plist, jlong size)
+{
+    long sz = (long)size;
+
+    if (H5Pset_meta_block_size((hid_t)plist, (hsize_t)sz) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_meta_block_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size(JNIEnv *env, jclass clss, jlong plist)
+{
+    hsize_t  s;
+
+    if (H5Pget_meta_block_size((hid_t)plist, &s) < 0)
+        h5libraryError(env);
+
+    return (jlong)s;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sieve_buf_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size(JNIEnv *env, jclass clss, jlong plist, jlong size)
+{
+    size_t sz = (size_t)size;
+
+    if (H5Pset_sieve_buf_size((hid_t)plist, (size_t)sz) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sieve_buf_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size(JNIEnv *env, jclass clss, jlong plist)
+{
+    size_t  s;
+
+    if ( H5Pget_sieve_buf_size((hid_t)plist, &s) < 0)
+        h5libraryError(env);
+
+    return (jlong)s;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_file_cache_size
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size(JNIEnv *env, jclass clss, jlong plist, jint size)
+{
+    unsigned  sz = (unsigned)size;
+
+    if (H5Pset_elink_file_cache_size((hid_t)plist, (unsigned)sz) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_file_cache_size
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size(JNIEnv *env, jclass clss, jlong plist)
+{
+    unsigned  s;
+
+    if (H5Pget_elink_file_cache_size((hid_t)plist, &s) < 0)
+        h5libraryError(env);
+
+    return (jint)s;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_mdc_config
+ * Signature: (J)Lhdf/hdf5lib/structs/H5AC_cache_config_t;
+ */
+JNIEXPORT jobject JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config(JNIEnv *env, jclass clss, jlong plist)
+{
+    H5AC_cache_config_t cacheinfo;
+    herr_t     status = -1;
+    jvalue     args[30];
+    jstring    j_str = NULL;
+    jobject    ret_obj = NULL;
+
+    HDmemset(&cacheinfo, 0, sizeof(H5AC_cache_config_t));
+    cacheinfo.version = H5AC__CURR_CACHE_CONFIG_VERSION;
+
+    status = H5Pget_mdc_config((hid_t)plist, &cacheinfo);
+
+    if (status < 0) {
+       h5libraryError(env);
+    } /* end if */
+    else {
+        args[0].i = cacheinfo.version;
+        args[1].z = cacheinfo.rpt_fcn_enabled;
+        args[2].z = cacheinfo.open_trace_file;
+        args[3].z = cacheinfo.close_trace_file;
+        if (cacheinfo.trace_file_name != NULL) {
+            j_str = ENVPTR->NewStringUTF(ENVPAR cacheinfo.trace_file_name);
+        } /* end if */
+        args[4].l = j_str;
+        args[5].z = cacheinfo.evictions_enabled;
+        args[6].z = cacheinfo.set_initial_size;
+        args[7].j = (jlong)cacheinfo.initial_size;
+        args[8].d = cacheinfo.min_clean_fraction;
+        args[9].j = (jlong)cacheinfo.max_size;
+        args[10].j = (jlong)cacheinfo.min_size;
+        args[11].j = cacheinfo.epoch_length;
+        args[12].i = cacheinfo.incr_mode;
+        args[13].d = cacheinfo.lower_hr_threshold;
+        args[14].d = cacheinfo.increment;
+        args[15].z = cacheinfo.apply_max_increment;
+        args[16].j = (jlong)cacheinfo.max_increment;
+        args[17].i = cacheinfo.flash_incr_mode;
+        args[18].d = cacheinfo.flash_multiple;
+        args[19].d = cacheinfo.flash_threshold;
+        args[20].i = cacheinfo.decr_mode;
+        args[21].d = cacheinfo.upper_hr_threshold;
+        args[22].d = cacheinfo.decrement;
+        args[23].z = cacheinfo.apply_max_decrement;
+        args[24].j = (jlong)cacheinfo.max_decrement;
+        args[25].i = cacheinfo.epochs_before_eviction;
+        args[26].z = cacheinfo.apply_empty_reserve;
+        args[27].d = cacheinfo.empty_reserve;
+        args[28].j = (jlong)cacheinfo.dirty_bytes_threshold;
+        args[29].i = cacheinfo.metadata_write_strategy;
+        CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5AC_cache_config_t", "(IZZZLjava/lang/String;ZZJDJJJIDDZJIDDIDDZJIZDJI)V", args);
+    } /* end else */
+    return ret_obj;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_mdc_config
+ * Signature: (JLhdf/hdf5lib/structs/H5AC_cache_config_t;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config(JNIEnv *env, jclass clss, jlong plist, jobject cache_config)
+{
+    herr_t      status = -1;
+    jclass      cls;
+    jfieldID    fid;
+    jstring     j_str;
+    const char *str;
+    H5AC_cache_config_t cacheinfo;
+
+    cls = ENVPTR->GetObjectClass(ENVPAR cache_config);
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "version", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  version");
+        return;
+    } /* end if */
+    cacheinfo.version = ENVPTR->GetIntField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading version failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "rpt_fcn_enabled", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  rpt_fcn_enabled");
+        return;
+    } /* end if */
+    cacheinfo.rpt_fcn_enabled = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading rpt_fcn_enabled failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "open_trace_file", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  open_trace_file");
+        return;
+    } /* end if */
+    cacheinfo.open_trace_file = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading open_trace_file failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "close_trace_file", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  close_trace_file");
+        return;
+    } /* end if */
+    cacheinfo.close_trace_file = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading close_trace_file failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "trace_file_name", "Ljava/lang/String;");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  trace_file_name");
+        return;
+    } /* end if */
+    j_str = (jstring)ENVPTR->GetObjectField(ENVPAR cache_config, fid);
+    str = ENVPTR->GetStringUTFChars(ENVPAR j_str, NULL);
+    if (str == NULL) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: out of memory trace_file_name");
+        return;
+    } /* end if */
+    strncpy(cacheinfo.trace_file_name, str, 1025);
+    ENVPTR->ReleaseStringUTFChars(ENVPAR j_str, str);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading trace_file_name failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "evictions_enabled", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  evictions_enabled");
+        return;
+    } /* end if */
+    cacheinfo.evictions_enabled = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading evictions_enabled failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "set_initial_size", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  set_initial_size");
+        return;
+    } /* end if */
+    cacheinfo.set_initial_size = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading set_initial_size failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "initial_size", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  initial_size");
+        return;
+    } /* end if */
+    cacheinfo.initial_size = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading initial_size failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "min_clean_fraction", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  min_clean_fraction");
+        return;
+    } /* end if */
+    cacheinfo.min_clean_fraction = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading min_clean_fraction failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "max_size", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  max_size");
+        return;
+    } /* end if */
+    cacheinfo.max_size = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading max_size failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "min_size", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  min_size");
+        return;
+    } /* end if */
+    cacheinfo.min_size = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading min_size failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "epoch_length", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  epoch_length");
+        return;
+    }
+    cacheinfo.epoch_length = (long int)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading epoch_length failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "incr_mode", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  incr_mode");
+        return;
+    } /* end if */
+    cacheinfo.incr_mode = ENVPTR->GetIntField(ENVPAR cache_config, fid); /*(enum H5C_cache_incr_mode) */
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading incr_mode failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "lower_hr_threshold", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  lower_hr_threshold");
+        return;
+    } /* end if */
+    cacheinfo.lower_hr_threshold = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading lower_hr_threshold failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "increment", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  increment");
+        return;
+    } /* end if */
+    cacheinfo.increment = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading increment failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "apply_max_increment", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  apply_max_increment");
+        return;
+    } /* end if */
+    cacheinfo.apply_max_increment = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading apply_max_increment failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "max_increment", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  max_increment");
+        return;
+    } /* end if */
+    cacheinfo.max_increment = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading max_increment failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "flash_incr_mode", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  flash_incr_mode");
+        return;
+    } /* end if */
+    cacheinfo.flash_incr_mode = ENVPTR->GetIntField(ENVPAR cache_config, fid); /*(enum H5C_cache_flash_incr_mode) */
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading flash_incr_mode failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "flash_multiple", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  flash_multiple");
+        return;
+    } /* end if */
+    cacheinfo.flash_multiple = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading flash_multiple failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "flash_threshold", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  flash_threshold");
+        return;
+    } /* end if */
+    cacheinfo.flash_threshold = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading flash_threshold failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "decr_mode", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  decr_mode");
+        return;
+    } /* end if */
+    cacheinfo.decr_mode = ENVPTR->GetIntField(ENVPAR cache_config, fid); /*(enum H5C_cache_decr_mode) */
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading decr_mode failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "upper_hr_threshold", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  upper_hr_threshold");
+        return;
+    } /* end if */
+    cacheinfo.upper_hr_threshold = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading upper_hr_threshold failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "decrement", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  decrement");
+        return;
+    } /* end if */
+    cacheinfo.decrement = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading decrement failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "apply_max_decrement", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  apply_max_decrement");
+        return;
+    } /* end if */
+    cacheinfo.apply_max_decrement = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading apply_max_decrement failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "max_decrement", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  max_decrement");
+        return;
+    } /* end if */
+    cacheinfo.max_decrement = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading max_decrement failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "epochs_before_eviction", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  epochs_before_eviction");
+        return;
+    } /* end if */
+    cacheinfo.epochs_before_eviction = ENVPTR->GetIntField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading epochs_before_eviction failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "apply_empty_reserve", "Z");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  apply_empty_reserve");
+        return;
+    } /* end if */
+    cacheinfo.apply_empty_reserve = ENVPTR->GetBooleanField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading apply_empty_reserve failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "empty_reserve", "D");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  empty_reserve");
+        return;
+    } /* end if */
+    cacheinfo.empty_reserve = ENVPTR->GetDoubleField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading empty_reserve failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "dirty_bytes_threshold", "J");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  dirty_bytes_threshold");
+        return;
+    } /* end if */
+    cacheinfo.dirty_bytes_threshold = (size_t)ENVPTR->GetLongField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading dirty_bytes_threshold failed");
+        return;
+    } /* end if */
+
+    fid = ENVPTR->GetFieldID(ENVPAR cls, "metadata_write_strategy", "I");
+    if(fid == 0) {
+        h5badArgument(env, "H5Pset_mdc_config:  metadata_write_strategy");
+        return;
+    } /* end if */
+    cacheinfo.metadata_write_strategy = ENVPTR->GetIntField(ENVPAR cache_config, fid);
+    if(ENVPTR->ExceptionOccurred(ENVONLY)) {
+        h5JNIFatalError(env, "H5Pset_mdc_config: loading metadata_write_strategy failed");
+        return;
+    } /* end if */
+
+    status = H5Pset_mdc_config((hid_t)plist, &cacheinfo);
+
+    if (status < 0)
+       h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_chunk_cache
+ * Signature: (JJJD)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1chunk_1cache(JNIEnv *env, jclass clss, jlong dapl, jlong rdcc_nslots,
+        jlong rdcc_nbytes, jdouble rdcc_w0)
+{
+    if (H5Pset_chunk_cache((hid_t)dapl, (size_t)rdcc_nslots, (size_t)rdcc_nbytes, (double) rdcc_w0) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk_1cache */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_chunk_cache
+ * Signature: (J[J[J[D)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache(JNIEnv *env, jclass clss, jlong dapl, jlongArray rdcc_nslots,
+        jlongArray rdcc_nbytes, jdoubleArray rdcc_w0)
+{
+    herr_t   status = -1;
+    jint     mode;
+    jdouble *w0Array;
+    jlong   *rdcc_nslotsArray;
+    jlong   *nbytesArray;
+    jboolean isCopy;
+
+    if (rdcc_w0 == NULL) {
+        w0Array = (jdouble *)NULL;
+    } /* end if */
+    else {
+        w0Array = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR rdcc_w0, &isCopy);
+        if (w0Array == NULL) {
+            h5JNIFatalError(env, "H5Pget_chunk_cache:  w0_array array not pinned");
+            return;
+        } /* end if */
+    } /* end else */
+
+    if (rdcc_nslots == NULL) {
+        rdcc_nslotsArray = (jlong *)NULL;
+    } /* end if */
+    else {
+        rdcc_nslotsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nslots, &isCopy);
+        if (rdcc_nslotsArray == NULL) {
+            /* exception -- out of memory */
+            if (w0Array != NULL) {
+                ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, JNI_ABORT);
+            } /* end if */
+            h5JNIFatalError(env, "H5Pget_chunk_cache:  rdcc_nslots array not pinned");
+            return;
+        } /* end if */
+    } /* end else */
+
+    if (rdcc_nbytes == NULL) {
+        nbytesArray = (jlong *)NULL;
+    } /* end if */
+    else {
+        nbytesArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nbytes, &isCopy);
+        if (nbytesArray == NULL) {
+            if (w0Array != NULL) {
+                ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, JNI_ABORT);
+            } /* end if */
+            if (rdcc_nslotsArray != NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nslots, rdcc_nslotsArray, JNI_ABORT);
+            } /* end if */
+            h5JNIFatalError(env, "H5Pget_chunk_cache:  nbytesArray array not pinned");
+            return;
+        } /* end if */
+    } /* end else */
+
+    { /* direct cast (size_t *)variable fails on 32-bit environment */
+        long long rdcc_nslots_temp = *(rdcc_nslotsArray);
+        size_t rdcc_nslots_t = (size_t)rdcc_nslots_temp;
+        long long nbytes_temp = *(nbytesArray);
+        size_t nbytes_t = (size_t)nbytes_temp;
+
+        status = H5Pget_chunk_cache((hid_t)dapl, &rdcc_nslots_t, &nbytes_t, (double *)w0Array);
+
+        *rdcc_nslotsArray = (jlong)rdcc_nslots_t;
+        *nbytesArray = (jlong)nbytes_t;
+    } /* end direct cast special handling */
+
+    if (status < 0) {
+        mode = JNI_ABORT;
+    } /* end if */
+    else {
+        mode = 0; /* commit and free */
+    } /* end else */
+
+    if (rdcc_nslotsArray != NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nslots, rdcc_nslotsArray, mode);
+    }
+    /* end if */
+    if (nbytesArray != NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR rdcc_nbytes, nbytesArray, mode);
+    } /* end if */
+
+    if (w0Array != NULL) {
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR rdcc_w0, w0Array, mode);
+    } /* end if */
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_obj_track_times
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1obj_1track_1times(JNIEnv *env, jclass clss, jlong objplid)
+{
+    hbool_t  track_times;
+
+    if (H5Pget_obj_track_times((hid_t)objplid, &track_times) < 0) {
+        h5libraryError(env);
+        return JNI_FALSE;
+    } /* end if */
+    if (track_times == 1) {
+        return JNI_TRUE;
+    } /* end if */
+    return JNI_FALSE;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1obj_1track_1times */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_obj_track_times
+ * Signature: (JZ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1obj_1track_1times(JNIEnv *env, jclass clss, jlong objplid, jboolean track_times)
+{
+    hbool_t  track;
+
+    if (track_times == JNI_TRUE) {
+        track = 1;
+    } /* end if */
+    else {
+        track = 0;
+    } /* end else */
+
+    if (H5Pset_obj_track_times((hid_t)objplid, track) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1obj_1track_1times */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_char_encoding
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1char_1encoding(JNIEnv *env, jclass clss, jlong acpl)
+{
+    H5T_cset_t  encoding;
+
+    if (H5Pget_char_encoding((hid_t)acpl, &encoding) < 0)
+        h5libraryError(env);
+
+    return encoding;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1char_1encoding */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_char_encoding
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1char_1encoding(JNIEnv *env, jclass clss, jlong acpl, jint encoding)
+{
+    if (H5Pset_char_encoding((hid_t)acpl, (H5T_cset_t)encoding) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1char_1encoding */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual
+ * Signature: (JJLjava/lang/String;Ljava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1virtual(JNIEnv *env, jclass clss, jlong dcpl_id, jlong vspace_id,
+        jstring src_file_name, jstring src_dset_name, jlong src_space_id)
+{
+    herr_t      retVal = -1;
+    const char *fstr;
+    const char *dstr;
+
+    PIN_JAVA_STRING_TWO0(src_file_name, fstr, src_dset_name, dstr);
+
+    retVal = H5Pset_virtual((hid_t)dcpl_id, (hid_t)vspace_id, fstr, dstr, (hid_t)src_space_id);
+
+    UNPIN_JAVA_STRING_TWO(src_file_name, fstr, src_dset_name, dstr);
+
+    if (retVal < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_count
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count(JNIEnv *env, jclass clss, jlong dcpl_id)
+{
+    size_t  s;
+
+    if (H5Pget_virtual_count((hid_t)dcpl_id, &s) < 0)
+        h5libraryError(env);
+
+    return (jlong)s;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_vspace
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace(JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
+{
+    hid_t space_id = -1;
+
+    space_id = H5Pget_virtual_vspace((hid_t)dcpl_id, (size_t)index);
+    if (space_id < 0)
+        h5libraryError(env);
+
+    return (jlong)space_id;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_srcspace
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace(JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
+{
+    hid_t space_id = -1;
+
+    space_id = H5Pget_virtual_srcspace((hid_t)dcpl_id, (size_t)index);
+    if (space_id < 0)
+        h5libraryError(env);
+
+    return (jlong)space_id;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_filename
+ * Signature: (JJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename(JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
+{
+    char    *fname;
+    ssize_t  buf_size;
+    ssize_t  status;
+    jstring  str = NULL;
+
+    /* get the length of the filename */
+    buf_size = H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)index, NULL, 0);
+    if (buf_size < 0) {
+        h5badArgument( env, "H5Pget_virtual_filename:  buf_size < 0");
+    } /* end if */
+    else if (buf_size >= 0) {
+        buf_size++; /* add extra space for the null terminator */
+        fname = (char *)HDmalloc(sizeof(char) * (size_t)buf_size);
+        if (fname == NULL) {
+            h5outOfMemory( env, "H5Pget_virtual_filename:  malloc failed");
+        } /* end if */
+        else {
+            status = H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)index, fname, (size_t)buf_size);
+
+            if (status >= 0) {
+                str = ENVPTR->NewStringUTF(ENVPAR fname);
+                HDfree(fname);
+                if (str == NULL)
+                    h5JNIFatalError( env, "H5Pget_virtual_filename:  return string not allocated");
+            } /* end if */
+            else {
+                HDfree(fname);
+                h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else if */
+
+    return (jstring)str;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_dsetname
+ * Signature: (JJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname(JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
+{
+    char    *dname;
+    ssize_t  buf_size;
+    ssize_t  status;
+    jstring  str = NULL;
+
+    /* get the length of the filename */
+    buf_size = H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)index, NULL, 0);
+    if (buf_size < 0) {
+        h5badArgument( env, "H5Pget_virtual_dsetname:  buf_size < 0");
+    } /* end if */
+    else if (buf_size > 0) {
+        buf_size++; /* add extra space for the null terminator */
+        dname = (char *)HDmalloc(sizeof(char) * (size_t)buf_size);
+        if (dname == NULL) {
+            h5outOfMemory( env, "H5Pget_virtual_dsetname:  malloc failed");
+        } /* end if */
+        else {
+            status = H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)index, dname, (size_t)buf_size);
+
+            if (status >= 0) {
+                str = ENVPTR->NewStringUTF(ENVPAR dname);
+                HDfree(dname);
+                if (str == NULL)
+                    h5JNIFatalError( env, "H5Pget_virtual_dsetname:  return string not allocated");
+            } /* end if */
+            else {
+                HDfree(dname);
+                h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else if */
+    return (jstring)str;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_view
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1view(JNIEnv *env, jclass clss, jlong dapl_id)
+{
+    H5D_vds_view_t virtual_view;
+
+    if (H5Pget_virtual_view((hid_t)dapl_id, &virtual_view) < 0)
+        h5libraryError(env);
+
+    return (jint)virtual_view;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1view */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual_view
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1virtual_1view(JNIEnv *env, jclass clss, jlong dapl_id, jint view)
+{
+    if (H5Pset_virtual_view((hid_t)dapl_id, (H5D_vds_view_t)view) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual_1view */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_printf_gap
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1virtual_1printf_1gap(JNIEnv *env, jclass clss, jlong dapl_id)
+{
+    hsize_t gap_size;
+
+    if (H5Pget_virtual_printf_gap((hid_t)dapl_id, &gap_size) < 0)
+        h5libraryError(env);
+
+    return (jlong)gap_size;
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1printf_1gap */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual_printf_gap
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1virtual_1printf_1gap(JNIEnv *env, jclass clss, jlong dapl_id, jlong gap_size)
+{
+    if (H5Pset_virtual_printf_gap((hid_t)dapl_id, (hsize_t)gap_size) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual_1printf_1gap */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_file_space
+ * Signature: (J[I[J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1file_1space(JNIEnv *env, jclass clss, jlong fcpl_id, jintArray strategy, jlongArray threshold)
+{
+    herr_t   status = -1;
+    jint    *thestrategyArray = NULL;
+    jlong   *thethresholdArray = NULL;
+    jboolean isCopy;
+
+    if (strategy) {
+        thestrategyArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR strategy, &isCopy);
+        if (thestrategyArray == NULL) {
+            h5JNIFatalError(env, "H5Pget_file_space:  strategy not pinned");
+            return;
+        }
+    }
+
+    if (threshold) {
+        thethresholdArray = (jlong*)ENVPTR->GetLongArrayElements(ENVPAR threshold, &isCopy);
+        if (thethresholdArray == NULL) {
+            if (strategy) ENVPTR->ReleaseIntArrayElements(ENVPAR strategy, thestrategyArray, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pget_file_space:  threshold not pinned");
+            return;
+        } /* end if */
+    } /* end if */
+
+    status = H5Pget_file_space((hid_t)fcpl_id, (H5F_file_space_type_t*)thestrategyArray, (hsize_t*)thethresholdArray);
+
+    if (status < 0) {
+        if (strategy) ENVPTR->ReleaseIntArrayElements(ENVPAR strategy, thestrategyArray, JNI_ABORT);
+        if (threshold) ENVPTR->ReleaseLongArrayElements(ENVPAR threshold, thethresholdArray, JNI_ABORT);
+        h5libraryError(env);
+    } /* end if */
+    else {
+        if (strategy) ENVPTR->ReleaseIntArrayElements(ENVPAR strategy, thestrategyArray, 0);
+        if (threshold) ENVPTR->ReleaseLongArrayElements(ENVPAR threshold, thethresholdArray, 0);
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pget_1file_1space */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_file_space
+ * Signature: (JIJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1file_1space(JNIEnv *env, jclass clss, jlong fcpl_id, jint strategy, jlong threshold)
+{
+    if (H5Pset_file_space((hid_t)fcpl_id, (H5F_file_space_type_t)strategy, (hsize_t)threshold) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1file_1space */
+
+
+static herr_t
+H5P_cls_create_cb(hid_t prop_id, void *create_data)
+{
+    JNIEnv    *cbenv;
+    jint       status = -1;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR create_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLhdf/hdf5lib/callbacks/H5P_cls_create_func_t;)I");
+            if (mid != 0) {
+                /* fprintf(stderr, "JNI H5P_cls_create_func_cb execute\n"); fflush(stderr); */
+                status = CBENVPTR->CallIntMethod(CBENVPAR create_callback, mid, prop_id, create_data);
+                /* fprintf(stderr, "\nJNI H5P_cls_create_func_cb status: %d\n", status); fflush(stderr); */
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_cls_create_cb */
+
+static herr_t
+H5P_cls_copy_cb(hid_t new_prop_id, hid_t old_prop_id, void *copy_data)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR copy_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JJLhdf/hdf5lib/callbacks/H5P_cls_copy_func_t;)I");
+            if (mid != 0) {
+                status = CBENVPTR->CallIntMethod(CBENVPAR copy_callback, mid, new_prop_id, old_prop_id, copy_data);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_cls_ccopy_cb */
+
+static herr_t
+H5P_cls_close_cb(hid_t prop_id, void *close_data)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR close_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLhdf/hdf5lib/callbacks/H5P_cls_close_func_t;)I");
+            if (mid != 0) {
+                status = CBENVPTR->CallIntMethod(CBENVPAR close_callback, mid, prop_id, close_data);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_cls_close_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_mdc_log_options
+ * Signature: (JZLjava/lang/String;Z)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options(JNIEnv *env, jclass clss, jlong fapl_id, jboolean is_enabled, jstring location, jboolean start_on_access)
+{
+    herr_t      retVal = -1;
+    const char *lstr;
+
+    PIN_JAVA_STRING0(location, lstr);
+
+    retVal = H5Pset_mdc_log_options((hid_t)fapl_id, (hbool_t)is_enabled, lstr, (hbool_t)start_on_access);
+
+    UNPIN_JAVA_STRING(location, lstr);
+
+    if (retVal < 0) {
+        h5libraryError(env);
+    }
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_mdc_log_options
+ * Signature: (J[Z)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Pget_1mdc_1log_1options(JNIEnv *env, jclass clss, jlong fapl_id, jbooleanArray mdc_log_options)
+{
+    hbool_t    is_enabled;
+    hbool_t    start_on_access;
+    jboolean  *mdc_log_options_ptr;
+    char      *lname;
+    size_t     location_size;
+    ssize_t    status;
+    jstring    str = NULL;
+    jint       size;
+    jboolean   isCopy;
+
+    if (mdc_log_options == NULL) {
+        h5nullArgument(env, "H5Fget_mdc_log_options:  mdc_log_options is NULL");
+    } /* end if */
+    else {
+        size = (int)ENVPTR->GetArrayLength(ENVPAR mdc_log_options);
+        if (size < 2) {
+            h5badArgument(env, "H5Fget_mdc_log_options:  length of mdc_log_options < 2.");
+        } /* end if */
+        else {
+            /* get the length of the filename */
+            H5Pget_mdc_log_options((hid_t)fapl_id, &is_enabled, NULL, &location_size, &start_on_access);
+            if (location_size < 0) {
+                h5badArgument(env, "H5Pget_mdc_log_options:  location_size < 0");
+            }/* end if */
+            else if (location_size > 0) {
+                location_size++; /* add extra space for the null terminator */
+                lname = (char *)HDmalloc(sizeof(char) * location_size);
+                if (lname == NULL) {
+                    h5outOfMemory(env, "H5Pget_mdc_log_options:  malloc failed");
+                } /* end if */
+                else {
+                    status = H5Pget_mdc_log_options((hid_t)fapl_id, &is_enabled, lname, &location_size, &start_on_access);
+
+                    if (status < 0) {
+                        HDfree(lname);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        str = ENVPTR->NewStringUTF(ENVPAR lname);
+                        HDfree(lname);
+                        if (str == NULL) {
+                            h5JNIFatalError(env, "H5Pget_mdc_log_options:  return string not allocated");
+                        } /* end if */
+                        else {
+                            mdc_log_options_ptr = ENVPTR->GetBooleanArrayElements(ENVPAR mdc_log_options, &isCopy);
+                            mdc_log_options_ptr[0] = (jboolean)is_enabled;
+                            mdc_log_options_ptr[1] = (jboolean)start_on_access;
+                            ENVPTR->ReleaseBooleanArrayElements(ENVPAR mdc_log_options, mdc_log_options_ptr, 0);
+                        } /* end else */
+                    } /* end else */
+                } /* end else */
+            } /* end else if*/
+        } /* end else */
+    } /* end else */
+
+    return (jstring)str;
+} /* end if */
+
+static herr_t
+H5D_append_cb(hid_t dataset_id, hsize_t *cur_dims, void *op_data)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jlongArray cur_dimsArray;
+    jsize      size;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) != 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+    if (cls == 0) {
+       JVMPTR->DetachCurrentThread(JVMPAR);
+       return -1;
+    } /* end if */
+    mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(J[JLhdf/hdf5lib/callbacks/H5D_append_t;)I");
+    if (mid == 0) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+
+    if (cur_dims == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+
+    cur_dimsArray = CBENVPTR->NewLongArray(CBENVPAR 2);
+    if (cur_dimsArray == NULL) {
+        JVMPTR->DetachCurrentThread(JVMPAR);
+        return -1;
+    } /* end if */
+    CBENVPTR->SetLongArrayRegion(CBENVPAR cur_dimsArray, 0, 2, (const jlong *)cur_dims);
+
+    status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, dataset_id, cur_dims, op_data);
+
+    JVMPTR->DetachCurrentThread(JVMPAR);
+
+    return status;
+} /* end H5D_append_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_append_flush
+ * Signature: (JI[JLjava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pset_1append_1flush(JNIEnv *env, jclass clss, jlong plist_id, jint ndims, jlongArray boundary,
+        jobject callback_op, jobject op_data)
+{
+    herr_t   status = -1;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if (op_data == NULL) {
+        h5nullArgument(env, "H5Ovisit:  op_data is NULL");
+    } /* end if */
+    else if (callback_op == NULL) {
+        h5nullArgument(env, "H5Ovisit:  callback_op is NULL");
+    } /* end if */
+    else {
+        status = H5Pset_append_flush((hid_t)plist_id, (unsigned)ndims, (const hsize_t*)boundary, (H5D_append_cb_t)H5D_append_cb, (void*)op_data);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pset_1append_1flush */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pcreate_class_nocb
+ * Signature: (JLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Pcreate_1class_1nocb(JNIEnv *env, jclass clss, jlong parent_class, jstring name)
+{
+    hid_t class_id = -1;
+    const char *cstr;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    class_id = H5Pcreate_class((hid_t)parent_class, cstr,  NULL, NULL, NULL, NULL, NULL, NULL);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (class_id < 0)
+        h5libraryError(env);
+
+    return (jlong)class_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Pcreate_1class_1nocb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pcreate_class
+ * Signature: (JLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Pcreate_1class(JNIEnv *env, jclass clss, jlong parent_class, jstring name, jobject create_op,
+        jobject create_data, jobject copy_op, jobject copy_data, jobject close_op, jobject close_data)
+{
+    hid_t class_id = -1;
+    const char *cstr;
+    copy_callback = copy_op;
+    close_callback = close_op;
+    create_callback = create_op;
+
+    PIN_JAVA_STRING(name, cstr, -1);
+
+    class_id = H5Pcreate_class((hid_t)parent_class, cstr, (H5P_cls_create_func_t)H5P_cls_create_cb, (void*) create_data,
+            (H5P_cls_copy_func_t)H5P_cls_copy_cb, (void*) copy_data, (H5P_cls_close_func_t)H5P_cls_close_cb, (void*) close_data);
+
+    UNPIN_JAVA_STRING(name, cstr);
+
+    if (class_id < 0)
+        h5libraryError(env);
+
+    return (jlong)class_id;
+} /* end Java_hdf_hdf5lib_H5__1H5Pcreate_1class */
+
+static herr_t
+H5P_prp_create_cb(const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR create_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(Ljava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR create_callback, mid, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_create_cb */
+
+static herr_t
+H5P_prp_copy_cb(const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR copy_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(Ljava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR copy_callback, mid, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_copy_cb */
+
+static herr_t
+H5P_prp_close_cb(const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR close_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(Ljava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR close_callback, mid, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_close_cb */
+
+static int
+H5P_prp_compare_cb(void *value1, void *value2, size_t size)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR compare_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "([B[BJ)I");
+            if (mid != 0) {
+                status = CBENVPTR->CallIntMethod(CBENVPAR compare_callback, mid, value1, value2, size);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_compare_cb */
+
+static herr_t
+H5P_prp_get_cb(hid_t prop_id, const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR get_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR get_callback, mid, prop_id, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_get_cb */
+
+static herr_t
+H5P_prp_set_cb(hid_t prop_id, const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR set_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR set_callback, mid, prop_id, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_set_cb */
+
+static herr_t
+H5P_prp_delete_cb(hid_t prop_id, const char *name, size_t size, void *value)
+{
+    JNIEnv    *cbenv;
+    jint       status;
+    jclass     cls;
+    jmethodID  mid;
+    jmethodID  constructor;
+    jstring    str;
+
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) == 0) {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR delete_callback);
+        if (cls != 0) {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;J[B)I");
+            if (mid != 0) {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+                status = CBENVPTR->CallIntMethod(CBENVPAR delete_callback, mid, prop_id, str, size, value);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    return status;
+} /* end H5P_prp_delete_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pregister2_nocb
+ * Signature: (JLjava/lang/String;J[B)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pregister2_1nocb(JNIEnv *env, jclass clss, jlong cls_id, jstring name, jlong prp_size, jbyteArray def_value)
+{
+    herr_t   status = -1;
+    jbyte   *buffP;
+    jboolean isCopy2;
+    const char *cstr;
+
+    PIN_JAVA_STRING0(name, cstr);
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2);
+    if (buffP == NULL) {
+        UNPIN_JAVA_STRING(name, cstr);
+        h5JNIFatalError(env, "H5Pregister2:  buf not pinned");
+    } /* end if */
+    else {
+        status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+        UNPIN_JAVA_STRING(name, cstr);
+        if (status < 0) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pregister2_1nocb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pregister2
+ * Signature: (JLjava/lang/String;J[BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pregister2(JNIEnv *env, jclass clss, jlong cls_id, jstring name, jlong prp_size,
+        jbyteArray def_value, jobject prp_create, jobject prp_set, jobject prp_get, jobject prp_delete,
+        jobject prp_copy, jobject prp_cmp, jobject prp_close)
+{
+    herr_t   status = -1;
+    jbyte   *buffP;
+    jboolean isCopy2;
+    const char *cstr;
+    copy_callback = prp_copy;
+    close_callback = prp_close;
+    create_callback = prp_create;
+    compare_callback = prp_cmp;
+    set_callback = prp_set;
+    get_callback = prp_get;
+    delete_callback = prp_delete;
+
+    PIN_JAVA_STRING0(name, cstr);
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2);
+    if (buffP == NULL) {
+        UNPIN_JAVA_STRING(name, cstr);
+        h5JNIFatalError(env, "H5Pregister2:  buf not pinned");
+    } /* end if */
+    else {
+        status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, (H5P_prp_create_func_t)H5P_prp_create_cb,
+            (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb,
+            (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb);
+
+        UNPIN_JAVA_STRING(name, cstr);
+        if (status < 0) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pregister2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pinsert2_nocb
+ * Signature: (JLjava/lang/String;J[B)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pinsert2_1nocb(JNIEnv *env, jclass clss, jlong cls_id, jstring name, jlong prp_size, jbyteArray def_value)
+{
+    herr_t   status = -1;
+    jbyte   *buffP;
+    jboolean isCopy2;
+    const char *cstr;
+
+    PIN_JAVA_STRING0(name, cstr);
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2);
+    if (buffP == NULL) {
+        UNPIN_JAVA_STRING(name, cstr);
+        h5JNIFatalError(env, "H5Pinsert2:  buf not pinned");
+    } /* end if */
+    else {
+        status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL);
+
+        UNPIN_JAVA_STRING(name, cstr);
+        if (status < 0) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pinsert2 */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pinsert2
+ * Signature: (JLjava/lang/String;J[BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Pinsert2(JNIEnv *env, jclass clss, jlong cls_id, jstring name, jlong prp_size,
+        jbyteArray def_value, jobject prp_set, jobject prp_get, jobject prp_delete,
+        jobject prp_copy, jobject prp_cmp, jobject prp_close)
+{
+    herr_t   status = -1;
+    jbyte   *buffP;
+    jboolean isCopy2;
+    const char *cstr;
+    copy_callback = prp_copy;
+    close_callback = prp_close;
+    compare_callback = prp_cmp;
+    set_callback = prp_set;
+    get_callback = prp_get;
+    delete_callback = prp_delete;
+
+    PIN_JAVA_STRING0(name, cstr);
+    buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2);
+    if (buffP == NULL) {
+        UNPIN_JAVA_STRING(name, cstr);
+        h5JNIFatalError(env, "H5Pinsert2:  buf not pinned");
+    } /* end if */
+    else {
+        status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP,
+            (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb,
+            (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb);
+
+        UNPIN_JAVA_STRING(name, cstr);
+        if (status < 0) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Pinsert2 */
+
+static herr_t
+H5P_iterate_cb(hid_t prop_id, const char *name, void *op_data)
+{
+    JNIEnv    *cbenv;
+    jint       status = -1;
+    jclass     cls;
+    jmethodID  mid;
+    jstring    str;
+    jmethodID  constructor;
+
+    /* fprintf(stderr, "\nJNI H5P_iterate_cb entered\n"); fflush(stderr); */
+    if(JVMPTR->AttachCurrentThread(JVMPAR2 (void**)&cbenv, NULL) != 0) {
+        /* fprintf(stderr, "\nJNI H5P_iterate_cb error: AttachCurrentThread failed\n"); fflush(stderr); */
+        JVMPTR->DetachCurrentThread(JVMPAR);
+    } /* end if */
+    else {
+        cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback);
+        if (cls == 0) {
+            /* fprintf(stderr, "\nJNI H5P_iterate_cb error: GetObjectClass failed\n"); fflush(stderr); */
+            JVMPTR->DetachCurrentThread(JVMPAR);
+        } /* end if */
+        else {
+            mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/callbacks/H5P_iterate_t;)I");
+            if (mid == 0) {
+                /* fprintf(stderr, "\nJNI H5P_iterate_cb error: GetMethodID failed\n"); fflush(stderr); */
+                JVMPTR->DetachCurrentThread(JVMPAR);
+            } /* end if */
+            else {
+                str = CBENVPTR->NewStringUTF(CBENVPAR name);
+
+                /* fprintf(stderr, "JNI H5P_iterate_cb execute\n"); fflush(stderr); */
+                status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, prop_id, str, op_data);
+                /* fprintf(stderr, "\nJNI H5P_iterate_cb status: %d\n", status); fflush(stderr); */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    JVMPTR->DetachCurrentThread(JVMPAR);
+    /* fprintf(stderr, "\nJNI H5P_iterate_cb leave\n"); fflush(stderr); */
+
+    return status;
+} /* end H5P_iterate_cb */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Piterate
+ * Signature: (J[ILjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Piterate(JNIEnv *env, jclass clss, jlong prop_id, jintArray idx,
+        jobject callback_op, jobject op_data)
+{
+    herr_t   status = -1;
+    jint    *theArray = NULL;
+    jboolean isCopy;
+
+    ENVPTR->GetJavaVM(ENVPAR &jvm);
+    visit_callback = callback_op;
+
+    if (op_data == NULL) {
+        h5nullArgument(env, "H5Piterate:  op_data is NULL");
+    } /* end if */
+    else if (callback_op == NULL) {
+        h5nullArgument(env, "H5Piterate:  callback_op is NULL");
+    } /* end else if */
+    else {
+        if (idx == NULL) {
+            status = H5Piterate((hid_t)prop_id, NULL, (H5P_iterate_t)H5P_iterate_cb, (void*)op_data);
+        } /* end if */
+        else {
+            theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR idx, &isCopy);
+            if (theArray == NULL) {
+                h5JNIFatalError(env, "H5Piterate:  idx not pinned");
+                return -1;
+            } /* end if */
+            status = H5Piterate((hid_t)prop_id, (int*)&theArray[0], (H5P_iterate_t)H5P_iterate_cb, (void*)op_data);
+        } /* end else */
+
+        if (status < 0) {
+            if(idx)
+                ENVPTR->ReleaseIntArrayElements(ENVPAR idx, theArray, JNI_ABORT);
+            h5libraryError(env);
+        } /* end if */
+        else if (idx)
+            ENVPTR->ReleaseIntArrayElements(ENVPAR idx, theArray, 0);
+    } /* end else */
+
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5Piterate */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5pImp.h b/java/src/jni/h5pImp.h
new file mode 100644
index 0000000..a06a64f
--- /dev/null
+++ b/java/src/jni/h5pImp.h
@@ -0,0 +1,1337 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5_H5P */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5P
+#define _Included_hdf_hdf5lib_H5_H5P
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcreate
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Pcreate
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Pclose
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1class
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Pcopy
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_version
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1version
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_userblock
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1userblock
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_userblock
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1userblock
+(JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sizes
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1sizes
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sizes
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1sizes
+(JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sym_k
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1sym_1k
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sym_k
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1sym_1k
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_istore_k
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1istore_1k
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_istore_k
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1istore_1k
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_layout
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1layout
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_layout
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1layout
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_chunk
+ * Signature: (JI[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1chunk
+(JNIEnv *, jclass, jlong, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_chunk
+ * Signature: (JI[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1chunk
+(JNIEnv *, jclass, jlong, jint, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_alignment
+ * Signature: (JJJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1alignment
+(JNIEnv *, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_alignment
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1alignment
+(JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_external
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1external
+(JNIEnv *, jclass, jlong, jstring, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_external_count
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1external_1count
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_external
+ * Signature: (JIJ[Ljava/lang/String;[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1external
+(JNIEnv *, jclass, jlong, jint, jlong, jobjectArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fill_value
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fill_1value
+(JNIEnv *, jclass, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fill_value
+ * Signature: (JJ[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fill_1value
+(JNIEnv *, jclass, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_filter
+ * Signature: (JIIJ[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1filter
+(JNIEnv *, jclass, jlong, jint, jint, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nfilters
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1nfilters
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1filter
+(JNIEnv *, jclass, jlong, jint, jintArray, jlongArray, jintArray, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_driver
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1driver
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_cache
+ * Signature: (JIJJD)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1cache
+(JNIEnv *, jclass, jlong, jint, jlong, jlong, jdouble);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_cache
+ * Signature: (J[I[J[J[D)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1cache
+(JNIEnv *, jclass, jlong, jintArray, jlongArray, jlongArray, jdoubleArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_buffer
+ * Signature: (JJ[B[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1buffer
+(JNIEnv *, jclass, jlong, jlong, jbyteArray, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_buffer
+ * Signature: (J[B[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1buffer
+(JNIEnv *, jclass, jlong, jbyteArray, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_buffer_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1buffer_1size
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_buffer_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1buffer_1size
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_preserve
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1preserve
+(JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_preserve
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1preserve
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_deflate
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1deflate
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_gc_references
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1gc_1references
+(JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_gc_references
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pget_1gc_1references
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_btree_ratios
+ * Signature: (JDDD)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1btree_1ratios
+(JNIEnv *, jclass, jlong, jdouble, jdouble, jdouble);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_btree_ratios
+ * Signature: (J[D[D[D)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1btree_1ratios
+(JNIEnv *, jclass, jlong, jdoubleArray, jdoubleArray, jdoubleArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_small_data_block_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_small_data_block_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_alloc_time
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_alloc_time
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fill_time
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fill_1time
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fill_time
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fill_1time
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pfill_value_defined
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fletcher32
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fletcher32
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_edc_check
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1edc_1check
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_edc_check
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1edc_1check
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shuffle
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1shuffle
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_szip
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1szip
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_hyper_vector_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1hyper_1vector_1size
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_hyper_vector_size
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1hyper_1vector_1size
+(JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pall_filters_avail
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pmodify_filter
+ * Signature: (JIIJ[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pmodify_1filter
+(JNIEnv *, jclass, jlong, jint, jint, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter_by_id
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id
+(JNIEnv *, jclass, jlong, jint, jintArray, jlongArray, jintArray, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fclose_degree
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fclose_degree
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_family
+ * Signature: (JJJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family
+(JNIEnv *, jclass, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_family
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family
+(JNIEnv *, jclass, jlong, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_core
+ * Signature: (JJZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core
+(JNIEnv *, jclass, jlong, jlong, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_core
+ * Signature: (J[J[Z)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core
+(JNIEnv *, jclass, jlong, jlongArray, jbooleanArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_family_offset
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1family_1offset
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_family_offset
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1family_1offset
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_log
+ * Signature: (JLjava/lang/String;JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log
+(JNIEnv *, jclass, jlong, jstring, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Premove_filter
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5P1remove_1filter
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset
+ * Signature: (JLjava/lang/String;I)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pset
+(JNIEnv *, jclass, jlong, jstring, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pexist
+ * Signature: (JLjava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pexist
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_size
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1size
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nprops
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1nprops
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class_name
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Pget_1class_1name
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_class_parent
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1class_1parent
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pisa_class
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pisa_1class
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pequal
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pequal
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pcopy_prop
+ * Signature: (JJLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pcopy_1prop
+(JNIEnv *, jclass, jlong, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Premove
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Premove
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Punregister
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Punregister
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pclose_class
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Pclose_1class
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter2
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1filter2
+(JNIEnv *, jclass, jlong, jint, jintArray, jlongArray, jintArray, jlong, jobjectArray, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_filter_by_id2
+ * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2
+(JNIEnv *, jclass, jlong, jint, jintArray, jlongArray, jintArray, jlong, jobjectArray, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_nlinks
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1nlinks
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_nlinks
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1nlinks
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_libver_bounds
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_libver_bounds
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_link_creation_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1link_1creation_1order
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_link_creation_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1link_1creation_1order
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_attr_creation_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1attr_1creation_1order
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_attr_creation_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1attr_1creation_1order
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_copy_object
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1copy_1object
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_copy_object
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1copy_1object
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_create_intermediate_group
+ * Signature: (JZ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1create_1intermediate_1group
+(JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_create_intermediate_group
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pget_1create_1intermediate_1group
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_data_transform
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1data_1transform
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_data_transform
+ * Signature: (J[Ljava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1data_1transform
+(JNIEnv *, jclass, jlong, jobjectArray, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_acc_flags
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1elink_1acc_1flags
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_acc_flags
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1elink_1acc_1flags
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_link_phase_change
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1link_1phase_1change
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_link_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1link_1phase_1change
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_attr_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1attr_1phase_1change
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_attr_phase_change
+ * Signature: (JII)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1attr_1phase_1change
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_phase_change
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1phase_1change
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_phase_change
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1phase_1change
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_nindexes
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1nindexes
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_nindexes
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1nindexes
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_shared_mesg_index
+ * Signature: (JIII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1shared_1mesg_1index
+(JNIEnv *, jclass, jlong, jint, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_shared_mesg_index
+ * Signature: (JI[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1shared_1mesg_1index
+(JNIEnv *, jclass, jlong, jint, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_local_heap_size_hint
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1local_1heap_1size_1hint
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_local_heap_size_hint
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1local_1heap_1size_1hint
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_nbit
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1nbit
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_scaleoffset
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_est_link_info
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1est_1link_1info
+(JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_est_link_info
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1est_1link_1info
+(JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_fapl
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1elink_1fapl
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pget_elink_fapl
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Pget_1elink_1fapl
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_prefix
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1elink_1prefix
+(JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_prefix
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1elink_1prefix
+(JNIEnv *, jclass, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_direct
+ * Signature: (JJJJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct
+(JNIEnv *, jclass, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_direct
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct
+(JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_sec2
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_stdio
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_windows
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_fapl_muti
+ * Signature: (J[I[J[Ljava/lang/String;[J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi
+(JNIEnv *, jclass, jlong, jintArray, jlongArray, jobjectArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_muti
+ * Signature: (J[I[J[Ljava/lang/String;[JZ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi
+(JNIEnv *, jclass, jlong, jintArray, jlongArray, jobjectArray, jlongArray, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_fapl_split
+ * Signature: (JLjava/lang/String;JLjava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split
+(JNIEnv *, jclass, jlong, jstring, jlong, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_meta_block_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_meta_block_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_sieve_buf_size
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_sieve_buf_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_elink_file_cache_size
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_elink_file_cache_size
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size
+(JNIEnv *, jclass, jlong);
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_mdc_config
+ * Signature: (J)Lhdf/hdf5lib/structs/H5AC_cache_config_t;
+ */
+JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_mdc_config
+ * Signature: (JLhdf/hdf5lib/structs/H5AC_cache_config_t;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config
+(JNIEnv *, jclass, jlong, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_chunk_cache
+ * Signature: (JJJD)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1chunk_1cache
+(JNIEnv *, jclass, jlong, jlong, jlong, jdouble);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_chunk_cache
+ * Signature: (J[J[J[D)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache
+(JNIEnv *, jclass, jlong, jlongArray, jlongArray, jdoubleArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_obj_track_times
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Pget_1obj_1track_1times
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_obj_track_times
+ * Signature: (JZ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1obj_1track_1times
+(JNIEnv *, jclass, jlong, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_char_encoding
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1char_1encoding
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_char_encoding
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1char_1encoding
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual
+ * Signature: (JJLjava/lang/String;Ljava/lang/String;J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1virtual
+(JNIEnv *, jclass, jlong, jlong, jstring, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_count
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_vspace
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_srcspace
+ * Signature: (JJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_filename
+ * Signature: (JJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_dsetname
+ * Signature: (JJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_view
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1view
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual_view
+ * Signature: (JI)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1virtual_1view
+(JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_virtual_printf_gap
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Pget_1virtual_1printf_1gap
+(JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_virtual_printf_gap
+ * Signature: (JJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1virtual_1printf_1gap
+(JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_file_space
+ * Signature: (J[I[J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pget_1file_1space
+(JNIEnv *, jclass, jlong, jintArray, jlongArray);
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_file_space
+ * Signature: (JIJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1file_1space
+(JNIEnv *, jclass, jlong, jint, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_mdc_log_options
+ * Signature: (JZLjava/lang/String;Z)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options
+(JNIEnv *, jclass, jlong, jboolean, jstring, jboolean);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pget_mdc_log_options
+ * Signature: (J[Z)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Pget_1mdc_1log_1options
+(JNIEnv *, jclass, jlong, jbooleanArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pset_append_flush
+ * Signature: (JI[JLjava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pset_1append_1flush
+  (JNIEnv*, jclass, jlong, jint, jlongArray, jobject, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pcreate_class_nocb
+ * Signature: (JLjava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Pcreate_1class_1nocb
+  (JNIEnv*, jclass, jlong, jstring);
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Pcreate_class
+ * Signature: (JLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Pcreate_1class
+  (JNIEnv*, jclass, jlong, jstring, jobject, jobject, jobject, jobject, jobject, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pregister2_nocb
+ * Signature: (JLjava/lang/String;J[B)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pregister2_1nocb
+  (JNIEnv*, jclass, jlong, jstring, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pregister2
+ * Signature: (JLjava/lang/String;J[BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pregister2
+  (JNIEnv*, jclass, jlong, jstring, jlong, jbyteArray, jobject, jobject, jobject, jobject, jobject, jobject, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pinsert2_nocb
+ * Signature: (JLjava/lang/String;J[B)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pinsert2_1nocb
+  (JNIEnv*, jclass, jlong, jstring, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Pinsert2
+ * Signature: (JLjava/lang/String;J[BLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Pinsert2
+  (JNIEnv*, jclass, jlong, jstring, jlong, jbyteArray, jobject, jobject, jobject, jobject, jobject, jobject);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Piterate
+ * Signature: (J[ILjava/lang/Object;Ljava/lang/Object;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Piterate
+  (JNIEnv*, jclass, jlong, jintArray, jobject, jobject);
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5P */
diff --git a/java/src/jni/h5plImp.c b/java/src/jni/h5plImp.c
new file mode 100644
index 0000000..dfaeb53
--- /dev/null
+++ b/java/src/jni/h5plImp.c
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "hdf5.h"
+#include <stdlib.h>
+#include "h5jni.h"
+#include "h5plImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5PLset_loading_state
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5PLset_1loading_1state
+  (JNIEnv *env, jclass clss, jint plugin_flags)
+{
+    if (H5PLset_loading_state((unsigned int)plugin_flags) < 0) {
+        h5libraryError(env);
+    }
+}
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5PLget_loading_state
+ * Signature: (V)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5PLget_1loading_1state
+  (JNIEnv *env, jclass clss)
+{
+    unsigned int plugin_type = 0;
+    if (H5PLget_loading_state(&plugin_type) < 0) {
+        h5libraryError(env);
+    }
+    return (jint)plugin_type;
+}
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5plImp.h b/java/src/jni/h5plImp.h
new file mode 100644
index 0000000..7c55bf4
--- /dev/null
+++ b/java/src/jni/h5plImp.h
@@ -0,0 +1,46 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5PL */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5PL
+#define _Included_hdf_hdf5lib_H5_H5PL
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5PLset_loading_state
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5PLset_1loading_1state
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5PLget_loading_state
+ * Signature: (V)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5PLget_1loading_1state
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5PL */
diff --git a/java/src/jni/h5rImp.c b/java/src/jni/h5rImp.c
new file mode 100644
index 0000000..9b19bfb
--- /dev/null
+++ b/java/src/jni/h5rImp.c
@@ -0,0 +1,324 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "hdf5.h"
+#include <jni.h>
+#include <stdlib.h>
+#include "h5jni.h"
+#include "h5rImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rcreate
+ * Signature: ([BJLjava/lang/String;IJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Rcreate(JNIEnv *env, jclass clss, jbyteArray ref, jlong loc_id, jstring name, jint ref_type, jlong space_id)
+{
+    const char *rName;
+    herr_t      status = -1;
+    jbyte      *refP;
+    jboolean    isCopy2;
+
+    PIN_JAVA_STRING(name, rName, -1);
+
+    if (ref == NULL) {
+        UNPIN_JAVA_STRING(name, rName);
+        h5nullArgument( env, "H5Rcreate:  ref is NULL");
+    } /* end if */
+    else {
+        if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) {
+            UNPIN_JAVA_STRING(name, rName);
+            h5badArgument( env, "H5Rcreate:  ref input array != H5R_OBJ_REF_BUF_SIZE");
+        } /* end if */
+        else if ((ref_type == H5R_DATASET_REGION) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) {
+            UNPIN_JAVA_STRING(name, rName);
+            h5badArgument( env, "H5Rcreate:  region ref input array != H5R_DSET_REG_REF_BUF_SIZE");
+        } /* end else if */
+        else if ((ref_type != H5R_OBJECT) && (ref_type != H5R_DATASET_REGION)) {
+            UNPIN_JAVA_STRING(name, rName);
+            h5badArgument( env, "H5Rcreate:  ref_type unknown type ");
+        } /* end else if */
+        else {
+            refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy2);
+            if (refP == NULL) {
+                UNPIN_JAVA_STRING(name, rName);
+                h5JNIFatalError(env,  "H5Rcreate:  ref not pinned");
+            } /* end if */
+            else {
+                status = H5Rcreate(refP, (hid_t)loc_id, rName, (H5R_type_t)ref_type, (hid_t)space_id);
+
+                UNPIN_JAVA_STRING(name, rName);
+                if (status < 0) {
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Rcreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Rdereference
+ * Signature: (JJI[B)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Rdereference(JNIEnv *env, jclass clss, jlong dataset, jlong access_list, jint ref_type, jbyteArray ref)
+{
+    jboolean isCopy;
+    jbyte   *refP;
+    hid_t    retVal = -1;
+
+    if (ref == NULL) {
+        h5nullArgument( env, "H5Rdereference:  ref is NULL");
+    } /* end if */
+    else if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) {
+        h5badArgument( env, "H5Rdereference:  obj ref input array != H5R_OBJ_REF_BUF_SIZE");
+    } /* end else if */
+    else if ((ref_type == H5R_DATASET_REGION) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) {
+        h5badArgument( env, "H5Rdereference:  region ref input array != H5R_DSET_REG_REF_BUF_SIZE");
+    } /* end else if */
+    else {
+        refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy);
+        if (refP == NULL) {
+            h5JNIFatalError(env,  "H5Rderefernce:  ref not pinned");
+        } /* end if */
+        else {
+            retVal = H5Rdereference2((hid_t)dataset, (hid_t)access_list, (H5R_type_t)ref_type, refP);
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+
+            if (retVal < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Rdereference */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rget_region
+ * Signature: (JI[B)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Rget_1region(JNIEnv *env, jclass clss, jlong dataset, jint ref_type, jbyteArray ref)
+{
+    hid_t    retVal = -1;
+    jboolean isCopy;
+    jbyte   *refP;
+
+    if (ref_type != H5R_DATASET_REGION)  {
+        h5badArgument( env, "H5Rget_region:  bad ref_type ");
+    } /* end if */
+    else if (ref == NULL) {
+        h5nullArgument( env, "H5Rget_region:  ref is NULL");
+    } /* end if */
+    else if ( ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) {
+        h5badArgument( env, "H5Rget_region:  region ref input array != H5R_DSET_REG_REF_BUF_SIZE");
+    } /* end if */
+    else {
+        refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy);
+        if (refP == NULL) {
+            h5JNIFatalError(env,  "H5Rget_region:  ref not pinned");
+        } /* end if */
+        else {
+            retVal = H5Rget_region((hid_t)dataset, (H5R_type_t)ref_type, refP);
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+
+            if (retVal < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Rget_1region */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5G_obj_t H5Rget_obj_type
+ * Signature: (JI[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Rget_1obj_1type(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref)
+{
+    int      retVal =-1;
+    jboolean isCopy;
+    jbyte   *refP;
+    H5O_type_t object_info;
+
+
+    if (ref == NULL) {
+        h5nullArgument( env, "H5Rget_object_type:  ref is NULL");
+    } /* end if */
+    else {
+        refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy);
+        if (refP == NULL) {
+            h5JNIFatalError(env,  "H5Rget_object_type:  ref not pinned");
+        } /* end if */
+        else {
+            retVal = H5Rget_obj_type2((hid_t)loc_id, (H5R_type_t)ref_type, refP, &object_info);
+            if(retVal >= 0)
+                retVal = object_info;
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+
+            if (retVal < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Rget_1obj_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    int H5Rget_obj_type2
+ * Signature: (JI[B[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Rget_1obj_1type2(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref, jintArray ref_obj)
+{
+
+    jint     status;
+    jboolean isCopy;
+    jbyte   *refP;
+    jint    *ref_objP;
+    int      retVal = -1;
+
+
+    if (ref == NULL) {
+        h5nullArgument( env, "H5Rget_object_type:  ref is NULL");
+    } /* end if */
+    else if (ref_obj == NULL) {
+        h5nullArgument( env, "H5Rget_object_type:  ref_obj is NULL");
+    } /* end else if */
+    else {
+        refP = (jbyte *)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy);
+        if (refP == NULL) {
+            h5JNIFatalError(env,  "H5Rget_object_type:  ref not pinned");
+        } /* end if */
+        else {
+            ref_objP = (jint *)ENVPTR->GetIntArrayElements(ENVPAR ref_obj, &isCopy);
+            if (ref_objP == NULL) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR ref,refP,0);
+                h5JNIFatalError(env,  "H5Rget_object_type:  ref_obj not pinned");
+            } /* end if */
+            else {
+                status = H5Rget_obj_type2((hid_t)loc_id, (H5R_type_t)ref_type, refP, (H5O_type_t*)ref_objP);
+                retVal = ref_objP[0];
+
+                ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+                if (status < 0) {
+                    ENVPTR->ReleaseIntArrayElements(ENVPAR ref_obj,ref_objP, JNI_ABORT);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    ENVPTR->ReleaseIntArrayElements(ENVPAR ref_obj, ref_objP, 0);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Rget_1obj_1type2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rget_name
+ * Signature: (JI[B[Ljava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Rget_1name(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref, jobjectArray name, jlong size)
+{
+    jlong    ret_val = -1;
+    jbyte   *refP;
+    jboolean isCopy;
+    char    *aName = NULL;
+    jstring  str;
+    size_t   bs;
+
+    bs = (size_t)size;
+    if (bs <= 0) {
+        h5badArgument(env, "H5Rget_name:  size <= 0");
+    } /* end if */
+    else if (ref == NULL) {
+        h5nullArgument(env, "H5Rget_name:  ref is NULL");
+    } /* end else if */
+    else {
+        if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) {
+            h5badArgument(env, "H5Rget_name:  obj ref input array != H5R_OBJ_REF_BUF_SIZE");
+        } /* end if */
+        else if ((ref_type == H5R_DATASET_REGION)
+                && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) {
+            h5badArgument(env, "H5Rget_name:  region ref input array != H5R_DSET_REG_REF_BUF_SIZE");
+        } /* end else if */
+        else {
+            refP = (jbyte *)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy);
+            if (refP == NULL) {
+                h5JNIFatalError(env,  "H5Rget_name:  ref not pinned");
+            } /* end if */
+            else {
+                aName = (char*)HDmalloc(sizeof(char)*bs);
+                if (aName == NULL) {
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+                    h5outOfMemory(env, "H5Rget_name:  malloc failed");
+                } /* end if */
+                else {
+                    ret_val = (jlong)H5Rget_name((hid_t)loc_id, (H5R_type_t)ref_type, refP, aName, bs) ;
+
+                    ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT);
+                    if (ret_val < 0) {
+                        HDfree(aName);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        str = ENVPTR->NewStringUTF(ENVPAR aName);
+                        ENVPTR->SetObjectArrayElement(ENVPAR name, 0, str);
+
+                        HDfree(aName);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Rget_1name */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5rImp.h b/java/src/jni/h5rImp.h
new file mode 100644
index 0000000..2afb345
--- /dev/null
+++ b/java/src/jni/h5rImp.h
@@ -0,0 +1,78 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5R */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5R
+#define _Included_hdf_hdf5lib_H5_H5R
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rcreate
+ * Signature: ([BJLjava/lang/String;IJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rcreate
+  (JNIEnv *, jclass, jbyteArray, jlong, jstring, jint, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Rdereference
+ * Signature: (JJI[B)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Rdereference
+  (JNIEnv *, jclass, jlong, jlong, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rget_region
+ * Signature: (JI[B)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Rget_1region
+  (JNIEnv *, jclass, jlong, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5G_obj_t H5Rget_obj_type
+ * Signature: (JI[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rget_1obj_1type
+  (JNIEnv *, jclass, jlong, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    int H5Rget_obj_type2
+ * Signature: (JI[B[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rget_1obj_1type2
+  (JNIEnv *, jclass, jlong, jint, jbyteArray, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Rget_name
+ * Signature: (JI[B[Ljava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Rget_1name
+  (JNIEnv *, jclass, jlong, jint, jbyteArray, jobjectArray, jlong);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5R */
diff --git a/java/src/jni/h5sImp.c b/java/src/jni/h5sImp.c
new file mode 100644
index 0000000..2aad3d0
--- /dev/null
+++ b/java/src/jni/h5sImp.c
@@ -0,0 +1,1408 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "h5sImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Screate
+ * Signature: (I)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Screate(JNIEnv *env, jclass clss, jint type)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Screate((H5S_class_t) type);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Screate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Screate_simple
+ * Signature: (I[J[J)G
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Screate_1simple(JNIEnv *env, jclass clss, jint rank,
+        jlongArray dims, jlongArray maxdims)
+{
+    hid_t retVal = -1;
+    jlong *dimsP, *maxdimsP;
+    jboolean isCopy;
+    hsize_t *sa = NULL;
+    hsize_t *msa = NULL;
+    int i;
+    int drank, mrank;
+    hsize_t *lp;
+    jlong *jlp;
+
+    if (rank < 0) {
+        h5badArgument(env, "H5Screate_simple:  rank is invalid");
+    } /* end if */
+    else if (dims == NULL) {
+        h5nullArgument(env, "H5Screate_simple:  dims is NULL");
+    } /* end else if */
+    else {
+        drank = (int)ENVPTR->GetArrayLength(ENVPAR dims);
+        if (drank != rank) {
+            h5badArgument(env, "H5Screate_simple:  dims rank is invalid");
+            return -1;
+        } /* end if */
+        if (maxdims != NULL) {
+            mrank = (int)ENVPTR->GetArrayLength(ENVPAR maxdims);
+            if (mrank != rank) {
+                h5badArgument(env, "H5Screate_simple:  maxdims rank is invalid");
+                return -1;
+            } /* end if */
+        } /* end if */
+        dimsP = ENVPTR->GetLongArrayElements(ENVPAR dims, &isCopy);
+        if (dimsP == NULL) {
+            h5JNIFatalError(env, "H5Screate_simple:  dims not pinned");
+            return -1;
+        } /* end if */
+
+        sa = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (sa == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Screate_simple:  dims not converted to hsize_t");
+            return -1;
+        } /* end if */
+
+        jlp = (jlong *) dimsP;
+        for (i = 0; i < rank; i++) {
+            *lp = (hsize_t) *jlp;
+            lp++;
+            jlp++;
+        } /* end for */
+
+        if (maxdims == NULL) {
+            maxdimsP = NULL;
+            msa = (hsize_t *)maxdimsP;
+        } /* end if */
+        else {
+            maxdimsP = ENVPTR->GetLongArrayElements(ENVPAR maxdims, &isCopy);
+            if (maxdimsP == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                HDfree(sa);
+                h5JNIFatalError(env, "H5Screate_simple:  maxdims not pinned");
+                return -1;
+            } /* end if */
+            msa = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+            if (msa == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+                HDfree(sa);
+                h5JNIFatalError(env, "H5Screate_simple:  dims not converted to hsize_t");
+                return -1;
+            } /* end if */
+            jlp = (jlong *)maxdimsP;
+            for (i = 0; i < mrank; i++) {
+                *lp = (hsize_t)*jlp;
+                lp++;
+                jlp++;
+            } /* end for */
+        } /* end else */
+
+        retVal = H5Screate_simple(rank, (const hsize_t *)sa, (const hsize_t *)msa);
+
+        if (maxdimsP != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+            if (msa)
+                HDfree(msa);
+        } /* end if */
+
+        ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+        if (sa)
+            HDfree(sa);
+
+        if (retVal < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Screate_1simple */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Scopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Scopy(JNIEnv *env, jclass clss, jlong space_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Scopy(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Scopy */
+
+#ifdef notdef
+// 10/28/99 -- added code to copy the array -- this is not used,
+// but serves as a reminder in case we try to implement this in
+// the future....
+/*
+ *  Note:  the argument coord is actually long coord[][], which has been
+ *         flattened by the caller.
+ */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_elements
+ * Signature: (JII[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1elements(JNIEnv *env, jclass clss, jlong space_id, jint op, jint num_elemn, jlongArray coord)
+{
+    herr_t status = -1;
+    jint i;
+    jlong *P;
+    jboolean isCopy;
+    hssize_t *sa;
+    int rank;
+
+    if (coord == NULL) {
+        h5nullArgument( env, "H5Sselect_elements:  coord is NULL");
+        return -1;
+    } /* end if */
+
+    P = ENVPTR->GetLongArrayElements(ENVPAR env,coord,&isCopy);
+    if (P == NULL) {
+        h5JNIFatalError(env, "H5Sselect_elements:  coord not pinned");
+        return -1;
+    } /* end if */
+    sa = (hssize_t *)HDmalloc( (size_t)num_elems * 2 * sizeof(hssize_t));
+    if (sa == NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR env,coord,P,JNI_ABORT);
+        h5JNIFatalError(env, "H5Sselect_elements:  coord array not converted to hssize_t");
+        return -1;
+    } /* end if */
+    for (i= 0; i < (num_elsms * 2); i++) {
+        sa[i] = P[i];
+    } /* end for */
+
+    status = H5Sselect_elements (space_id, (H5S_seloper_t)op, num_elemn, (const hssize_t **)&sa);
+    ENVPTR->ReleaseLongArrayElements(ENVPAR env, coord, P, JNI_ABORT);
+    HDfree(sa);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1elements */
+#endif
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_elements
+ * Signature: (JII[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1elements(JNIEnv *env, jclass clss, jlong space_id, jint op,
+        jint num_elemn, jbyteArray coord)
+{
+    int      ii;
+    hsize_t *lp = NULL;
+    hsize_t *llp;
+    jlong   *jlp;
+    herr_t   status = -1;
+    jbyte   *P;
+    jboolean isCopy;
+    jsize    size;
+    int      nlongs;
+
+    if (coord == NULL) {
+        h5nullArgument(env, "H5Sselect_elements:  coord is NULL");
+    } /* end if */
+    else {
+        P = ENVPTR->GetByteArrayElements(ENVPAR coord, &isCopy);
+        if (P == NULL) {
+            h5JNIFatalError(env, "H5Sselect_elements:  coord not pinned");
+        } /* end if */
+        else {
+            size = (int)ENVPTR->GetArrayLength(ENVPAR coord);
+            nlongs = (int)((size_t)size / sizeof(jlong));
+            lp = (hsize_t *)HDmalloc((size_t)nlongs * sizeof(hsize_t));
+            jlp = (jlong *) P;
+            llp = lp;
+            for (ii = 0; ii < nlongs; ii++) {
+                *lp = (hsize_t) *jlp;
+                lp++;
+                jlp++;
+            } /* end for */
+
+            status = H5Sselect_elements(space_id, (H5S_seloper_t)op, (size_t)num_elemn, (const hsize_t *)llp);
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR coord, P, JNI_ABORT);
+
+            if (llp)
+                HDfree(llp);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1elements */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_all
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1all(JNIEnv *env, jclass clss, jlong space_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Sselect_all(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1all */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_none
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1none(JNIEnv *env, jclass clss, jlong space_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Sselect_none(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1none */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_valid
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1valid(JNIEnv *env, jclass clss, jlong space_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Sselect_valid(space_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1valid */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1npoints(JNIEnv *env, jclass clss, jlong space_id)
+{
+    hssize_t retVal = H5Sget_simple_extent_npoints(space_id);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1npoints */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1npoints(JNIEnv *env, jclass clss, jlong space_id)
+{
+    hssize_t retVal = H5Sget_select_npoints(space_id);
+
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1npoints */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1type(JNIEnv *env, jclass clss, jlong space_id)
+{
+    int retVal = -1;
+
+    retVal = H5Sget_select_type(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_ndims
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1ndims(JNIEnv *env, jclass clss, jlong space_id)
+{
+    int retVal = -1;
+
+    retVal = H5Sget_simple_extent_ndims(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint) retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1ndims */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_dims
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1dims(JNIEnv *env, jclass clss, jlong space_id,
+        jlongArray dims, jlongArray maxdims)
+{
+    int status = -1;
+    jlong *dimsP, *maxdimsP;
+    jboolean isCopy;
+    hsize_t *sa;
+    hsize_t *msa;
+    int i;
+    int rank = -1;
+    int mrank;
+
+    if (dims == NULL) {
+        dimsP = NULL;
+        sa = (hsize_t *) dimsP;
+    } /* end if */
+    else {
+        dimsP = ENVPTR->GetLongArrayElements(ENVPAR dims, &isCopy);
+        if (dimsP == NULL) {
+            h5JNIFatalError(env, "H5Pget_simple_extent_dims:  dims not pinned");
+            return -1;
+        } /* end if */
+        rank = (int)ENVPTR->GetArrayLength(ENVPAR dims);
+        sa = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (sa == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sget_simple_extent_dims:  dims not converted to hsize_t");
+            return -1;
+        } /* end if */
+    } /* end else */
+    if (maxdims == NULL) {
+        maxdimsP = NULL;
+        msa = (hsize_t *) maxdimsP;
+    } /* end if */
+    else {
+        maxdimsP = ENVPTR->GetLongArrayElements(ENVPAR maxdims, &isCopy);
+        if (maxdimsP == NULL) {
+            if (dimsP != NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                HDfree(sa);
+            } /* end if */
+            h5JNIFatalError(env, "H5Pget_simple_extent_dims:  maxdims not pinned");
+            return -1;
+        } /* end if */
+        mrank = (int) ENVPTR->GetArrayLength(ENVPAR maxdims);
+        if (rank < 0)
+            rank = mrank;
+        else if (mrank != rank) {
+            if (dimsP != NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                HDfree(sa);
+            } /* end if */
+            ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sget_simple_extent_dims:  maxdims rank not same as dims");
+            return -1;
+        } /* end else if */
+        msa = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (msa == NULL) {
+            if (dimsP != NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                HDfree(sa);
+            } /* end if */
+            ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sget_simple_extent_dims:  maxdims not converted to hsize_t");
+            return -1;
+        } /* end if */
+    } /* end else */
+
+    status = H5Sget_simple_extent_dims(space_id, (hsize_t *)sa, (hsize_t *)msa);
+
+    if (status < 0) {
+        if (dimsP != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            HDfree(sa);
+        } /* end if */
+        if (maxdimsP != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+            HDfree(msa);
+        } /* end if */
+        h5libraryError(env);
+        return -1;
+    } /* end if */
+
+    if (dimsP != NULL) {
+        for (i = 0; i < rank; i++) {
+            dimsP[i] = (jlong)sa[i];
+        } /* end for */
+        HDfree(sa);
+        ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, 0);
+    } /* end if */
+    if (maxdimsP != NULL) {
+        for (i = 0; i < rank; i++) {
+            maxdimsP[i] = (jlong)msa[i];
+        } /* end for */
+        HDfree(msa);
+        ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, 0);
+    } /* end if */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1dims */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1type(JNIEnv *env, jclass clss, jlong space_id)
+{
+    H5S_class_t retVal = H5S_NO_CLASS;
+
+    if (space_id < 0)
+        h5libraryError(env);
+
+    retVal = H5Sget_simple_extent_type(space_id);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sset_extent_simple
+ * Signature: (JI[J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sset_1extent_1simple(JNIEnv *env, jclass clss, jlong space_id,
+        jint rank, jlongArray dims, jlongArray maxdims)
+{
+    herr_t status = -1;
+    jlong *dimsP, *maxdimsP;
+    jboolean isCopy;
+    hsize_t *sa;
+    hsize_t *msa;
+    int i;
+    int drank, mrank;
+    hsize_t *lp;
+    jlong *jlp;
+
+    if (dims == NULL) {
+        h5nullArgument(env, "H5Sset_simple_extent:  dims is NULL");
+        return -1;
+    } /* end if */
+    drank = (int) ENVPTR->GetArrayLength(ENVPAR dims);
+    if (drank != rank) {
+        h5badArgument(env, "H5Screate_simple:  dims rank is invalid");
+        return -1;
+    } /* end if */
+    if (maxdims != NULL) {
+        mrank = (int) ENVPTR->GetArrayLength(ENVPAR maxdims);
+        if (mrank != rank) {
+            h5badArgument(env, "H5Screate_simple:  maxdims rank is invalid");
+            return -1;
+        } /* end if */
+    } /* end if */
+    dimsP = ENVPTR->GetLongArrayElements(ENVPAR dims, &isCopy);
+    if (dimsP == NULL) {
+        h5JNIFatalError(env, "H5Pset_simple_extent:  dims not pinned");
+        return -1;
+    } /* end if */
+    sa = lp = (hsize_t *) malloc((size_t)rank * sizeof(hsize_t));
+    if (sa == NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+        h5JNIFatalError(env, "H5Sset_simple_extent:  dims not converted to hsize_t");
+        return -1;
+    } /* end if */
+    jlp = (jlong *) dimsP;
+    for (i = 0; i < rank; i++) {
+        *lp = (hsize_t) *jlp;
+        lp++;
+        jlp++;
+    } /* end for */
+    if (maxdims == NULL) {
+        maxdimsP = NULL;
+        msa = (hsize_t *) maxdimsP;
+    } /* end if */
+    else {
+        maxdimsP = ENVPTR->GetLongArrayElements(ENVPAR maxdims, &isCopy);
+        if (maxdimsP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Pset_simple_extent:  maxdims not pinned");
+            return -1;
+        } /* end if */
+        msa = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (msa == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+            HDfree(sa);
+            h5JNIFatalError(env, "H5Sset_simple_extent:  maxdims not converted to hsize_t");
+            return -1;
+        } /* end if */
+        jlp = (jlong *) maxdimsP;
+        for (i = 0; i < rank; i++) {
+            *lp = (hsize_t) *jlp;
+            lp++;
+            jlp++;
+        } /* end for */
+    } /* end else */
+
+    status = H5Sset_extent_simple(space_id, rank, (hsize_t *) sa, (hsize_t *) msa);
+
+    ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+    HDfree(sa);
+    if (maxdimsP != NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR maxdims, maxdimsP, JNI_ABORT);
+        HDfree(msa);
+    } /* end if */
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end v */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sis_simple
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Sis_1simple(JNIEnv *env, jclass clss, jlong space_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Sis_simple(space_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Sis_1simple */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Soffset_simple
+ * Signature: (J[B)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Soffset_1simple(JNIEnv *env, jclass clss, jlong space_id, jbyteArray offset)
+{
+    herr_t    status;
+    jbyte    *P = NULL;
+    jboolean  isCopy;
+    hssize_t *sa;
+    size_t    rank;
+    size_t    i;
+    hssize_t *lp;
+    jlong    *jlp;
+
+    if (offset != NULL) {
+        P = ENVPTR->GetByteArrayElements(ENVPAR offset, &isCopy);
+        if (P == NULL) {
+            h5JNIFatalError(env, "H5Soffset_simple:  offset not pinned");
+            return -1;
+        } /* end if */
+        i = (size_t)ENVPTR->GetArrayLength(ENVPAR offset);
+        rank = i / sizeof(jlong);
+        sa = lp = (hssize_t *)HDmalloc((size_t)rank * sizeof(hssize_t));
+        if (sa == NULL) {
+            ENVPTR->ReleaseByteArrayElements(ENVPAR offset, P, JNI_ABORT);
+            h5JNIFatalError(env, "H5Soffset_simple:  offset not converted to hssize_t");
+            return -1;
+        } /* end if */
+        jlp = (jlong *) P;
+        for (i = 0; i < rank; i++) {
+            *lp = (hssize_t) *jlp;
+            lp++;
+            jlp++;
+        } /* end for */
+    } /* end if */
+    else {
+        P = NULL;
+        sa = (hssize_t *) P;
+    } /* end else */
+
+    status = H5Soffset_simple(space_id, sa);
+    if (P != NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR offset, P, JNI_ABORT);
+        HDfree(sa);
+    } /* end if */
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Soffset_1simple */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sextent_copy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sextent_1copy(JNIEnv *env, jclass clss, jlong space_id, jlong src_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Sextent_copy(space_id, src_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sextent_1copy */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sextent_equal
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Sextent_1equal(JNIEnv *env, jclass clss, jlong space_id, jlong src_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Sextent_equal(space_id, src_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Sextent_1equal */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sset_extent_none
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sset_1extent_1none(JNIEnv *env, jclass clss, jlong space_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Sset_extent_none(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sset_1extent_1none */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_hyperslab
+ * Signature: (JI[J[J[J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sselect_1hyperslab(JNIEnv *env, jclass clss, jlong space_id, jint op,
+        jlongArray start, jlongArray stride, jlongArray count, jlongArray block)
+{
+    herr_t status = -1;
+    jlong *startP, *strideP, *countP, *blockP;
+    jboolean isCopy;
+    hsize_t *strt;
+    hsize_t *strd;
+    hsize_t *cnt;
+    hsize_t *blk;
+    int rank;
+    int i;
+    hsize_t *lp;
+    jlong *jlp;
+
+    if (start == NULL) {
+        h5nullArgument(env, "H5Sselect_hyperslab:  start is NULL");
+    } /* end if */
+    else if (count == NULL) {
+        h5nullArgument(env, "H5Sselect_hyperslab:  count is NULL");
+    } /* end if */
+    else {
+        rank = (int) ENVPTR->GetArrayLength(ENVPAR start);
+        if (rank != ENVPTR->GetArrayLength(ENVPAR count)) {
+            h5badArgument(env, "H5Sselect_hyperslab:  count and start have different rank!");
+            return -1;
+        } /* end if */
+
+        startP = ENVPTR->GetLongArrayElements(ENVPAR start, &isCopy);
+        if (startP == NULL) {
+            h5JNIFatalError(env, "H5Sselect_hyperslab:  start not pinned");
+            return -1;
+        } /* end if */
+        strt = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (strt == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sselect_hyperslab:  start not converted to hsize_t");
+            return -1;
+        } /* end if */
+
+        jlp = (jlong *) startP;
+        for (i = 0; i < rank; i++) {
+            *lp = (hsize_t) *jlp;
+            lp++;
+            jlp++;
+        } /* end if */
+
+        countP = ENVPTR->GetLongArrayElements(ENVPAR count, &isCopy);
+        if (countP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sselect_hyperslab:  count not pinned");
+            return -1;
+        } /* end if */
+        cnt = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (cnt == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sselect_hyperslab:  count not converted to hsize_t");
+            return -1;
+        } /* end if */
+
+        jlp = (jlong *) countP;
+        for (i = 0; i < rank; i++) {
+            *lp = (hsize_t) *jlp;
+            lp++;
+            jlp++;
+        } /* end if */
+        if (stride == NULL) {
+            strideP = NULL;
+            strd = (hsize_t *) strideP;
+        } /* end if */
+        else {
+            strideP = ENVPTR->GetLongArrayElements(ENVPAR stride, &isCopy);
+            if (strideP == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+                HDfree(cnt);
+                HDfree(strt);
+                h5badArgument(env, "H5Sselect_hyperslab:  stride not pinned");
+                return -1;
+            } /* end if */
+            strd = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+            if (strd == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+                HDfree(cnt);
+                HDfree(strt);
+                h5JNIFatalError(env, "H5Sselect_hyperslab:  stride not converted to hsize_t");
+                return -1;
+            } /* end if */
+            jlp = (jlong *) strideP;
+            for (i = 0; i < rank; i++) {
+                *lp = (hsize_t) *jlp;
+                lp++;
+                jlp++;
+            } /* end if */
+        } /* end if */
+        if (block == NULL) {
+            blockP = NULL;
+            blk = (hsize_t *) blockP;
+        } /* end if */
+        else {
+            blockP = ENVPTR->GetLongArrayElements(ENVPAR block, &isCopy);
+            if (blockP == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+                HDfree(cnt);
+                HDfree(strt);
+                if (strd != NULL)
+                    free(strd);
+
+                h5JNIFatalError(env, "H5Sselect_hyperslab:  block not pinned");
+                return -1;
+            } /* end if */
+            blk = lp = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+            if (blk == NULL) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR block, blockP, JNI_ABORT);
+                HDfree(cnt);
+                HDfree(strt);
+                if (strd != NULL)
+                    free(strd);
+
+                h5JNIFatalError(env, "H5Sget_simple_extent:  block not converted to hsize_t");
+                return -1;
+            } /* end if */
+            jlp = (jlong *) blockP;
+            for (i = 0; i < rank; i++) {
+                *lp = (hsize_t) *jlp;
+                lp++;
+                jlp++;
+            } /* end for */
+        } /* end else */
+
+        status = H5Sselect_hyperslab(space_id, (H5S_seloper_t) op, (const hsize_t *) strt, (const hsize_t *) strd,
+                (const hsize_t *) cnt, (const hsize_t *) blk);
+
+        ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+        ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+        HDfree(strt);
+        HDfree(cnt);
+        if (strideP != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+            HDfree(strd);
+        } /* end if */
+        if (blockP != NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR block, blockP, JNI_ABORT);
+            HDfree(blk);
+        } /* end if */
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sselect_1hyperslab */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Sclose(JNIEnv *env, jclass clss, jlong space_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Sclose(space_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Sclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_hyper_nblocks
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1nblocks(JNIEnv *env, jclass clss, jlong spaceid)
+{
+    hssize_t retVal = -1;
+
+    retVal = H5Sget_select_hyper_nblocks((hid_t) spaceid);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1nblocks */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_elem_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1elem_1npoints(JNIEnv *env, jclass clss, jlong spaceid)
+{
+    hssize_t retVal = -1;
+
+    retVal = H5Sget_select_elem_npoints((hid_t) spaceid);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1elem_1npoints */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_hyper_blocklist
+ * Signature: (JJJ[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1blocklist(JNIEnv *env, jclass clss,
+        jlong spaceid, jlong startblock, jlong numblocks, jlongArray buf)
+{
+    herr_t status = -1;
+    jlong *bufP;
+    jboolean isCopy;
+    hsize_t *ba;
+    int i;
+    int rank;
+    hsize_t st;
+    hsize_t nb;
+
+    st = (hsize_t) startblock;
+    nb = (hsize_t) numblocks;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Sget_select_hyper_blocklist:  buf is NULL");
+    } /* end if */
+    else {
+        rank = H5Sget_simple_extent_ndims(spaceid);
+        if (rank <= 0)
+            rank = 1;
+        if (ENVPTR->GetArrayLength(ENVPAR buf) < (numblocks * rank)) {
+            h5badArgument(env, "H5Sget_select_hyper_blocklist:  buf input array too small");
+        } /* end if */
+        else {
+            bufP = ENVPTR->GetLongArrayElements(ENVPAR buf, &isCopy);
+            if (bufP == NULL) {
+                h5JNIFatalError(env, "H5Sget_select_hyper_blocklist:  buf not pinned");
+            } /* end if */
+            else {
+                ba = (hsize_t *) malloc((size_t)nb * 2 * (size_t)rank * sizeof(hsize_t));
+                if (ba == NULL) {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, JNI_ABORT);
+                    h5JNIFatalError(env, "H5Screate-simple:  buffer not converted to hsize_t");
+                } /* end if */
+                else {
+                    status = H5Sget_select_hyper_blocklist((hid_t)spaceid, st, nb, (hsize_t *)ba);
+
+                    if (status < 0) {
+                        ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, JNI_ABORT);
+                        free(ba);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        for (i = 0; i < (numblocks * 2 * rank); i++) {
+                            bufP[i] = (jlong)ba[i];
+                        } /* end for */
+                        free(ba);
+                        ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, 0);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1blocklist */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_elem_pointlist
+ * Signature: (JJJ[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1elem_1pointlist(JNIEnv *env, jclass clss, jlong spaceid,
+        jlong startpoint, jlong numpoints, jlongArray buf)
+{
+    herr_t status = -1;
+    jlong *bufP;
+    jboolean isCopy;
+    hsize_t *ba;
+    int i;
+    int rank;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Sget_select_elem_pointlist:  buf is NULL");
+    } /* end if */
+    else {
+        rank = H5Sget_simple_extent_ndims(spaceid);
+        if (rank <= 0)
+            rank = 1;
+        if (ENVPTR->GetArrayLength(ENVPAR buf) < (numpoints * rank)) {
+            h5badArgument(env, "H5Sget_select_elem_pointlist:  buf input array too small");
+        } /* end if */
+        else {
+            bufP = ENVPTR->GetLongArrayElements(ENVPAR buf, &isCopy);
+            if (bufP == NULL) {
+                h5JNIFatalError(env, "H5Sget_select_elem_pointlist:  buf not pinned");
+            } /* end if */
+            else {
+                ba = (hsize_t *)HDmalloc(((size_t)numpoints * (size_t)rank) * sizeof(hsize_t));
+                if (ba == NULL) {
+                    ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, JNI_ABORT);
+                    h5JNIFatalError(env, "H5Sget_select_elem_pointlist:  buf not converted to hsize_t");
+                } /* end if */
+                else {
+                    status = H5Sget_select_elem_pointlist((hid_t) spaceid, (hsize_t)startpoint, (hsize_t)numpoints, (hsize_t *)ba);
+
+                    if (status < 0) {
+                        HDfree(ba);
+                        ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, JNI_ABORT);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        for (i = 0; i < (numpoints * rank); i++) {
+                            bufP[i] = (jlong)ba[i];
+                        } /* end for */
+                        HDfree(ba);
+                        ENVPTR->ReleaseLongArrayElements(ENVPAR buf, bufP, 0);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end if */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_bounds
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1select_1bounds(JNIEnv *env, jclass clss, jlong spaceid,
+        jlongArray start, jlongArray end)
+{
+    herr_t status = -1;
+    jlong *startP, *endP;
+    jboolean isCopy;
+    hsize_t *strt;
+    hsize_t *en;
+    int rank;
+    int i;
+
+    if (start == NULL) {
+        h5nullArgument(env, "H5Sget_select_bounds:  start is NULL");
+    } /* end if */
+    else if (end == NULL) {
+        h5nullArgument(env, "H5Sget_select_bounds:  end is NULL");
+    } /* end else if */
+    else {
+        startP = ENVPTR->GetLongArrayElements(ENVPAR start, &isCopy);
+        if (startP == NULL) {
+            h5JNIFatalError(env, "H5Sget_select_bounds:  start not pinned");
+            return -1;
+        } /* end if */
+        rank = (int) ENVPTR->GetArrayLength(ENVPAR start);
+        strt = (hsize_t *)malloc((size_t)rank * sizeof(hsize_t));
+        if (strt == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sget_select_bounds:  start not converted to hsize_t");
+            return -1;
+        } /* end if */
+
+        endP = ENVPTR->GetLongArrayElements(ENVPAR end, &isCopy);
+        if (endP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            free(strt);
+            h5JNIFatalError(env, "H5Sget_select_bounds:  end not pinned");
+            return -1;
+        } /* end if */
+        en = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (en == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR end, endP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sget_simple_extent:  dims not converted to hsize_t");
+            return -1;
+        } /* end if */
+
+        status = H5Sget_select_bounds((hid_t) spaceid, (hsize_t *) strt, (hsize_t *) en);
+
+        if (status < 0) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR end, endP, JNI_ABORT);
+            HDfree(strt);
+            HDfree(en);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            for (i = 0; i < rank; i++) {
+                startP[i] = (jlong)strt[i];
+                endP[i] = (jlong)en[i];
+            } /* end for */
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR end, endP, 0);
+            HDfree(strt);
+            HDfree(en);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1select_1bounds */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sencode
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_H5_H5Sencode(JNIEnv *env, jclass cls, jlong obj_id)
+{
+    herr_t status = -1;
+    unsigned char *bufPtr;
+    size_t buf_size = 0;
+    jbyteArray returnedArray = NULL;
+
+    if (obj_id < 0) {
+        h5badArgument(env, "H5Sencode: invalid argument");
+   } /* end if */
+    else {
+        status = H5Sencode(obj_id, NULL, &buf_size);
+
+        if (status < 0) {
+            h5libraryError(env);
+        } /* end else if */
+        else if (buf_size < 0) {
+            h5badArgument(env, "H5Sencode:  buf_size < 0");
+        } /* end if */
+        else {
+            bufPtr = (unsigned char*)HDcalloc((size_t) 1, buf_size);
+            if (bufPtr == NULL) {
+                h5outOfMemory(env, "H5Sencode:  calloc failed");
+            } /* end if */
+            else {
+                status = H5Sencode((hid_t) obj_id, bufPtr, &buf_size);
+
+                if (status < 0) {
+                    HDfree(bufPtr);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    returnedArray = ENVPTR->NewByteArray(ENVPAR (jsize)buf_size);
+                    ENVPTR->SetByteArrayRegion(ENVPAR returnedArray, 0, (jsize)buf_size, (jbyte*) bufPtr);
+                    HDfree(bufPtr);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return returnedArray;
+} /* end Java_hdf_hdf5lib_H5_H5Sencode */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sdecode
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Sdecode(JNIEnv *env, jclass cls, jbyteArray buf)
+{
+    hid_t sid = -1;
+    jbyte *bufP;
+    jboolean isCopy;
+
+    if (buf == NULL) {
+        h5nullArgument(env, "H5Sdecode:  buf is NULL");
+    } /* end if */
+    else {
+        bufP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+        if (bufP == NULL) {
+            h5JNIFatalError( env, "H5Sdecode:  buf not pinned");
+        } /* end if */
+        else {
+            sid = H5Sdecode(bufP);
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, bufP, JNI_ABORT);
+
+            if (sid < 0)
+                h5libraryError(env);
+        } /* end else if */
+    } /* end else if */
+
+    return (jlong)sid;
+} /* end Java_hdf_hdf5lib_H5_H5Sdecode */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sis_regular_hyperslab
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Sis_1regular_1hyperslab(JNIEnv *env, jclass cls, jlong obj_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Sis_regular_hyperslab((hid_t)obj_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Sis_1regular_1hyperslab */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_regular_hyperslab
+ * Signature: (J[J[J[J[J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Sget_1regular_1hyperslab(JNIEnv *env, jclass clss, jlong space_id,
+        jlongArray start, jlongArray stride, jlongArray count, jlongArray block)
+{
+    herr_t status;
+    jlong *startP, *strideP, *countP, *blockP;
+    jboolean isCopy;
+    hsize_t *strt;
+    hsize_t *strd;
+    hsize_t *cnt;
+    hsize_t *blk;
+    int rank;
+    int i;
+
+    if (start == NULL) {
+        h5nullArgument(env, "H5Sget_regular_hyperslab:  start is NULL");
+    } /* end if */
+    else if (count == NULL) {
+        h5nullArgument(env, "H5Sget_regular_hyperslab:  count is NULL");
+    } /* end else if */
+    else {
+        rank = (int) ENVPTR->GetArrayLength(ENVPAR start);
+        if (rank != ENVPTR->GetArrayLength(ENVPAR count)) {
+            h5badArgument(env, "H5Sget_regular_hyperslab:  count and start have different rank!");
+            return;
+        } /* end if */
+
+        startP = ENVPTR->GetLongArrayElements(ENVPAR start, &isCopy);
+        if (startP == NULL) {
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  start not pinned");
+            return;
+        } /* end if */
+        strt = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (strt == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  start not converted to hsize_t");
+            return;
+        } /* end if */
+
+        countP = ENVPTR->GetLongArrayElements(ENVPAR count, &isCopy);
+        if (countP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  count not pinned");
+            return;
+        } /* end if */
+        cnt = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (cnt == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  count not converted to hsize_t");
+            return;
+        } /* end if */
+
+        strideP = ENVPTR->GetLongArrayElements(ENVPAR stride, &isCopy);
+        if (strideP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            HDfree(cnt);
+            HDfree(strt);
+            h5badArgument(env, "H5Sget_regular_hyperslab:  stride not pinned");
+            return;
+        } /* end if */
+        strd = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (strd == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+            HDfree(cnt);
+            HDfree(strt);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  stride not converted to hsize_t");
+            return;
+        } /* end if */
+
+        blockP = ENVPTR->GetLongArrayElements(ENVPAR block, &isCopy);
+        if (blockP == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            HDfree(cnt);
+            HDfree(strt);
+            HDfree(strd);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  block not pinned");
+            return;
+        } /* end if */
+        blk = (hsize_t *)HDmalloc((size_t)rank * sizeof(hsize_t));
+        if (blk == NULL) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR block, blockP, JNI_ABORT);
+            HDfree(cnt);
+            HDfree(strt);
+            HDfree(strd);
+            h5JNIFatalError(env, "H5Sget_regular_hyperslab:  block not converted to hsize_t");
+            return;
+        } /* end if */
+
+        status = H5Sget_regular_hyperslab(space_id, (hsize_t *) strt, (hsize_t *) strd, (hsize_t *) cnt, (hsize_t *) blk);
+
+        if (status < 0) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR block, blockP, JNI_ABORT);
+            HDfree(strt);
+            HDfree(cnt);
+            HDfree(strd);
+            HDfree(blk);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            for (i = 0; i < (rank); i++) {
+                startP[i] = (jlong)strt[i];
+                countP[i] = (jlong)cnt[i];
+                strideP[i] = (jlong)strd[i];
+                blockP[i] = (jlong)blk[i];
+            } /* end for */
+            HDfree(strt);
+            HDfree(cnt);
+            HDfree(strd);
+            HDfree(blk);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR start, startP, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR count, countP, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR stride, strideP, 0);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR block, blockP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Sget_1regular_1hyperslab */
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5sImp.h b/java/src/jni/h5sImp.h
new file mode 100644
index 0000000..007b9a7
--- /dev/null
+++ b/java/src/jni/h5sImp.h
@@ -0,0 +1,288 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5S */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5S
+#define _Included_hdf_hdf5lib_H5_H5S
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Screate
+ * Signature: (I)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Screate(
+        JNIEnv *, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Screate_simple
+ * Signature: (I[J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Screate_1simple(
+        JNIEnv *, jclass, jint, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Scopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Scopy(
+        JNIEnv *, jclass, jlong);
+
+#ifdef notdef
+// 10/28/99 -- added code to copy the array -- this is not used,
+// but serves as a reminder in case we try to implement this in
+// the future....
+/*
+ *  Note:  the argument coord is actually long coord[][], which has been
+ *         flattened by the caller.
+ */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_elements
+ * Signature: (JII[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1elements
+(JNIEnv *, jclass, jlong, jint, jint, jlongArray);
+#endif
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_elements
+ * Signature: (JII[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1elements(
+        JNIEnv *, jclass, jlong, jint, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_all
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1all(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_none
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1none(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_valid
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1valid(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1npoints(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1npoints(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1type(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_ndims
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1ndims(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_dims
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1dims(
+        JNIEnv *, jclass, jlong, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_simple_extent_type
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1simple_1extent_1type(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sset_extent_simple
+ * Signature: (JI[J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sset_1extent_1simple(
+        JNIEnv *, jclass, jlong, jint, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sis_simple
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Sis_1simple(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Soffset_simple
+ * Signature: (J[B)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Soffset_1simple(
+        JNIEnv *, jclass, jlong, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sextent_copy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sextent_1copy(
+        JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sextent_equal
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Sextent_1equal
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sset_extent_none
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sset_1extent_1none(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sselect_hyperslab
+ * Signature: (JI[J[J[J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sselect_1hyperslab(
+        JNIEnv *, jclass, jlong, jint, jlongArray, jlongArray, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Sclose(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_hyper_nblocks
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1nblocks(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_elem_npoints
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1elem_1npoints(
+        JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_hyper_blocklist
+ * Signature: (JJJ[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1hyper_1blocklist(
+        JNIEnv *, jclass, jlong, jlong, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_elem_pointlist
+ * Signature: (JJJ[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1elem_1pointlist(
+        JNIEnv *, jclass, jlong, jlong, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_select_bounds
+ * Signature: (J[J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Sget_1select_1bounds(
+        JNIEnv *, jclass, jlong, jlongArray, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sencode
+ * Signature: (J)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_H5_H5Sencode
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sdecode
+ * Signature: ([B)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Sdecode
+  (JNIEnv *, jclass, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sis_regular_hyperslab
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Sis_1regular_1hyperslab
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Sget_regular_hyperslab
+ * Signature: (J[J[J[J[J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Sget_1regular_1hyperslab(
+        JNIEnv *, jclass, jlong, jlongArray, jlongArray, jlongArray, jlongArray);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5S */
diff --git a/java/src/jni/h5tImp.c b/java/src/jni/h5tImp.c
new file mode 100644
index 0000000..1f587de
--- /dev/null
+++ b/java/src/jni/h5tImp.c
@@ -0,0 +1,1588 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "h5tImp.h"
+
+extern JavaVM *jvm;
+extern jobject visit_callback;
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Topen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Topen2(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist)
+{
+    hid_t       status;
+    const char *tName;
+
+    PIN_JAVA_STRING(name, tName, -1);
+
+    status = H5Topen2((hid_t)loc_id, tName, (hid_t)access_plist);
+
+    UNPIN_JAVA_STRING(name, tName);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jlong)status;
+} /* end Java_hdf_hdf5lib_H5__1H5Topen2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tcommitted
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Tcommitted(JNIEnv *env, jclass clss, jlong type_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Tcommitted(type_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Tcommitted */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tcreate
+ * Signature: (IJ)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tcreate(JNIEnv *env, jclass clss, jint dclass, jlong size)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Tcreate((H5T_class_t )dclass, (size_t)size);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tcreate */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tcopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tcopy(JNIEnv *env, jclass clss, jlong type_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Tcopy((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tcopy */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tequal
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Tequal(JNIEnv *env, jclass clss, jlong type_id1, jlong type_id2)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Tequal((hid_t)type_id1, (hid_t)type_id2);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Tequal */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tlock
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tlock(JNIEnv *env, jclass clss, jlong type_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tlock((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tlock */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_class
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1class(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_class_t retVal = H5T_NO_CLASS;
+
+    retVal = H5Tget_class((hid_t)type_id);
+    if (retVal == H5T_NO_CLASS)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1size(JNIEnv *env, jclass clss, jlong type_id)
+{
+    size_t retVal = 0;
+
+    retVal = H5Tget_size((hid_t)type_id);
+    if (retVal == 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1size*/
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1size(JNIEnv *env, jclass clss, jlong type_id, jlong size)
+{
+    size_t tsize = (size_t)size;
+    herr_t retVal = -1;
+
+    retVal = H5Tset_size((hid_t)type_id, tsize);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end ifJava_hdf_hdf5lib_H5_H5Tset_1size */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1order(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_order_t retVal = H5T_ORDER_ERROR;
+
+    retVal = H5Tget_order((hid_t)type_id);
+    if (retVal == H5T_ORDER_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1order(JNIEnv *env, jclass clss, jlong type_id, jint order)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_order((hid_t)type_id, (H5T_order_t)order);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1order */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_precision
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1precision(JNIEnv *env, jclass clss, jlong type_id)
+{
+    size_t retVal = 0;
+
+    retVal = H5Tget_precision((hid_t)type_id);
+    if (retVal == 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1precision */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_precision_long
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1precision_1long(JNIEnv *env, jclass clss, jlong type_id)
+{
+    size_t retVal = 0;
+
+    retVal = H5Tget_precision((hid_t)type_id);
+    if (retVal == 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1precision_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_precision
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1precision(JNIEnv *env, jclass clss, jlong type_id, jlong precision)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_precision((hid_t)type_id, (size_t)precision);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1precision */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_offset
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1offset(JNIEnv *env, jclass clss, jlong type_id)
+{
+    int retVal = -1;
+
+    retVal = H5Tget_offset((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_offset
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1offset(JNIEnv *env, jclass clss, jlong type_id, jlong offset)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_offset((hid_t)type_id, (size_t)offset);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_pad
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1pad(JNIEnv *env, jclass clss, jlong type_id, jintArray pad)
+{
+    herr_t   status = -1;
+    jboolean isCopy;
+    jint    *P;
+
+    if (pad == NULL) {
+        h5nullArgument(env, "H5Tget_pad:  pad is NULL");
+    } /* end if */
+    else {
+        P = ENVPTR->GetIntArrayElements(ENVPAR pad, &isCopy);
+        if (P == NULL) {
+            h5JNIFatalError(env, "H5Tget_pad:  pad not pinned");
+        } /* end if */
+        else {
+            status = H5Tget_pad((hid_t)type_id, (H5T_pad_t *)&(P[0]), (H5T_pad_t *)&(P[1]));
+
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR pad, P, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR pad, P, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1pad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_pad
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1pad(JNIEnv *env, jclass clss, jlong type_id, jint lsb, jint msb)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_pad((hid_t)type_id, (H5T_pad_t)lsb, (H5T_pad_t)msb);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1pad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_sign
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1sign(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_sign_t retVal = H5T_SGN_ERROR;
+
+    retVal = H5Tget_sign((hid_t)type_id);
+    if (retVal == H5T_SGN_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1sign */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_sign
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1sign(JNIEnv *env, jclass clss, jlong type_id, jint sign)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_sign((hid_t)type_id, (H5T_sign_t)sign);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1sign */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_fields_int
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1fields_1int(JNIEnv *env, jclass clss, jlong type_id, jintArray fields)
+{
+    herr_t   status;
+    jboolean isCopy;
+    jint    *P;
+
+    if (fields == NULL) {
+        h5nullArgument(env, "H5Tget_fields:  fields is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR fields) < 5) {
+        h5badArgument(env, "H5Tget_fields:  fields input array < order 5");
+    } /* end else if */
+    else {
+        P = ENVPTR->GetIntArrayElements(ENVPAR fields, &isCopy);
+        if (P == NULL) {
+            h5JNIFatalError(env,  "H5Tget_fields:  fields not pinned");
+        } /* end if */
+        else {
+            status = H5Tget_fields((hid_t)type_id, (size_t *)&(P[0]), (size_t *)&(P[1]), (size_t *)&(P[2]), (size_t *)&(P[3]), (size_t *)&(P[4]));
+
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR fields, P, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR fields, P, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1fields_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_fields
+ * Signature: (J[J)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1fields(JNIEnv *env, jclass clss, jlong type_id, jlongArray fields)
+{
+    herr_t   status;
+    jboolean isCopy;
+    jlong   *fieldsArray;
+
+    if (fields == NULL) {
+        h5nullArgument(env, "H5Tget_fields:  fields is NULL");
+    } /* end if */
+    else if (ENVPTR->GetArrayLength(ENVPAR fields) < 5) {
+        h5badArgument(env, "H5Tget_fields:  fields input array < order 5");
+    } /* end else if */
+    else {
+        fieldsArray = ENVPTR->GetLongArrayElements(ENVPAR fields, &isCopy);
+        if (fieldsArray == NULL) {
+            h5JNIFatalError(env,  "H5Tget_fields:  fields not pinned");
+        } /* end if */
+        else {
+            { /* direct cast (size_t *)variable fails on 32-bit environment */
+                size_t spos_t = 0;
+                size_t epos_t = 0;
+                size_t esize_t = 0;
+                size_t mpos_t = 0;
+                size_t msize_t = 0;
+                long long fields_temp = *(&fieldsArray[0]);
+                spos_t = (size_t)fields_temp;
+                fields_temp = *(&fieldsArray[1]);
+                epos_t = (size_t)fields_temp;
+                fields_temp = *(&fieldsArray[2]);
+                esize_t = (size_t)fields_temp;
+                fields_temp = *(&fieldsArray[3]);
+                mpos_t = (size_t)fields_temp;
+                fields_temp = *(&fieldsArray[4]);
+                msize_t = (size_t)fields_temp;
+
+                status = H5Tget_fields((hid_t)type_id, &spos_t, &epos_t, &esize_t, &mpos_t, &msize_t);
+
+                *(&fieldsArray[0]) = (jlong)spos_t;
+                *(&fieldsArray[1]) = (jlong)epos_t;
+                *(&fieldsArray[2]) = (jlong)esize_t;
+                *(&fieldsArray[3]) = (jlong)mpos_t;
+                *(&fieldsArray[4]) = (jlong)msize_t;
+            } /* end direct cast special handling */
+
+            if (status < 0) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR fields, fieldsArray, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseLongArrayElements(ENVPAR fields, fieldsArray, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1fields */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_fields
+ * Signature: (JJJJJJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1fields(JNIEnv *env, jclass clss, jlong type_id, jlong spos, jlong epos,
+        jlong esize, jlong mpos, jlong msize)
+{
+    if (H5Tset_fields((hid_t)type_id, (size_t)spos, (size_t)epos, (size_t)esize, (size_t)mpos, (size_t)msize) < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1fields */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_ebias
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1ebias(JNIEnv *env, jclass clss, jlong type_id)
+{
+    size_t retVal = 0;
+
+    retVal =  H5Tget_ebias((hid_t)type_id);
+    if (retVal == 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1ebias */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_ebias_long
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1ebias_1long(JNIEnv *env, jclass clss, jlong type_id)
+{
+    size_t retVal = 0;
+
+    retVal =  H5Tget_ebias((hid_t)type_id);
+    if (retVal == 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1ebias_1long */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_ebias
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1ebias(JNIEnv *env, jclass clss, jlong type_id, jlong ebias)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Tset_ebias((hid_t)type_id, (size_t)ebias);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1ebias */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_norm
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1norm(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_norm_t retVal = H5T_NORM_ERROR;
+
+    retVal =  H5Tget_norm((hid_t)type_id);
+    if (retVal == H5T_NORM_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1norm */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_norm
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1norm(JNIEnv *env, jclass clss, jlong type_id, jint norm)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Tset_norm((hid_t)type_id, (H5T_norm_t )norm);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1norm */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_inpad
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1inpad(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_pad_t retVal = H5T_PAD_ERROR;
+
+    retVal =  H5Tget_inpad((hid_t)type_id );
+    if (retVal == H5T_PAD_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1inpad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_inpad
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1inpad(JNIEnv *env, jclass clss, jlong type_id, jint inpad)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_inpad((hid_t)type_id, (H5T_pad_t) inpad);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1inpad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_cset
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1cset(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_cset_t retVal = H5T_CSET_ERROR;
+
+    retVal =  H5Tget_cset((hid_t)type_id);
+    if (retVal == H5T_CSET_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1cset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_cset
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1cset(JNIEnv *env, jclass clss, jlong type_id, jint cset)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tset_cset((hid_t)type_id, (H5T_cset_t)cset);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1cset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_strpad
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1strpad(JNIEnv *env, jclass clss, jlong type_id)
+{
+    H5T_str_t retVal = H5T_STR_ERROR;
+
+    retVal = H5Tget_strpad((hid_t)type_id);
+    if (retVal == H5T_STR_ERROR)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1strpad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_strpad
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1strpad(JNIEnv *env, jclass clss, jlong type_id, jint strpad)
+{
+    herr_t retVal = -1;
+
+    retVal =  H5Tset_strpad((hid_t)type_id, (H5T_str_t)strpad);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1strpad */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_nmembers
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1nmembers(JNIEnv *env, jclass clss, jlong type_id)
+{
+    int retVal = -1;
+
+    retVal =  H5Tget_nmembers((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1nmembers */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_name
+ * Signature: (JI)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1name(JNIEnv *env, jclass clss, jlong type_id, jint field_idx)
+{
+    char   *name;
+    jstring str = NULL;
+
+    name = H5Tget_member_name((hid_t)type_id, (unsigned)field_idx);
+    if (name != NULL) {
+        str = ENVPTR->NewStringUTF(ENVPAR name);
+        H5free_memory(name);
+
+        if (str == NULL)
+            h5JNIFatalError(env,  "H5Tget_member_name:  returned string not created");
+    } /* end if */
+
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1name */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_index
+ * Signature: (JLjava/lang/String)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1index(JNIEnv *env, jclass clss, jlong type_id, jstring field_name)
+{
+    const char *tName;
+    int         index = -1;
+
+    PIN_JAVA_STRING(field_name, tName, -1);
+
+    index = H5Tget_member_index((hid_t)type_id, tName);
+
+    UNPIN_JAVA_STRING(field_name, tName);
+
+    if (index < 0)
+        h5libraryError(env);
+
+    return (jint)index;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1index */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_type
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tget_1member_1type(JNIEnv *env, jclass clss, jlong type_id, jint field_idx)
+{
+    hid_t retVal = -1;
+
+    retVal =  H5Tget_member_type((hid_t)type_id, (unsigned)field_idx);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tget_1member_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_offset
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1offset(JNIEnv *env, jclass clss, jlong type_id, jint memno)
+{
+    return (jlong)H5Tget_member_offset((hid_t)type_id, (unsigned)memno);
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1offset */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_class
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1class(JNIEnv *env, jclass clss, jlong type_id, jint memno)
+{
+    int retVal = -1;
+
+    retVal = H5Tget_member_class((hid_t)type_id, (unsigned)memno);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tinsert
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tinsert(JNIEnv *env, jclass clss, jlong type_id, jstring name, jlong offset, jlong field_id)
+{
+    herr_t      status;
+    const char *tName;
+    long        off = (long)offset;
+
+    PIN_JAVA_STRING(name, tName, -1);
+
+    status = H5Tinsert((hid_t)type_id, tName, (size_t)off, field_id);
+
+    UNPIN_JAVA_STRING(name,tName);
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tinsert */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tpack
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tpack(JNIEnv *env, jclass clss, jlong type_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tpack((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Tpack */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5__1H5Tclose(JNIEnv *env, jclass clss, jlong type_id)
+{
+    herr_t retVal = -1;
+
+    retVal = H5Tclose((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tclose */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tvlen_create
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tvlen_1create(JNIEnv *env, jclass clss, jlong base_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Tvlen_create((hid_t)base_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tvlen_1create */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_tag
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tset_1tag(JNIEnv *env, jclass clss, jlong type, jstring tag)
+{
+    herr_t      status = -1;
+    const char *tagP;
+
+    PIN_JAVA_STRING(tag, tagP, -1);
+
+    status = H5Tset_tag((hid_t)type, tagP);
+
+    UNPIN_JAVA_STRING(tag,tagP);
+
+    if (status < 0)
+        h5libraryError(env);
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tset_1tag */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_tag
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1tag(JNIEnv *env, jclass clss, jlong type)
+{
+    jstring str = NULL;
+    char   *tag;
+
+    tag = H5Tget_tag((hid_t)type);
+    if (tag != NULL) {
+        str = ENVPTR->NewStringUTF(ENVPAR tag);
+        H5free_memory(tag);
+
+        if (str == NULL)
+            h5JNIFatalError(env,  "H5Tget_tag:  returned string not created");
+    } /* end if */
+
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1tag */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_super
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tget_1super(JNIEnv *env, jclass clss, jlong type_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Tget_super((hid_t)type_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tget_1super */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tenum_create
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tenum_1create(JNIEnv *env, jclass clss, jlong base_id)
+{
+    hid_t retVal = -1;
+
+    retVal = H5Tenum_create((hid_t)base_id);
+    if (retVal < 0)
+        h5libraryError(env);
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tenum_1create */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_insert_int
+ * Signature: (JLjava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1insert_1int(JNIEnv *env, jclass clss, jlong type_id, jstring name, jintArray value)
+{
+    herr_t      status = -1;
+    jint       *intP;
+    const char *nameP;
+    jboolean    isCopy2;
+
+    if (value == NULL ) {
+        h5nullArgument(env, "H5Tenum_insert:  value is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(name, nameP, -1);
+
+        intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2);
+        if (intP == NULL) {
+            UNPIN_JAVA_STRING(name, nameP);
+            h5JNIFatalError(env, "H5Tenum_insert:  value not pinned");
+            return -1;
+        } /* end if */
+        else {
+            status = H5Tenum_insert((hid_t)type_id, nameP, intP);
+
+            UNPIN_JAVA_STRING(name, nameP);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1insert_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_insert
+ * Signature: (JLjava/lang/String;[B)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1insert(JNIEnv *env, jclass clss, jlong type_id, jstring name, jbyteArray value)
+{
+    herr_t      status = -1;
+    jbyte      *byteP;
+    const char *nameP;
+    jboolean    isCopy2;
+
+    if (value == NULL) {
+        h5nullArgument(env, "H5Tenum_insert:  value is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING0(name, nameP);
+
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2);
+        if (byteP == NULL) {
+            UNPIN_JAVA_STRING(name, nameP);
+            h5JNIFatalError(env, "H5Tenum_insert:  value not pinned");
+        } /* end if */
+        else {
+            status = H5Tenum_insert((hid_t)type_id, nameP, byteP);
+
+            UNPIN_JAVA_STRING(name, nameP);
+            ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1insert */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_nameof_int
+ * Signature: (J[I[Ljava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1nameof_1int(JNIEnv *env, jclass clss, jlong type_id, jintArray value, jobjectArray name,
+          jint size)
+{
+    herr_t   status = -1;
+    jint    *intP;
+    char    *nameP;
+    jboolean isCopy;
+    jstring  str;
+
+    if (size <= 0) {
+        h5badArgument(env, "H5Tenum_nameof:  name size < 0");
+    } /* end if */
+    else  if (value == NULL) {
+        h5nullArgument(env, "H5Tenum_nameof:  value is NULL");
+    } /* end if */
+    else {
+        nameP = (char*)HDmalloc(sizeof(char) * (size_t)size);
+        if (nameP == NULL) {
+            /* exception -- out of memory */
+            h5outOfMemory(env, "H5Tenum_nameof:  malloc name size");
+        } /* end if */
+        else {
+            intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy);
+            if (intP == NULL) {
+                HDfree(nameP);
+                h5JNIFatalError(env, "H5Tenum_nameof:  value not pinned");
+            } /* end if */
+            else {
+                status = H5Tenum_nameof((hid_t)type_id, intP, nameP, (size_t)size);
+
+                ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT);
+
+                if (status < 0) {
+                    HDfree(nameP);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR nameP);
+                    HDfree(nameP);
+                    if (str == NULL) {
+                        h5JNIFatalError(env, "H5Tenum_nameof:  return array not created");
+                    } /* end if */
+                    else
+                        ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1nameof_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_nameof
+ * Signature: (J[BJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1nameof(JNIEnv *env, jclass clss, jlong type_id, jbyteArray value, jlong size)
+{
+    herr_t status = -1;
+    jbyte *byteP;
+    char *nameP;
+    jboolean isCopy;
+    jstring str = NULL;
+
+    if (size <= 0) {
+        h5badArgument(env, "H5Tenum_nameof:  name size < 0");
+    } /* end if */
+    else if (value == NULL ) {
+        h5nullArgument(env, "H5Tenum_nameof:  value is NULL");
+    } /* end if */
+    else {
+        nameP = (char*)HDmalloc(sizeof(char) * (size_t)size);
+        if (nameP == NULL) {
+            h5outOfMemory(env, "H5Tenum_nameof:  malloc name size");
+        } /* end if */
+        else {
+            byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy);
+            if (byteP == NULL) {
+                HDfree(nameP);
+                h5JNIFatalError(env, "H5Tenum_nameof:  value not pinned");
+            } /* end if */
+            else {
+                status = H5Tenum_nameof((hid_t)type_id, byteP, nameP, (size_t)size);
+
+                /* free the buffer without copying back */
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+
+                if (status < 0) {
+                    HDfree(nameP);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    str = ENVPTR->NewStringUTF(ENVPAR nameP);
+                    HDfree(nameP);
+                    if (str == NULL) {
+                        h5JNIFatalError(env, "H5Tenum_nameof:  return array not created");
+                    } /* end if */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return str;
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1nameof */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_valueof_int
+ * Signature: (JLjava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1valueof_1int(JNIEnv *env, jclass clss, jlong type_id, jstring name, jintArray value)
+{
+    herr_t      status = -1;
+    jint       *intP;
+    const char *nameP;
+    jboolean    isCopy2;
+
+    if (value == NULL) {
+        h5nullArgument(env, "H5Tenum_valueof:  value is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING(name, nameP, -1);
+
+        intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2);
+        if (intP == NULL)  {
+            UNPIN_JAVA_STRING(name, nameP);
+            h5JNIFatalError(env, "H5Tenum_valueof:  value not pinned");
+        } /* end if */
+        else {
+            status = H5Tenum_valueof((hid_t)type_id, nameP, intP);
+
+            UNPIN_JAVA_STRING(name, nameP);
+
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1valueof_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_valueof
+ * Signature: (JLjava/lang/String;[B)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tenum_1valueof(JNIEnv *env, jclass clss, jlong type_id, jstring name, jbyteArray value)
+{
+    herr_t      status = -1;
+    jbyte      *byteP;
+    const char *nameP;
+    jboolean    isCopy2;
+
+    if (value == NULL) {
+        h5nullArgument(env, "H5Tenum_valueof:  value is NULL");
+    } /* end if */
+    else {
+        PIN_JAVA_STRING0(name, nameP);
+
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2);
+        if (byteP == NULL)  {
+            UNPIN_JAVA_STRING(name,nameP);
+            h5JNIFatalError(env, "H5Tenum_valueof:  value not pinned");
+        } /* end if */
+        else {
+            status = H5Tenum_valueof((hid_t)type_id, nameP, byteP);
+
+            UNPIN_JAVA_STRING(name, nameP);
+
+            if (status < 0) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Tenum_1valueof */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_value_int
+ * Signature: (JI[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1value_1int(JNIEnv *env, jclass clss, jlong type_id, jint membno, jintArray value)
+{
+    herr_t   status = -1;
+    jint    *intP;
+    jboolean isCopy;
+
+    if (value == NULL)  {
+        h5nullArgument(env, "H5Tget_member_value:  value is NULL");
+    } /* end if */
+    else {
+        intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy);
+        if (intP == NULL) {
+            h5JNIFatalError(env, "H5Tget_member_value:  value not pinned");
+        } /* end if */
+        else {
+            status = H5Tget_member_value((hid_t)type_id, (unsigned)membno, intP);
+
+
+            if (status < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, 0);
+        } /* end else */
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1value_1int */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_value
+ * Signature: (JI[B)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1member_1value(JNIEnv *env, jclass clss, jlong type_id, jint membno, jbyteArray value)
+{
+    herr_t   status = -1;
+    jbyte   *byteP;
+    jboolean isCopy;
+
+    if (value == NULL) {
+        h5nullArgument( env, "H5Tget_member_value:  value is NULL");
+    } /* end if */
+    else {
+        byteP = ENVPTR->GetByteArrayElements(ENVPAR value,&isCopy);
+        if (byteP == NULL) {
+            h5JNIFatalError(env, "H5Tget_member_value:  value not pinned");
+        } /* end if */
+        else {
+            status = H5Tget_member_value((hid_t)type_id, (unsigned)membno, byteP);
+
+            if (status < 0) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else
+                ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, 0);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1value */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_array_dims
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1array_1ndims(JNIEnv *env, jclass clss, jlong type_id)
+{
+    int ndims = -1;
+
+    ndims = H5Tget_array_ndims((hid_t)type_id);
+    if (ndims < 0)
+        h5libraryError(env);
+
+    return (jint)ndims;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1array_1ndims */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tarray_get_dims
+ * Signature: (J[I[I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1array_1dims(JNIEnv *env, jclass clss, jlong type_id, jintArray dims, jintArray perms)
+{
+    int      ndims = -1;
+    int      dlen;
+    int      i;
+    jint    *dimsP;
+    hsize_t *cdims = NULL;
+    jboolean isCopy;
+
+    if (dims == NULL) {
+        h5nullArgument( env, "H5Tget_array_dims:  value is NULL");
+    } /* end if */
+    else {
+        dimsP = ENVPTR->GetIntArrayElements(ENVPAR dims, &isCopy);
+        if (dimsP == NULL) {
+            h5JNIFatalError(env, "H5Tget_array_dims:  dimsP not pinned");
+        } /* end if */
+        else {
+            dlen = ENVPTR->GetArrayLength(ENVPAR dims);
+            cdims = (hsize_t*)HDmalloc((size_t)dlen * sizeof(hsize_t));
+
+            ndims = H5Tget_array_dims2((hid_t)type_id, cdims);
+
+            if (ndims < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                for (i = 0; i < dlen; i++) {
+                    dimsP[i] = (jint) cdims[i];
+                } /* end for */
+                ENVPTR->ReleaseIntArrayElements(ENVPAR dims, dimsP, 0);
+
+                if (cdims) HDfree(cdims);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)ndims;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1array_1dims */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tis_variable_str
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Tis_1variable_1str(JNIEnv *env, jclass clss, jlong type_id)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Tis_variable_str((hid_t)type_id);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Tis_1variable_1str */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_native_type
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tget_1native_1type(JNIEnv *env, jclass clss, jlong type_id, jint direction)
+{
+    hid_t native_tid = -1;
+
+    native_tid = H5Tget_native_type((hid_t)type_id, (H5T_direction_t)direction);
+
+    if (native_tid < 0)
+        h5libraryError(env);
+
+    return (jlong)native_tid;
+} /* end Java_hdf_hdf5lib_H5__1H5Tget_1native_1type */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tdetect_class
+ * Signature: (JI)Z
+ */
+JNIEXPORT jboolean JNICALL
+Java_hdf_hdf5lib_H5_H5Tdetect_1class(JNIEnv *env, jclass clss, jlong type_id, jint dtype_class)
+{
+    htri_t bval = JNI_FALSE;
+
+    bval = H5Tdetect_class((hid_t)type_id, (H5T_class_t)dtype_class);
+    if (bval > 0)
+        bval = JNI_TRUE;
+    else if (bval < 0)
+        h5libraryError(env);
+
+    return (jboolean)bval;
+} /* end Java_hdf_hdf5lib_H5_H5Tdetect_1class */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tcommit
+ * Signature: (JLjava/lang/String;JJJJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tcommit(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong type,
+          jlong link_plist_id, jlong create_plist_id, jlong access_plist_id)
+{
+    herr_t      status = -1;
+    const char *tName;
+
+    PIN_JAVA_STRING0(name, tName);
+
+    status = H5Tcommit2((hid_t)loc_id, tName, (hid_t)type, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id);
+
+    UNPIN_JAVA_STRING(name, tName);
+
+    if (status < 0)
+        h5libraryError(env);
+} /* end Java_hdf_hdf5lib_H5_H5Tcommit */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tarray_create2
+ * Signature: (JI[J)J
+ */
+JNIEXPORT jlong JNICALL
+Java_hdf_hdf5lib_H5__1H5Tarray_1create2(JNIEnv *env, jclass clss, jlong base_id, jint rank, jlongArray dims)
+{
+    hid_t    retVal = -1;
+    jlong   *dimsP;
+    int      dlen;
+    hsize_t *cdims = NULL;
+    jboolean isCopy;
+    int      i;
+
+    if (rank <= 0) {
+        h5badArgument(env, "H5Tarray_create:  rank is < 1");
+    } /* end if */
+    else if (dims == NULL) {
+        h5nullArgument(env, "H5Tarray_create:  dims is NULL");
+    } /* end else if */
+    else {
+        dimsP = ENVPTR->GetLongArrayElements(ENVPAR dims, &isCopy);
+        if (dimsP == NULL) {
+            h5JNIFatalError( env, "H5Tarray_create:  dimsP not pinned");
+        } /* end if */
+        else {
+            dlen = ENVPTR->GetArrayLength(ENVPAR dims);
+            if (dlen != rank) {
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+            } /* end if */
+            else {
+                cdims = (hsize_t*)HDmalloc((size_t)dlen * sizeof(hsize_t));
+                for (i = 0; i < dlen; i++) {
+                    cdims[i] = (hsize_t)dimsP[i];
+                } /* end for */
+
+                retVal = H5Tarray_create2((hid_t)base_id, (unsigned)rank, (const hsize_t*)cdims);
+
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, 0);
+
+                HDfree(cdims);
+                if (retVal < 0)
+                    h5libraryError(env);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jlong)retVal;
+} /* end Java_hdf_hdf5lib_H5__1H5Tarray_1create2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tarray_get_dims2
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2(JNIEnv *env, jclass clss, jlong type_id, jlongArray dims)
+{
+    int      ndims = -1;
+    int      dlen;
+    int      i;
+    jlong   *dimsP;
+    hsize_t *cdims=NULL;
+    jboolean isCopy;
+
+    if (dims == NULL) {
+        h5nullArgument(env, "H5Tget_array_dims:  value is NULL");
+    } /* end if */
+    else {
+        dimsP = ENVPTR->GetLongArrayElements(ENVPAR dims,&isCopy);
+        if (dimsP == NULL) {
+            h5JNIFatalError(env, "H5Tget_array_dims:  dimsP not pinned");
+        } /* end if */
+        else {
+            dlen = ENVPTR->GetArrayLength(ENVPAR dims);
+            cdims = (hsize_t*)HDmalloc((size_t)dlen * sizeof(hsize_t));
+
+            ndims = H5Tget_array_dims2((hid_t)type_id, (hsize_t*)cdims);
+
+            if (ndims < 0) {
+                if (cdims)
+                    free(cdims);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, JNI_ABORT);
+                h5libraryError(env);
+            } /* end if */
+            else {
+                for (i = 0; i < dlen; i++) {
+                    dimsP[i] = (jlong) cdims[i];
+                } /* end for */
+                ENVPTR->ReleaseLongArrayElements(ENVPAR dims, dimsP, 0);
+
+                if (cdims)
+                    HDfree(cdims);
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)ndims;
+} /* end Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2 */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tconvert
+ * Signature: (JJJ[B[BJ)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5Tconvert(JNIEnv *env, jclass clss, jlong src_id, jlong dst_id, jlong nelmts,
+      jbyteArray buf, jbyteArray background, jlong plist_id)
+{
+    herr_t   status;
+    jbyte   *bufP;
+    jbyte   *bgP = NULL;
+    jboolean isCopy;
+
+    if (nelmts <= 0) {
+        h5badArgument(env, "H5Tconvert:  name nelmts < 0");
+    } /* end if */
+    else {
+        bufP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy);
+        if (bufP == NULL) {
+            h5JNIFatalError(env, "H5Tconvert:  value not pinned");
+        } /* end if */
+        else {
+            if (background)
+            bgP = ENVPTR->GetByteArrayElements(ENVPAR background, &isCopy);
+
+            status = H5Tconvert((hid_t)src_id, (hid_t)dst_id, (size_t)nelmts, (void *)bufP, (void *)bgP, (hid_t)plist_id) ;
+
+            ENVPTR->ReleaseByteArrayElements(ENVPAR buf, bufP, 0);
+
+            if (bgP)
+                ENVPTR->ReleaseByteArrayElements(ENVPAR background, bgP, 0);
+
+            if (status < 0)
+                h5libraryError(env);
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5Tconvert */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5tImp.h b/java/src/jni/h5tImp.h
new file mode 100644
index 0000000..9755a91
--- /dev/null
+++ b/java/src/jni/h5tImp.h
@@ -0,0 +1,550 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5T */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5T
+#define _Included_hdf_hdf5lib_H5_H5T
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Topen2
+ * Signature: (JLjava/lang/String;J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Topen2
+  (JNIEnv *, jclass, jlong, jstring, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tcommitted
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Tcommitted
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tcreate
+ * Signature: (IJ)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tcreate
+  (JNIEnv *, jclass, jint, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tcopy
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tcopy
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tequal
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Tequal
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tlock
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tlock
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_class
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1class
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_size
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Tget_1size
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_size
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1size
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_order
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1order
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_order
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1order
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_precision
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1precision
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_precision_long
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Tget_1precision_1long
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_precision
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1precision
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_offset
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1offset
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_offset
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1offset
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_pad
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1pad
+  (JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_pad
+ * Signature: (JII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1pad
+  (JNIEnv *, jclass, jlong, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_sign
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1sign
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_sign
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1sign
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_fields_int
+ * Signature: (J[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1fields_1int
+  (JNIEnv *, jclass, jlong, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_fields
+ * Signature: (J[J)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tget_1fields
+  (JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_fields
+ * Signature: (JJJJJJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tset_1fields
+  (JNIEnv *, jclass, jlong, jlong, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_ebias
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1ebias
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_ebias_long
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Tget_1ebias_1long
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_ebias
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1ebias
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_norm
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1norm
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_norm
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1norm
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_inpad
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1inpad
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_inpad
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1inpad
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_cset
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1cset
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_cset
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1cset
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_strpad
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1strpad
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_strpad
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1strpad
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_nmembers
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1nmembers
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_name
+ * Signature: (JI)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1name
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_index
+ * Signature: (JLjava/lang/String)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1index
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_type
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tget_1member_1type
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_offset
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1offset
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_class
+ * Signature: (JI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1class
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tinsert
+ * Signature: (JLjava/lang/String;JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tinsert
+  (JNIEnv *, jclass, jlong, jstring, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tpack
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tpack
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tclose
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5__1H5Tclose
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tvlen_create
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tvlen_1create
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tset_tag
+ * Signature: (JLjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tset_1tag
+  (JNIEnv *, jclass, jlong, jstring);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_tag
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Tget_1tag
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_super
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tget_1super
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tenum_create
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tenum_1create
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_insert_int
+ * Signature: (JLjava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1insert_1int
+  (JNIEnv *, jclass, jlong, jstring, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_insert
+ * Signature: (JLjava/lang/String;[B)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1insert
+  (JNIEnv *, jclass, jlong, jstring, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_nameof_int
+ * Signature: (J[I[Ljava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1nameof_1int
+  (JNIEnv *, jclass, jlong, jintArray, jobjectArray, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_nameof
+ * Signature: (J[BJ)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1nameof
+  (JNIEnv *, jclass, jlong, jbyteArray, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_valueof_int
+ * Signature: (JLjava/lang/String;[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1valueof_1int
+  (JNIEnv *, jclass, jlong, jstring, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tenum_valueof
+ * Signature: (JLjava/lang/String;[B)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tenum_1valueof
+  (JNIEnv *, jclass, jlong, jstring, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_value_int
+ * Signature: (JI[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1value_1int
+  (JNIEnv *, jclass, jlong, jint, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_member_value
+ * Signature: (JI[B)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tget_1member_1value
+  (JNIEnv *, jclass, jlong, jint, jbyteArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_array_ndims
+ * Signature: (J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1array_1ndims
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_array_dims
+ * Signature: (J[I[I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1array_1dims
+  (JNIEnv *, jclass, jlong, jintArray, jintArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tis_variable_str
+ * Signature: (J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Tis_1variable_1str
+  (JNIEnv *, jclass, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_native_type
+ * Signature: (JI)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tget_1native_1type
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tdetect_class
+ * Signature: (JI)Z
+ */
+JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Tdetect_1class
+  (JNIEnv *, jclass, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tcommit
+ * Signature: (JLjava/lang/String;JJJJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tcommit
+  (JNIEnv *, jclass, jlong, jstring, jlong, jlong, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    _H5Tarray_create2
+ * Signature: (JI[J)J
+ */
+JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Tarray_1create2
+  (JNIEnv *, jclass, jlong, jint, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tget_array_dims2
+ * Signature: (J[J)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tget_1array_1dims2
+  (JNIEnv *, jclass, jlong, jlongArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Tconvert
+ * Signature: (JJJ[B[BJ)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Tconvert
+  (JNIEnv *, jclass, jlong, jlong, jlong, jbyteArray, jbyteArray, jlong);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5T */
diff --git a/java/src/jni/h5util.c b/java/src/jni/h5util.c
new file mode 100644
index 0000000..90c8ad2
--- /dev/null
+++ b/java/src/jni/h5util.c
@@ -0,0 +1,2592 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "hdf5.h"
+#include "h5util.h"
+
+/* size of hyperslab buffer when a dataset is bigger than H5TOOLS_MALLOCSIZE */
+hsize_t H5TOOLS_BUFSIZE = (32 * 1024 * 1024);  /* 32 MB */
+int     H5TOOLS_TEXT_BLOCK = 16;  /* Number of elements on a line in a text export file */
+
+JavaVM *jvm;
+jobject visit_callback;
+jobject copy_callback;
+jobject close_callback;
+jobject create_callback;
+jobject compare_callback;
+jobject get_callback;
+jobject set_callback;
+jobject delete_callback;
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static int     h5str_dump_region_blocks(h5str_t *str, hid_t region, hid_t region_obj);
+static int     h5str_dump_region_points(h5str_t *str, hid_t region, hid_t region_obj);
+static int     h5str_is_zero(const void *_mem, size_t size);
+static hid_t   h5str_get_native_type(hid_t type);
+static hid_t   h5str_get_little_endian_type(hid_t type);
+static hid_t   h5str_get_big_endian_type(hid_t type);
+static htri_t  h5str_detect_vlen(hid_t tid);
+static htri_t  h5str_detect_vlen_str(hid_t tid);
+static int     h5tools_dump_simple_data(FILE *stream, hid_t container, hid_t type, void *_mem, hsize_t nelmts);
+static int     h5str_render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t block_nelmts);
+static int     render_bin_output_region_data_blocks(FILE *stream, hid_t region_id,
+            hid_t container, int ndims, hid_t type_id, hssize_t nblocks, hsize_t *ptdata);
+static int     render_bin_output_region_blocks(FILE *stream, hid_t region_space,
+            hid_t region_id, hid_t container);
+static int     render_bin_output_region_data_points(FILE *stream, hid_t region_space, hid_t region_id,
+            hid_t container, int ndims, hid_t type_id, hssize_t npoints, hsize_t *ptdata);
+static int     render_bin_output_region_points(FILE *stream, hid_t region_space,
+            hid_t region_id, hid_t container);
+
+/** frees memory held by array of strings */
+void
+h5str_array_free(char **strs, size_t len) {
+    size_t i;
+
+    if (!strs || len <= 0)
+        return;
+
+    for (i = 0; i < len; i++) {
+        if (*(strs + i))
+            HDfree(*(strs + i));
+    } /* for (i=0; i<n; i++)*/
+    HDfree(strs);
+} /* end h5str_array_free */
+
+/** allocate a new str with given length */
+void
+h5str_new(h5str_t *str, size_t len) {
+    if (str && len > 0) {
+        str->s = (char *)HDmalloc(len);
+        str->max = len;
+        str->s[0] = '\0';
+    } /* end if */
+} /* end h5str_new */
+
+/** free string memory */
+void
+h5str_free(h5str_t *str) {
+    if (str && str->max > 0) {
+        HDfree(str->s);
+        HDmemset(str, 0, sizeof(h5str_t));
+    } /* end if */
+} /* end h5str_free */
+
+/** reset the max size of the string */
+void
+h5str_resize(h5str_t *str, size_t new_len) {
+    char *new_str;
+
+    if (!str || new_len <= 0 || str->max == new_len)
+        return;
+
+    new_str = (char *)HDmalloc(new_len);
+    if (new_len > str->max) /* increase memory */
+        HDstrcpy(new_str, str->s);
+    else
+        HDstrncpy(new_str, str->s, new_len - 1);
+
+    HDfree(str->s);
+    str->s = new_str;
+    str->max = new_len;
+} /* end h5str_resize */
+
+/* appends a copy of the string pointed to by cstr to the h5str.
+ Return Value:
+ the char string point to str->s
+ */
+char*
+h5str_append(h5str_t *str, const char* cstr) {
+    size_t len;
+
+    if (!str)
+        return NULL;
+    else if (!cstr)
+        return str->s;
+
+    len = HDstrlen(str->s) + HDstrlen(cstr);
+    while (len >= str->max) /* not enough to hold the new string, double the space */
+    {
+        h5str_resize(str, str->max * 2);
+    }
+
+    return HDstrcat(str->s, cstr);
+} /* end h5str_append */
+
+/** print value of a data point into string.
+ Return Value:
+ On success, the total number of characters printed is returned.
+ On error, a negative number is returned.
+ */
+size_t
+h5str_sprintf(h5str_t *str, hid_t container, hid_t tid, void *ptr, int expand_data) {
+    unsigned char   tmp_uchar = 0;
+    char            tmp_char = 0;
+    unsigned short  tmp_ushort = 0;
+    short           tmp_short = 0;
+    unsigned int    tmp_uint = 0;
+    int             tmp_int = 0;
+    unsigned long   tmp_ulong = 0;
+    long            tmp_long = 0;
+    unsigned long long tmp_ullong = 0;
+    long long       tmp_llong = 0;
+    float           tmp_float = 0.0;
+    double          tmp_double = 0.0;
+    long double     tmp_ldouble = 0.0;
+    static char     fmt_llong[8], fmt_ullong[8];
+
+    hid_t           mtid = -1;
+    size_t          offset;
+    size_t          nll;
+    char           *this_str;
+    size_t          this_strlen;
+    int             n;
+    int             len;
+    hvl_t          *vlptr;
+    char           *cptr = (char*) ptr;
+    unsigned char  *ucptr = (unsigned char*) ptr;
+    H5T_class_t     tclass = H5Tget_class(tid);
+    size_t          size = H5Tget_size(tid);
+    H5T_sign_t      nsign = H5Tget_sign(tid);
+    int bdata_print = 0;
+
+    if (!str || !ptr)
+        return 0;
+
+    /* 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);
+    } /* end if */
+
+    this_str = NULL;
+    this_strlen = 0;
+
+    switch (tclass) {
+    case H5T_FLOAT:
+        if (sizeof(float) == size) {
+            /* if (H5Tequal(tid, H5T_NATIVE_FLOAT)) */
+            HDmemcpy(&tmp_float, ptr, sizeof(float));
+            this_str = (char*)HDmalloc(25);
+            sprintf(this_str, "%g", tmp_float);
+        }
+        else if (sizeof(double) == size) {
+            /* if (H5Tequal(tid, H5T_NATIVE_DOUBLE)) */
+            HDmemcpy(&tmp_double, ptr, sizeof(double));
+            this_str = (char*)HDmalloc(25);
+            sprintf(this_str, "%g", tmp_double);
+        }
+#if H5_SIZEOF_LONG_DOUBLE !=0
+        else if (sizeof(long double) == size) {
+            /* if (H5Tequal(tid, H5T_NATIVE_LDOUBLE)) */
+            HDmemcpy(&tmp_ldouble, ptr, sizeof(long double));
+            this_str = (char*)HDmalloc(27);
+            sprintf(this_str, "%Lf", tmp_ldouble);
+        }
+#endif
+        break;
+    case H5T_STRING:
+    {
+        char *tmp_str;
+        size = 0;
+
+        if (H5Tis_variable_str(tid)) {
+            tmp_str = *(char**) ptr;
+            if (tmp_str != NULL)
+                size = HDstrlen(tmp_str);
+        }
+        else {
+            tmp_str = cptr;
+        }
+
+        /* Check for NULL pointer for string */
+        if (tmp_str == NULL) {
+            this_str = (char *)HDmalloc(5);
+            HDstrncpy(this_str, "NULL", 4);
+        }
+        else {
+            if (size > 0) {
+                this_str = (char *)HDmalloc(size+1);
+                HDstrncpy(this_str, tmp_str, size);
+            }
+        }
+    }
+    break;
+    case H5T_INTEGER:
+        if (sizeof(char) == size) {
+            if(H5T_SGN_NONE == nsign) {
+                /* if (H5Tequal(tid, H5T_NATIVE_UCHAR)) */
+                HDmemcpy(&tmp_uchar, ptr, sizeof(unsigned char));
+                this_str = (char*)HDmalloc(7);
+                sprintf(this_str, "%u", tmp_uchar);
+            }
+            else {
+                /* if (H5Tequal(tid, H5T_NATIVE_SCHAR)) */
+                HDmemcpy(&tmp_char, ptr, sizeof(char));
+                this_str = (char*)HDmalloc(7);
+                sprintf(this_str, "%hhd", tmp_char);
+            }
+        }
+        else if (sizeof(int) == size) {
+            if(H5T_SGN_NONE == nsign) {
+                /* if (H5Tequal(tid, H5T_NATIVE_UINT)) */
+                HDmemcpy(&tmp_uint, ptr, sizeof(unsigned int));
+                this_str = (char*)HDmalloc(14);
+                sprintf(this_str, "%u", tmp_uint);
+            }
+            else {
+                /* if (H5Tequal(tid, H5T_NATIVE_INT)) */
+                HDmemcpy(&tmp_int, ptr, sizeof(int));
+                this_str = (char*)HDmalloc(14);
+                sprintf(this_str, "%d", tmp_int);
+            }
+        }
+        else if (sizeof(short) == size) {
+            if(H5T_SGN_NONE == nsign) {
+                /* if (H5Tequal(tid, H5T_NATIVE_USHORT)) */
+                HDmemcpy(&tmp_ushort, ptr, sizeof(unsigned short));
+                this_str = (char*)HDmalloc(9);
+                sprintf(this_str, "%u", tmp_ushort);
+            }
+            else {
+                /* if (H5Tequal(tid, H5T_NATIVE_SHORT)) */
+                HDmemcpy(&tmp_short, ptr, sizeof(short));
+                this_str = (char*)HDmalloc(9);
+                sprintf(this_str, "%d", tmp_short);
+            }
+        }
+        else if (sizeof(long) == size) {
+            if(H5T_SGN_NONE == nsign) {
+                /* if (H5Tequal(tid, H5T_NATIVE_ULONG)) */
+                HDmemcpy(&tmp_ulong, ptr, sizeof(unsigned long));
+                this_str = (char*)HDmalloc(23);
+                sprintf(this_str, "%lu", tmp_ulong);
+            }
+            else {
+                /* if (H5Tequal(tid, H5T_NATIVE_LONG)) */
+                HDmemcpy(&tmp_long, ptr, sizeof(long));
+                this_str = (char*)HDmalloc(23);
+                sprintf(this_str, "%ld", tmp_long);
+            }
+        }
+        else if (sizeof(long long) == size) {
+            if(H5T_SGN_NONE == nsign) {
+                /* if (H5Tequal(tid, H5T_NATIVE_ULLONG)) */
+                HDmemcpy(&tmp_ullong, ptr, sizeof(unsigned long long));
+                this_str = (char*)HDmalloc(25);
+                sprintf(this_str, fmt_ullong, tmp_ullong);
+            }
+            else {
+                /* if (H5Tequal(tid, H5T_NATIVE_LLONG)) */
+                HDmemcpy(&tmp_llong, ptr, sizeof(long long));
+                this_str = (char*)HDmalloc(25);
+                sprintf(this_str, fmt_llong, tmp_llong);
+            }
+        }
+        break;
+    case H5T_COMPOUND:
+    {
+        unsigned i;
+        n = H5Tget_nmembers(tid);
+        h5str_append(str, " {");
+
+        for (i = 0; i < n; i++) {
+            offset = H5Tget_member_offset(tid, i);
+            mtid = H5Tget_member_type(tid, i);
+            h5str_sprintf(str, container, mtid, cptr + offset, expand_data);
+            if (i < n - 1)
+                h5str_append(str, ", ");
+            H5Tclose(mtid);
+        }
+        h5str_append(str, "} ");
+    }
+    break;
+    case H5T_ENUM:
+    {
+        char enum_name[1024];
+        if (H5Tenum_nameof(tid, ptr, enum_name, sizeof enum_name) >= 0) {
+            h5str_append(str, enum_name);
+        }
+        else {
+            size_t i;
+            nll = H5Tget_size(tid);
+            this_str = (char*)HDmalloc(4 * (nll + 1));
+
+            if (1 == nll) {
+                sprintf(this_str, "0x%02x", ucptr[0]);
+            }
+            else {
+                for (i = 0; i < (int)nll; i++)
+                    sprintf(this_str, "%s%02x", i ? ":" : "", ucptr[i]);
+            }
+        }
+    }
+    break;
+    case H5T_REFERENCE:
+        if (h5str_is_zero(ptr, size)) {
+            h5str_append(str, "NULL");
+        }
+        else {
+            if (H5R_DSET_REG_REF_BUF_SIZE == size) {
+                /* if (H5Tequal(tid, H5T_STD_REF_DSETREG)) */
+                /*
+                 * Dataset region reference --
+                 * show the type and the referenced object
+                 */
+                char         ref_name[1024];
+                hid_t        region_obj;
+                hid_t        region;
+                H5S_sel_type region_type;
+
+                /* get name of the dataset the region reference points to using H5Rget_name */
+                region_obj = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, ptr);
+                if (region_obj >= 0) {
+                    region = H5Rget_region(container, H5R_DATASET_REGION, ptr);
+                    if (region >= 0) {
+                        if(expand_data) {
+                            region_type = H5Sget_select_type(region);
+                            if(region_type==H5S_SEL_POINTS) {
+                                h5str_dump_region_points_data(str, region, region_obj);
+                            }
+                            else {
+                                h5str_dump_region_blocks_data(str, region, region_obj);
+                            }
+                        }
+                        else {
+                            if(H5Rget_name(region_obj, H5R_DATASET_REGION, ptr, (char*)ref_name, 1024) >= 0) {
+                                h5str_append(str, ref_name);
+                            }
+
+                            region_type = H5Sget_select_type(region);
+
+                            if(region_type==H5S_SEL_POINTS) {
+                                h5str_append(str, " REGION_TYPE POINT");
+                                h5str_dump_region_points(str, region, region_obj);
+                            }
+                            else {
+                                h5str_append(str, " REGION_TYPE BLOCK");
+                                h5str_dump_region_blocks(str, region, region_obj);
+                            }
+                        }
+
+                        H5Sclose(region);
+                    }
+                    H5Dclose(region_obj);
+                }
+            }
+            else if (H5R_OBJ_REF_BUF_SIZE == size) {
+                /* if (H5Tequal(tid, H5T_STD_REF_OBJ)) */
+                /*
+                 * Object references -- show the type and OID of the referenced
+                 * object.
+                 */
+                H5O_info_t  oi;
+                hid_t       obj;
+
+                this_str = (char*)HDmalloc(64);
+                obj = H5Rdereference2(container, H5P_DEFAULT, H5R_OBJECT, ptr);
+                H5Oget_info(obj, &oi);
+
+                /* Print object data and close object */
+                sprintf(this_str, "%u-%lu", (unsigned) oi.type, oi.addr);
+                H5Oclose(obj);
+            }
+        }
+        break;
+    case H5T_ARRAY:
+    {
+        int rank = 0;
+        hsize_t i, dims[H5S_MAX_RANK], total_elmts;
+        h5str_append(str, "[ ");
+
+        mtid = H5Tget_super(tid);
+        size = H5Tget_size(mtid);
+        rank = H5Tget_array_ndims(tid);
+
+        H5Tget_array_dims2(tid, dims);
+
+        total_elmts = 1;
+        for (i = 0; i < rank; i++)
+            total_elmts *= dims[i];
+
+        for (i = 0; i < total_elmts; i++) {
+            h5str_sprintf(str, container, mtid, cptr + i * size, expand_data);
+            if (i < total_elmts - 1)
+                h5str_append(str, ", ");
+        }
+        H5Tclose(mtid);
+        h5str_append(str, "] ");
+    }
+    break;
+    case H5T_VLEN:
+    {
+        unsigned int i;
+        mtid = H5Tget_super(tid);
+        size = H5Tget_size(mtid);
+
+        vlptr = (hvl_t *) cptr;
+
+        nll = vlptr->len;
+        for (i = 0; i < (int)nll; i++) {
+            h5str_sprintf(str, container, mtid, ((char *) (vlptr->p)) + i * size, expand_data);
+            if (i < (int)nll - 1)
+                h5str_append(str, ", ");
+        }
+        H5Tclose(mtid);
+    }
+    break;
+
+    default:
+    {
+        /* All other types get printed as hexadecimal */
+        size_t i;
+        nll = H5Tget_size(tid);
+        this_str = (char*)HDmalloc(4 * (nll + 1));
+
+        if (1 == nll) {
+            sprintf(this_str, "0x%02x", ucptr[0]);
+        }
+        else {
+            for (i = 0; i < (int)nll; i++)
+                sprintf(this_str, "%s%02x", i ? ":" : "", ucptr[i]);
+        }
+    }
+    break;
+    } /* end switch */
+
+    if (this_str) {
+        h5str_append(str, this_str);
+        this_strlen = HDstrlen(str->s);
+        HDfree(this_str);
+    } /* end if */
+
+    return this_strlen;
+} /* end h5str_sprintf */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print the data values from a dataset referenced by region blocks.
+ *
+ * Description:
+ *      This is a special case subfunction to print the data in a region reference of type blocks.
+ *
+ * Return:
+ *      The function returns FAIL if there was an error, otherwise SUCEED
+ *-------------------------------------------------------------------------
+ */
+static int
+h5str_print_region_data_blocks(hid_t region_id,
+        h5str_t *str, int ndims, hid_t type_id, hssize_t nblocks, hsize_t *ptdata)
+{
+    hsize_t     *dims1 = NULL;
+    hsize_t     *start = NULL;
+    hsize_t     *count = NULL;
+    hsize_t      blkndx;
+    hsize_t      total_size[H5S_MAX_RANK];
+    unsigned int region_flags; /* buffer extent flags */
+    hsize_t      numelem;
+    hsize_t      numindex;
+    size_t       jndx;
+    unsigned     indx;
+    size_t       type_size;
+    int          ret_value = SUCCEED;
+    hid_t        mem_space = -1;
+    hid_t        sid1 = -1;
+    void        *region_buf = NULL;
+
+    /* Get the dataspace of the dataset */
+    if((sid1 = H5Dget_space(region_id)) >= 0) {
+
+        /* Allocate space for the dimension array */
+        if((dims1 = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+
+            /* find the dimensions of each data space from the block coordinates */
+            numelem = 1;
+            for (jndx = 0; jndx < ndims; jndx++) {
+                dims1[jndx] = ptdata[jndx + (size_t)ndims] - ptdata[jndx] + 1;
+                numelem = dims1[jndx] * numelem;
+            } /* end for */
+
+            /* Create dataspace for reading buffer */
+            if((mem_space = H5Screate_simple(ndims, dims1, NULL)) >= 0) {
+                if((type_size = H5Tget_size(type_id)) > 0) {
+                    if((region_buf = HDmalloc(type_size * (size_t)numelem)) != NULL) {
+                        /* Select (x , x , ..., x ) x (y , y , ..., y ) hyperslab for reading memory dataset */
+                        /*          1   2        n      1   2        n                                       */
+                        if((start = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+                            if((count = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+                                for (blkndx = 0; blkndx < nblocks; blkndx++) {
+                                    for (indx = 0; indx < ndims; indx++) {
+                                        start[indx] = ptdata[indx + blkndx * (hsize_t)ndims * 2];
+                                        count[indx] = dims1[indx];
+                                    } /* end for */
+
+                                    if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) >= 0) {
+                                        if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) >= 0) {
+                                            if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) {
+                                                for (numindex = 0; numindex < numelem; numindex++) {
+                                                    h5str_sprintf(str, region_id, type_id, ((char*)region_buf + numindex * type_size), 1);
+
+                                                    if (numindex + 1 < numelem)
+                                                        h5str_append(str, ", ");
+                                                } /* end for (jndx = 0; jndx < numelem; jndx++, region_elmtno++, ctx.cur_elmt++) */
+                                            } /* end if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) */
+                                        } /* end if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) >= 0) */
+                                    } /* end if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) >= 0) */
+                                } /* end for (blkndx = 0; blkndx < nblocks; blkndx++) */
+
+                                HDfree(count);
+                            } /* end if((count = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+                            else
+                                ret_value = -1;
+
+                            HDfree(start);
+                        } /* end if((start = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+                        else
+                            ret_value = -1;
+
+                        HDfree(region_buf);
+                    } /* end if((region_buf = HDmalloc(type_size * (size_t)numelem)) != NULL) */
+                    else
+                        ret_value = -1;
+                } /* end if((type_size = H5Tget_size(type_id)) > 0) */
+                else
+                    ret_value = -1;
+
+                if(H5Sclose(mem_space) < 0)
+                    ret_value = -1;
+            } /* end if((mem_space = H5Screate_simple(ndims, dims1, NULL)) >= 0) */
+            else
+                ret_value = -1;
+
+            HDfree(dims1);
+        } /* end if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+        else
+            ret_value = -1;
+
+        if(H5Sclose(sid1) < 0)
+            ret_value = -1;
+    } /* end if((sid1 = H5Dget_space(region_id)) >= 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end h5str_print_region_data_blocks */
+
+int
+h5str_dump_region_blocks_data(h5str_t *str, hid_t region, hid_t region_id)
+{
+    int        ret_value = 0;
+    hssize_t   nblocks;
+    hsize_t    alloc_size;
+    hsize_t   *ptdata;
+    hid_t      dtype = -1;
+    hid_t      type_id = -1;
+    char       tmp_str[256];
+    int        ndims = H5Sget_simple_extent_ndims(region);
+
+    /*
+     * This function fails if the region does not have blocks.
+     */
+    H5E_BEGIN_TRY {
+        nblocks = H5Sget_select_hyper_nblocks(region);
+    } H5E_END_TRY;
+
+    /* Print block information */
+    if (nblocks > 0) {
+        int i;
+
+        alloc_size = (hsize_t)nblocks * (hsize_t)ndims * 2 * (hsize_t)sizeof(ptdata[0]);
+        if (alloc_size == (hsize_t)((size_t) alloc_size)) {
+            ptdata = (hsize_t *)HDmalloc((size_t) alloc_size);
+            H5Sget_select_hyper_blocklist(region, (hsize_t) 0,
+                    (hsize_t) nblocks, ptdata);
+
+
+            if((dtype = H5Dget_type(region_id)) >= 0) {
+                if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) {
+
+                    h5str_print_region_data_blocks(region_id, str, ndims, type_id, nblocks, ptdata);
+
+                    if(H5Tclose(type_id) < 0)
+                        ret_value = -1;
+                } /* end if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) */
+                else
+                    ret_value = -1;
+
+                if(H5Tclose(dtype) < 0)
+                    ret_value = -1;
+            } /* end if((dtype = H5Dget_type(region_id)) >= 0) */
+            else
+                ret_value = -1;
+            HDfree(ptdata);
+        } /* if (alloc_size == (hsize_t)((size_t)alloc_size)) */
+    } /* if (nblocks > 0) */
+
+    return ret_value;
+} /* end h5str_dump_region_blocks_data */
+
+static int
+h5str_dump_region_blocks(h5str_t *str, hid_t region, hid_t region_id)
+{
+    int        ret_value = 0;
+    hssize_t   nblocks;
+    hsize_t    alloc_size;
+    hsize_t   *ptdata;
+    hid_t      dtype = -1;
+    hid_t      type_id = -1;
+    char       tmp_str[256];
+    int        ndims = H5Sget_simple_extent_ndims(region);
+
+    /*
+     * This function fails if the region does not have blocks.
+     */
+    H5E_BEGIN_TRY {
+        nblocks = H5Sget_select_hyper_nblocks(region);
+    } H5E_END_TRY;
+
+    /* Print block information */
+    if (nblocks > 0) {
+        int i;
+
+        alloc_size = (hsize_t)nblocks * (hsize_t)ndims * 2 * (hsize_t)sizeof(ptdata[0]);
+        if (alloc_size == (hsize_t)((size_t) alloc_size)) {
+            ptdata = (hsize_t *)HDmalloc((size_t) alloc_size);
+            H5Sget_select_hyper_blocklist(region, (hsize_t) 0,
+                    (hsize_t) nblocks, ptdata);
+
+            h5str_append(str, " {");
+            for (i = 0; i < nblocks; i++) {
+                int j;
+
+                h5str_append(str, " ");
+
+                /* Start coordinates and opposite corner */
+                for (j = 0; j < ndims; j++) {
+                    tmp_str[0] = '\0';
+                    sprintf(tmp_str, "%s%lu", j ? "," : "(",
+                            (unsigned long) ptdata[i * 2 * ndims + j]);
+                    h5str_append(str, tmp_str);
+                }
+
+                for (j = 0; j < ndims; j++) {
+                    tmp_str[0] = '\0';
+                    sprintf(tmp_str, "%s%lu", j ? "," : ")-(",
+                            (unsigned long) ptdata[i * 2 * ndims + j + ndims]);
+                    h5str_append(str, tmp_str);
+                }
+                h5str_append(str, ") ");
+                tmp_str[0] = '\0';
+            }
+            h5str_append(str, " }");
+
+            HDfree(ptdata);
+        } /* if (alloc_size == (hsize_t)((size_t)alloc_size)) */
+    } /* if (nblocks > 0) */
+
+    return ret_value;
+} /* end h5str_dump_region_blocks */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print the data values from a dataset referenced by region points.
+ *
+ * Description:
+ *      This is a special case subfunction to print the data in a region reference of type points.
+ *
+ * Return:
+ *      The function returns FAIL on error, otherwise SUCCEED
+ *-------------------------------------------------------------------------
+ */
+static int
+h5str_print_region_data_points(hid_t region_space, hid_t region_id,
+        h5str_t *str, int ndims, hid_t type_id, hssize_t npoints, hsize_t *ptdata)
+{
+    hsize_t        *dims1 = NULL;
+    hsize_t         total_size[H5S_MAX_RANK];
+    size_t          jndx;
+    unsigned        indx;
+    size_t          type_size;
+    int             ret_value = SUCCEED;
+    unsigned int    region_flags; /* buffer extent flags */
+    hid_t           mem_space = -1;
+    void           *region_buf = NULL;
+    char            tmp_str[256];
+
+    /* Allocate space for the dimension array */
+    if((dims1 = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+
+        dims1[0] = (hsize_t)npoints;
+
+        /* Create dataspace for reading buffer */
+        if((mem_space = H5Screate_simple(1, dims1, NULL)) >= 0) {
+
+            if((type_size = H5Tget_size(type_id)) > 0) {
+
+                if((region_buf = HDmalloc(type_size * (size_t)npoints)) != NULL) {
+
+                    if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) >= 0) {
+
+                        for (jndx = 0; jndx < npoints; jndx++) {
+                            if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) {
+
+                                h5str_sprintf(str, region_id, type_id, ((char*)region_buf + jndx * type_size), 1);
+
+                                if (jndx + 1 < npoints)
+                                    h5str_append(str, ", ");
+
+                            } /* end if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) */
+                        } /* end for (jndx = 0; jndx < npoints; jndx++, elmtno++) */
+                    } /* end if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) >= 0) */
+                    else
+                        ret_value = -1;
+
+                    HDfree(region_buf);
+                } /* end if((region_buf = HDmalloc(type_size * (size_t)npoints)) != NULL) */
+                else
+                    ret_value = -1;
+            } /* end if((type_size = H5Tget_size(type_id)) > 0) */
+            else
+                ret_value = -1;
+
+            if(H5Sclose(mem_space) < 0)
+                ret_value = -1;
+        } /* end if((mem_space = H5Screate_simple(1, dims1, NULL)) >= 0) */
+        else
+            ret_value = -1;
+        HDfree(dims1);
+    } /* end if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end h5str_print_region_data_points */
+
+int
+h5str_dump_region_points_data(h5str_t *str, hid_t region, hid_t region_id)
+{
+    int        ret_value = 0;
+    hssize_t   npoints;
+    hsize_t    alloc_size;
+    hsize_t   *ptdata;
+    char       tmp_str[256];
+    hid_t      dtype = -1;
+    hid_t      type_id = -1;
+    int        ndims = H5Sget_simple_extent_ndims(region);
+
+    /*
+     * This function fails if the region does not have points.
+     */
+    H5E_BEGIN_TRY {
+        npoints = H5Sget_select_elem_npoints(region);
+    } H5E_END_TRY;
+
+    /* Print point information */
+    if (npoints > 0) {
+        int i;
+
+        alloc_size = (hsize_t)npoints * (hsize_t)ndims * (hsize_t)sizeof(ptdata[0]);
+        if (alloc_size == (hsize_t)((size_t) alloc_size)) {
+            ptdata = (hsize_t *)HDmalloc((size_t) alloc_size);
+            H5Sget_select_elem_pointlist(region, (hsize_t) 0,
+                    (hsize_t) npoints, ptdata);
+
+            if((dtype = H5Dget_type(region_id)) >= 0) {
+                if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) {
+
+                    h5str_print_region_data_points(region, region_id,
+                            str, ndims, type_id, npoints, ptdata);
+
+                    if(H5Tclose(type_id) < 0)
+                        ret_value = -1;
+                } /* end if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) */
+                else
+                    ret_value = -1;
+
+                if(H5Tclose(dtype) < 0)
+                    ret_value = -1;
+            } /* end if((dtype = H5Dget_type(region_id)) >= 0) */
+            else
+                ret_value = -1;
+            HDfree(ptdata);
+        }
+    }
+
+    return ret_value;
+} /* end h5str_dump_region_points_data */
+
+static int
+h5str_dump_region_points(h5str_t *str, hid_t region, hid_t region_id)
+{
+    int        ret_value = 0;
+    hssize_t   npoints;
+    hsize_t    alloc_size;
+    hsize_t   *ptdata;
+    char       tmp_str[256];
+    hid_t      dtype = -1;
+    hid_t      type_id = -1;
+    int        ndims = H5Sget_simple_extent_ndims(region);
+
+    /*
+     * This function fails if the region does not have points.
+     */
+    H5E_BEGIN_TRY {
+        npoints = H5Sget_select_elem_npoints(region);
+    } H5E_END_TRY;
+
+    /* Print point information */
+    if (npoints > 0) {
+        int i;
+
+        alloc_size = (hsize_t)npoints * (hsize_t)ndims * (hsize_t)sizeof(ptdata[0]);
+        if (alloc_size == (hsize_t)((size_t) alloc_size)) {
+            ptdata = (hsize_t *)HDmalloc((size_t) alloc_size);
+            H5Sget_select_elem_pointlist(region, (hsize_t) 0,
+                    (hsize_t) npoints, ptdata);
+
+            h5str_append(str, " {");
+            for (i = 0; i < npoints; i++) {
+                int j;
+
+                h5str_append(str, " ");
+
+                for (j = 0; j < ndims; j++) {
+                    tmp_str[0] = '\0';
+                    sprintf(tmp_str, "%s%lu", j ? "," : "(",
+                            (unsigned long) (ptdata[i * ndims + j]));
+                    h5str_append(str, tmp_str);
+                } /* end for (j = 0; j < ndims; j++) */
+
+                h5str_append(str, ") ");
+            } /* end for (i = 0; i < npoints; i++) */
+            h5str_append(str, " }");
+
+            HDfree(ptdata);
+        } /* end if (alloc_size == (hsize_t)((size_t) alloc_size)) */
+    } /* end if (npoints > 0) */
+
+    return ret_value;
+} /* end h5str_dump_region_points */
+
+static int
+h5str_is_zero(const void *_mem, size_t size) {
+    const unsigned char *mem = (const unsigned char *) _mem;
+
+    while (size-- > 0)
+        if (mem[size])
+            return 0;
+
+    return 1;
+} /* end h5str_is_zero */
+
+/*-------------------------------------------------------------------------
+ * Function: h5str_detect_vlen_str
+ *
+ * Purpose: Recursive check for variable length string of a datatype.
+ *
+ * Return:
+ *    TRUE : type conatains any variable length string
+ *    FALSE : type doesn't contain any variable length string
+ *    Negative value: error occur
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+h5str_detect_vlen_str(hid_t tid)
+{
+    H5T_class_t tclass = H5T_NO_CLASS;
+    htri_t ret = 0;
+
+    ret = H5Tis_variable_str(tid);
+    if((ret == 1) || (ret < 0))
+        goto done;
+
+    tclass = H5Tget_class(tid);
+    if(tclass == H5T_ARRAY || tclass == H5T_VLEN) {
+        hid_t btid = H5Tget_super(tid);
+
+        if(btid < 0) {
+            ret = (htri_t)btid;
+            goto done;
+        } /* end if */
+        ret = h5str_detect_vlen_str(btid);
+        if((ret == 1) || (ret < 0)) {
+            H5Tclose(btid);
+            goto done;
+        } /* end if */
+    } /* end if */
+    else if(tclass == H5T_COMPOUND) {
+        unsigned i = 0;
+        int n = H5Tget_nmembers(tid);
+
+        if(n < 0) {
+            n = ret;
+            goto done;
+        } /* end if */
+
+        for(i = 0; i < n; i++) {
+            hid_t mtid = H5Tget_member_type(tid, i);
+
+            ret = h5str_detect_vlen_str(mtid);
+            if((ret == 1) || (ret < 0)) {
+                H5Tclose(mtid);
+                goto done;
+            }
+            H5Tclose(mtid);
+        } /* end for */
+    } /* end else */
+
+done:
+    return ret;
+} /* end h5str_detect_vlen_str */
+
+/*-------------------------------------------------------------------------
+ * Function: h5str_get_native_type
+ *
+ * Purpose: Wrapper around H5Tget_native_type() to work around
+ *          Problems with bitfields.
+ *
+ * Return: Success:    datatype ID
+ *         Failure:    FAIL
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+h5str_get_native_type(hid_t type)
+{
+    hid_t p_type;
+    H5T_class_t type_class;
+
+    type_class = H5Tget_class(type);
+    if(type_class==H5T_BITFIELD)
+        p_type=H5Tcopy(type);
+    else
+        p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT);
+
+    return(p_type);
+} /* end h5str_get_native_type */
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5str_get_little_endian_type
+ *
+ * Purpose: Get a little endian type from a file type
+ *
+ * Return: Success:    datatype ID
+ *         Failure:    FAIL
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+h5str_get_little_endian_type(hid_t tid)
+{
+    hid_t       p_type=-1;
+    H5T_class_t type_class;
+    size_t      size;
+    H5T_sign_t  sign;
+
+    type_class = H5Tget_class(tid);
+    size       = H5Tget_size(tid);
+    sign       = H5Tget_sign(tid);
+
+    switch( type_class )
+    {
+    case H5T_INTEGER:
+    {
+        if ( size == 1 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I8LE);
+        else if ( size == 2 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I16LE);
+        else if ( size == 4 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I32LE);
+        else if ( size == 8 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I64LE);
+        else if ( size == 1 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U8LE);
+        else if ( size == 2 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U16LE);
+        else if ( size == 4 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U32LE);
+        else if ( size == 8 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U64LE);
+    }
+    break;
+
+    case H5T_FLOAT:
+        if ( size == 4)
+            p_type=H5Tcopy(H5T_IEEE_F32LE);
+        else if ( size == 8)
+            p_type=H5Tcopy(H5T_IEEE_F64LE);
+        break;
+
+    case H5T_TIME:
+    case H5T_BITFIELD:
+    case H5T_OPAQUE:
+    case H5T_STRING:
+    case H5T_COMPOUND:
+    case H5T_REFERENCE:
+    case H5T_ENUM:
+    case H5T_VLEN:
+    case H5T_ARRAY:
+        break;
+
+    default:
+        break;
+
+    }
+
+    return(p_type);
+} /* end h5str_get_little_endian_type */
+
+/*-------------------------------------------------------------------------
+ * Function: h5str_get_big_endian_type
+ *
+ * Purpose: Get a big endian type from a file type
+ *
+ * Return: Success:    datatype ID
+ *         Failure:    FAIL
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+h5str_get_big_endian_type(hid_t tid)
+{
+    hid_t       p_type=-1;
+    H5T_class_t type_class;
+    size_t      size;
+    H5T_sign_t  sign;
+
+    type_class = H5Tget_class(tid);
+    size       = H5Tget_size(tid);
+    sign       = H5Tget_sign(tid);
+
+    switch( type_class )
+    {
+    case H5T_INTEGER:
+    {
+        if ( size == 1 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I8BE);
+        else if ( size == 2 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I16BE);
+        else if ( size == 4 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I32BE);
+        else if ( size == 8 && sign == H5T_SGN_2)
+            p_type=H5Tcopy(H5T_STD_I64BE);
+        else if ( size == 1 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U8BE);
+        else if ( size == 2 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U16BE);
+        else if ( size == 4 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U32BE);
+        else if ( size == 8 && sign == H5T_SGN_NONE)
+            p_type=H5Tcopy(H5T_STD_U64BE);
+    }
+    break;
+
+    case H5T_FLOAT:
+        if ( size == 4)
+            p_type=H5Tcopy(H5T_IEEE_F32BE);
+        else if ( size == 8)
+            p_type=H5Tcopy(H5T_IEEE_F64BE);
+        break;
+
+    case H5T_TIME:
+    case H5T_BITFIELD:
+    case H5T_OPAQUE:
+    case H5T_STRING:
+    case H5T_COMPOUND:
+    case H5T_REFERENCE:
+    case H5T_ENUM:
+    case H5T_VLEN:
+    case H5T_ARRAY:
+        break;
+
+    default:
+        break;
+
+    }
+
+    return(p_type);
+} /* end h5str_get_big_endian_type */
+
+/*-------------------------------------------------------------------------
+ * Function: h5str_detect_vlen
+ *
+ * Purpose: Recursive check for any variable length data in given type.
+ *
+ * Return:
+ *    1 : type conatains any variable length data
+ *    0 : type doesn't contain any variable length data
+ *    Negative value: error occur
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+h5str_detect_vlen(hid_t tid)
+{
+    htri_t ret;
+
+    /* recursive detect any vlen data values in type (compound, array ...) */
+    ret = H5Tdetect_class(tid, H5T_VLEN);
+    if((ret == 1) || (ret < 0))
+        goto done;
+
+    /* recursive detect any vlen string in type (compound, array ...) */
+    ret = h5str_detect_vlen_str(tid);
+    if((ret == 1) || (ret < 0))
+        goto done;
+
+done:
+    return ret;
+} /* end h5str_detect_vlen */
+
+/*-------------------------------------------------------------------------
+ * Function: render_bin_output
+ *
+ * Purpose: Write one element of memory buffer to a binary file stream
+ *
+ * Return: Success:    SUCCEED
+ *         Failure:    FAIL
+ *-------------------------------------------------------------------------
+ */
+static int
+h5str_render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t block_nelmts)
+{
+    int                ret_value = 0;
+    unsigned char     *mem  = (unsigned char*)_mem;
+    size_t             size;   /* datum size */
+    hsize_t            block_index;
+    H5T_class_t        type_class;
+
+    if((size = H5Tget_size(tid)) > 0) {
+
+        if((type_class = H5Tget_class(tid)) >= 0) {
+
+            switch (type_class) {
+                case H5T_INTEGER:
+                case H5T_FLOAT:
+                case H5T_ENUM:
+                    block_index = block_nelmts * size;
+                    while(block_index > 0) {
+                        size_t bytes_in        = 0;    /* # of bytes to write  */
+                        size_t bytes_wrote     = 0;    /* # of bytes written   */
+                        size_t item_size       = size;    /* size of items in bytes */
+
+                        if(block_index > sizeof(size_t))
+                            bytes_in = sizeof(size_t);
+                        else
+                            bytes_in = (size_t)block_index;
+
+                        bytes_wrote = fwrite(mem, 1, bytes_in, stream);
+
+                        if(bytes_wrote != bytes_in || (0 == bytes_wrote && ferror(stream))) {
+                            ret_value = -1;
+                            break;
+                        }
+
+                        block_index -= (hsize_t)bytes_wrote;
+                        mem = mem + bytes_wrote;
+                    }
+                    break;
+                case H5T_STRING:
+                {
+                    unsigned int    i;
+                    H5T_str_t       pad;
+                    char           *s;
+                    unsigned char   tempuchar;
+
+                    pad = H5Tget_strpad(tid);
+
+                    for (block_index = 0; block_index < block_nelmts; block_index++) {
+                        mem = ((unsigned char*)_mem) + block_index * size;
+
+                        if (H5Tis_variable_str(tid)) {
+                            s = *(char**) mem;
+                            if (s != NULL)
+                                size = strlen(s);
+                        }
+                        else {
+                            s = (char *) mem;
+                        }
+                        for (i = 0; i < size && (s[i] || pad != H5T_STR_NULLTERM); i++) {
+                            HDmemcpy(&tempuchar, &s[i], sizeof(unsigned char));
+                            if (1 != fwrite(&tempuchar, sizeof(unsigned char), 1, stream)) {
+                                ret_value = -1;
+                                break;
+                            }
+                        } /* i */
+                        if(ret_value < 0)
+                            break;
+                    } /* for (block_index = 0; block_index < block_nelmts; block_index++) */
+                }
+                break;
+                case H5T_COMPOUND:
+                {
+                    unsigned j;
+                    hid_t    memb;
+                    unsigned nmembs;
+                    size_t   offset;
+
+                    nmembs = (unsigned)H5Tget_nmembers(tid);
+
+                    for (block_index = 0; block_index < block_nelmts; block_index++) {
+                        mem = ((unsigned char*)_mem) + block_index * size;
+                        for (j = 0; j < nmembs; j++) {
+                            offset = H5Tget_member_offset(tid, j);
+                            memb   = H5Tget_member_type(tid, j);
+
+                            if (h5str_render_bin_output(stream, container, memb, mem + offset, 1) < 0) {
+                                H5Tclose(memb);
+                                ret_value = -1;
+                                break;
+                            }
+
+                            H5Tclose(memb);
+                        }
+                        if(ret_value < 0)
+                            break;
+                    }
+                }
+                break;
+                case H5T_ARRAY:
+                {
+                    int     k, ndims;
+                    hsize_t i, dims[H5S_MAX_RANK], temp_nelmts, nelmts;
+                    hid_t   memb;
+
+                    /* get the array's base datatype for each element */
+                    memb = H5Tget_super(tid);
+                    ndims = H5Tget_array_ndims(tid);
+                    H5Tget_array_dims2(tid, dims);
+
+                    /* calculate the number of array elements */
+                    for (k = 0, nelmts = 1; k < ndims; k++) {
+                        temp_nelmts = nelmts;
+                        temp_nelmts *= dims[k];
+                        nelmts = (size_t) temp_nelmts;
+                    }
+
+                    for (block_index = 0; block_index < block_nelmts; block_index++) {
+                        mem = ((unsigned char*)_mem) + block_index * size;
+                        /* dump the array element */
+                        if (h5str_render_bin_output(stream, container, memb, mem, nelmts) < 0) {
+                            ret_value = -1;
+                            break;
+                        }
+                    }
+                    H5Tclose(memb);
+                }
+                break;
+                case H5T_VLEN:
+                {
+                    unsigned int i;
+                    hsize_t      nelmts;
+                    hid_t        memb;
+
+                    /* get the VL sequences's base datatype for each element */
+                    memb = H5Tget_super(tid);
+
+                    for (block_index = 0; block_index < block_nelmts; block_index++) {
+                        mem = ((unsigned char*)_mem) + block_index * size;
+                        /* Get the number of sequence elements */
+                        nelmts = ((hvl_t *) mem)->len;
+
+                        /* dump the array element */
+                        if (h5str_render_bin_output(stream, container, memb, ((char *) (((hvl_t *) mem)->p)), nelmts) < 0) {
+                            ret_value = -1;
+                            break;
+                        }
+                    }
+                    H5Tclose(memb);
+                }
+                break;
+                case H5T_REFERENCE:
+                {
+                    if (H5Tequal(tid, H5T_STD_REF_DSETREG)) {
+                        /* region data */
+                        hid_t   region_id, region_space;
+                        H5S_sel_type region_type;
+
+                        for (block_index = 0; block_index < block_nelmts; block_index++) {
+                            mem = ((unsigned char*)_mem) + block_index * size;
+                            region_id = H5Rdereference2(container, H5P_DEFAULT, H5R_DATASET_REGION, mem);
+                            if (region_id >= 0) {
+                                region_space = H5Rget_region(container, H5R_DATASET_REGION, mem);
+                                if (region_space >= 0) {
+                                    region_type = H5Sget_select_type(region_space);
+                                    if(region_type == H5S_SEL_POINTS)
+                                        ret_value = render_bin_output_region_points(stream, region_space, region_id, container);
+                                    else
+                                        ret_value = render_bin_output_region_blocks(stream, region_space, region_id, container);
+                                    H5Sclose(region_space);
+                                } /* end if (region_space >= 0) */
+                                H5Dclose(region_id);
+                            } /* end if (region_id >= 0) */
+                            if(ret_value < 0)
+                                break;
+                        }
+                    }
+                    else if (H5Tequal(tid, H5T_STD_REF_OBJ)) {
+                        ;
+                    }
+                }
+                break;
+                default:
+                    for (block_index = 0; block_index < block_nelmts; block_index++) {
+                        mem = ((unsigned char*)_mem) + block_index * size;
+                        if (size != fwrite(mem, sizeof(char), size, stream)) {
+                            ret_value = -1;
+                            break;
+                        }
+                    }
+                    break;
+            }
+        } /* end if((type_class = H5Tget_class(tid)) >= 0) */
+        else
+            ret_value = -1;
+    } /* end if((size = H5Tget_size(tid)) > 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end h5str_render_bin_output */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print the data values from a dataset referenced by region blocks.
+ *
+ * Description:
+ *      This is a special case subfunction to print the data in a region reference of type blocks.
+ *
+ * Return:
+ *      The function returns FAIL if there was an error, otherwise SUCEED
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+render_bin_output_region_data_blocks(FILE *stream, hid_t region_id,
+    hid_t container, int ndims, hid_t type_id, hssize_t nblocks, hsize_t *ptdata)
+{
+    hsize_t     *dims1 = NULL;
+    hsize_t     *start = NULL;
+    hsize_t     *count = NULL;
+    hsize_t      numelem;
+    hsize_t      numindex;
+    hsize_t      total_size[H5S_MAX_RANK];
+    int          jndx;
+    size_t       type_size;
+    hid_t        mem_space = -1;
+    void        *region_buf = NULL;
+    int          blkndx;
+    hid_t        sid1 = -1;
+    int          ret_value = SUCCEED;
+
+    /* Get the dataspace of the dataset */
+    if((sid1 = H5Dget_space(region_id)) >= 0) {
+        /* Allocate space for the dimension array */
+        if((dims1 = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+            /* find the dimensions of each data space from the block coordinates */
+            numelem = 1;
+            for (jndx = 0; jndx < ndims; jndx++) {
+                dims1[jndx] = ptdata[jndx + ndims] - ptdata[jndx] + 1;
+                numelem = dims1[jndx] * numelem;
+            }
+
+            /* Create dataspace for reading buffer */
+            if((mem_space = H5Screate_simple(ndims, dims1, NULL)) >= 0) {
+                if((type_size = H5Tget_size(type_id)) > 0) {
+                    if((region_buf = HDmalloc(type_size * (size_t)numelem)) != NULL) {
+                        /* Select (x , x , ..., x ) x (y , y , ..., y ) hyperslab for reading memory dataset */
+                        /*          1   2        n      1   2        n                                       */
+                        if((start = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+                            if((count = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+                                for (blkndx = 0; blkndx < nblocks; blkndx++) {
+                                    for (jndx = 0; jndx < ndims; jndx++) {
+                                        start[jndx] = ptdata[jndx + blkndx * ndims * 2];
+                                        count[jndx] = dims1[jndx];
+                                    }
+
+                                    if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) >= 0) {
+                                        if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) >= 0) {
+                                            if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) {
+                                                ret_value = h5str_render_bin_output(stream, container, type_id, (char*)region_buf, numelem);
+                                            } /* end if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) >= 0) */
+                                            else {
+                                                ret_value = -1;
+                                                break;
+                                            }
+                                        } /* end if(H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, region_buf) >= 0) */
+                                        else {
+                                            ret_value = -1;
+                                            break;
+                                        }
+                                    } /* end if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) >= 0) */
+                                    else {
+                                        ret_value = -1;
+                                        break;
+                                    }
+                                    /* Render the region data element end */
+                                } /* end for (blkndx = 0; blkndx < nblocks; blkndx++) */
+
+                                HDfree(count);
+                            } /* end if((count = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+                            else
+                                ret_value = -1;
+                            HDfree(start);
+                        } /* end if((start = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+                        else
+                            ret_value = -1;
+                        HDfree(region_buf);
+                    } /* end if((region_buf = HDmalloc(type_size * (size_t)numelem)) != NULL) */
+                    else
+                        ret_value = -1;
+                } /* end if((type_size = H5Tget_size(type_id)) > 0) */
+                else
+                    ret_value = -1;
+
+                if(H5Sclose(mem_space) < 0)
+                    ret_value = -1;
+            } /* end if((mem_space = H5Screate_simple(ndims, dims1, NULL)) >= 0) */
+            else
+                ret_value = -1;
+            HDfree(dims1);
+        } /* end if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) != NULL) */
+        else
+            ret_value = -1;
+        if(H5Sclose(sid1) < 0)
+            ret_value = -1;
+    } /* end if((sid1 = H5Dget_space(region_id)) >= 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end render_bin_output_region_data_blocks */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print some values from a dataset referenced by region blocks.
+ *
+ * Description:
+ *      This is a special case subfunction to dump a region reference using blocks.
+ *
+ * Return:
+ *      The function returns False if ERROR, otherwise True
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+render_bin_output_region_blocks(FILE *stream, hid_t region_space, hid_t region_id, hid_t container)
+{
+    int          ret_value = SUCCEED;
+    hssize_t     nblocks;
+    hsize_t      alloc_size;
+    hsize_t     *ptdata = NULL;
+    int          ndims;
+    hid_t        dtype;
+    hid_t        type_id;
+
+    if((nblocks = H5Sget_select_hyper_nblocks(region_space)) > 0) {
+        /* Print block information */
+        if((ndims = H5Sget_simple_extent_ndims(region_space)) >= 0) {
+            alloc_size = (hsize_t)nblocks * (hsize_t)ndims * 2 * (hsize_t)sizeof(ptdata[0]);
+            if((ptdata = (hsize_t*)HDmalloc((size_t)alloc_size)) != NULL) {
+                if(H5Sget_select_hyper_blocklist(region_space, (hsize_t)0, (hsize_t)nblocks, ptdata) >= 0) {
+                    if((dtype = H5Dget_type(region_id)) >= 0) {
+                        if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) {
+                            ret_value = render_bin_output_region_data_blocks(stream, region_id, container, ndims,
+                                    type_id, nblocks, ptdata);
+
+                            if(H5Tclose(type_id) < 0)
+                                ret_value = -1;
+                        } /* end if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) */
+                        else
+                            ret_value = -1;
+
+                        if(H5Tclose(dtype) < 0)
+                            ret_value = -1;
+                    } /* end if((dtype = H5Dget_type(region_id)) >= 0) */
+                    else
+                        ret_value = -1;
+                } /* end if(H5Sget_select_hyper_blocklist(region_space, (hsize_t) 0, (hsize_t) nblocks, ptdata) >= 0) */
+                else
+                    ret_value = -1;
+
+                HDfree(ptdata);
+            } /* end if((ptdata = (hsize_t*) HDmalloc((size_t) alloc_size)) != NULL) */
+            else
+                ret_value = -1;
+        } /* end if((ndims = H5Sget_simple_extent_ndims(region_space)) >= 0) */
+        else
+            ret_value = -1;
+    } /* end if((nblocks = H5Sget_select_hyper_nblocks(region_space)) > 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end render_bin_output_region_blocks */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print the data values from a dataset referenced by region points.
+ *
+ * Description:
+ *      This is a special case subfunction to print the data in a region reference of type points.
+ *
+ * Return:
+ *      The function returns FAIL on error, otherwise SUCCEED
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+render_bin_output_region_data_points(FILE *stream, hid_t region_space, hid_t region_id,
+        hid_t container, int ndims, hid_t type_id, hssize_t npoints, hsize_t *ptdata)
+{
+    hsize_t *dims1 = NULL;
+    int      jndx;
+    size_t   type_size;
+    hid_t    mem_space = -1;
+    void    *region_buf = NULL;
+    int      ret_value = SUCCEED;
+
+    if((type_size = H5Tget_size(type_id)) > 0) {
+        if((region_buf = HDmalloc(type_size * (size_t)npoints)) != NULL) {
+            /* Allocate space for the dimension array */
+            if((dims1 = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)ndims)) != NULL) {
+                dims1[0] = (hsize_t)npoints;
+                if((mem_space = H5Screate_simple(1, dims1, NULL)) >= 0) {
+                    if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) >= 0) {
+                        if(H5Sget_simple_extent_dims(region_space, dims1, NULL) >= 0) {
+                            ret_value = h5str_render_bin_output(stream, container, type_id, (char*)region_buf, (hsize_t)npoints);
+                        } /* end if(H5Sget_simple_extent_dims(region_space, dims1, NULL) >= 0) */
+                        else
+                            ret_value = -1;
+                    } /* end if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) >= 0) */
+                    else
+                        ret_value = -1;
+                } /* end if((mem_space = H5Screate_simple(1, dims1, NULL)) >= 0) */
+                else
+                    ret_value = -1;
+
+                HDfree(dims1);
+            } /* end if((dims1 = (hsize_t *) malloc(sizeof(hsize_t) * ndims)) != NULL) */
+            else
+                ret_value = -1;
+            HDfree(region_buf);
+        } /* end if((region_buf = malloc(type_size * (size_t)npoints)) != NULL) */
+        else
+            ret_value = -1;
+
+        if(H5Sclose(mem_space) < 0)
+            ret_value = -1;
+    } /* end if((type_size = H5Tget_size(type_id)) > 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end render_bin_output_region_data_points */
+
+/*-------------------------------------------------------------------------
+ * Purpose: Print some values from a dataset referenced by region points.
+ *
+ * Description:
+ *      This is a special case subfunction to dump a region reference using points.
+ *
+ * Return:
+ *      The function returns False if the last dimension has been reached, otherwise True
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+render_bin_output_region_points(FILE *stream, hid_t region_space, hid_t region_id, hid_t container)
+{
+    int      ret_value = SUCCEED;
+    hssize_t npoints;
+    hsize_t  alloc_size;
+    hsize_t *ptdata;
+    int      ndims;
+    hid_t    dtype;
+    hid_t    type_id;
+
+    if((npoints = H5Sget_select_elem_npoints(region_space)) > 0) {
+        /* Allocate space for the dimension array */
+        if((ndims = H5Sget_simple_extent_ndims(region_space)) >= 0) {
+            alloc_size = (hsize_t)npoints * (hsize_t)ndims * (hsize_t)sizeof(ptdata[0]);
+            if(NULL != (ptdata = (hsize_t *)HDmalloc((size_t)alloc_size))) {
+                if(H5Sget_select_elem_pointlist(region_space, (hsize_t)0, (hsize_t)npoints, ptdata) >= 0) {
+                    if((dtype = H5Dget_type(region_id)) >= 0) {
+                        if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) {
+                            ret_value = render_bin_output_region_data_points(stream, region_space, region_id,
+                                    container, ndims, type_id, npoints, ptdata);
+
+                            if(H5Tclose(type_id) < 0)
+                                ret_value = -1;
+                        } /* end if((type_id = H5Tget_native_type(dtype, H5T_DIR_DEFAULT)) >= 0) */
+                        else
+                            ret_value = -1;
+
+                        if(H5Tclose(dtype) < 0)
+                            ret_value = -1;
+                    } /* end if((dtype = H5Dget_type(region_id)) >= 0) */
+                    else
+                        ret_value = -1;
+                } /* end if(H5Sget_select_elem_pointlist(region_space, (hsize_t) 0, (hsize_t) npoints, ptdata) >= 0) */
+                else
+                    ret_value = -1;
+
+                HDfree(ptdata);
+            } /* end if(NULL != (ptdata = (hsize_t *)HDmalloc((size_t) alloc_size))) */
+            else
+                ret_value = -1;
+        } /* end if((ndims = H5Sget_simple_extent_ndims(region_space)) >= 0) */
+        else
+            ret_value = -1;
+
+    } /* end if((npoints = H5Sget_select_elem_npoints(region_space)) > 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end render_bin_output_region_points */
+
+int
+h5str_dump_simple_dset(FILE *stream, hid_t dset, int binary_order)
+{
+    int      ret_value = SUCCEED;
+    hid_t               f_space = -1;                  /* file data space */
+    hsize_t             elmtno;                   /* counter  */
+    size_t              i;                        /* counter  */
+    int                 ndims;
+    int                 carry;                    /* counter carry value */
+    hsize_t             zero[8];                  /* vector of zeros */
+    unsigned int        flags;                    /* buffer extent flags */
+    hsize_t             total_size[H5S_MAX_RANK]; /* total size of dataset*/
+
+    /* Print info */
+    size_t              p_type_nbytes;            /* size of memory type */
+    hsize_t             p_nelmts;                 /* total selected elmts */
+
+    /* Stripmine info */
+    hsize_t             sm_size[H5S_MAX_RANK];    /* stripmine size */
+    hsize_t             sm_nbytes;                /* bytes per stripmine */
+    hsize_t             sm_nelmts;                /* elements per stripmine*/
+    unsigned char      *sm_buf = NULL;            /* buffer for raw data */
+    hid_t               sm_space = -1;                 /* stripmine data space */
+
+    /* Hyperslab info */
+    hsize_t             hs_offset[H5S_MAX_RANK];  /* starting offset */
+    hsize_t             hs_size[H5S_MAX_RANK];    /* size this pass */
+    hsize_t             hs_nelmts;                /* elements in request */
+
+    /* VL data special information */
+    unsigned int        vl_data = 0; /* contains VL datatypes */
+    hid_t               p_type = -1;
+    hid_t               f_type = -1;
+
+    if(dset < 0) return -1;
+    f_type = H5Dget_type(dset);
+    if (binary_order == 1)
+        p_type = h5str_get_native_type(f_type);
+    else if (binary_order == 2)
+        p_type = h5str_get_little_endian_type(f_type);
+    else if (binary_order == 3)
+        p_type = h5str_get_big_endian_type(f_type);
+    else
+        p_type = H5Tcopy(f_type);
+
+    H5Tclose(f_type);
+
+    if (p_type >= 0) {
+        if((f_space = H5Dget_space(dset)) >= 0) {
+            ndims = H5Sget_simple_extent_ndims(f_space);
+
+            if ((size_t)ndims <= (sizeof(sm_size)/sizeof(sm_size[0]))) {
+                H5Sget_simple_extent_dims(f_space, total_size, NULL);
+
+                /* calculate the number of elements we're going to print */
+                p_nelmts = 1;
+
+                if (ndims > 0) {
+                    for (i = 0; i < ndims; i++)
+                        p_nelmts *= total_size[i];
+                } /* end if */
+
+                if (p_nelmts > 0) {
+                    /* Check if we have VL data in the dataset's datatype */
+                    if (h5str_detect_vlen(p_type) != 0)
+                        vl_data = 1;
+
+                    /*
+                     * Determine the strip mine size and allocate a buffer. The strip mine is
+                     * a hyperslab whose size is manageable.
+                     */
+                    sm_nbytes = p_type_nbytes = H5Tget_size(p_type);
+
+                    if (ndims > 0) {
+                        for (i = (size_t)ndims; i > 0; --i) {
+                            hsize_t size = H5TOOLS_BUFSIZE / sm_nbytes;
+                            if ( size == 0) /* datum size > H5TOOLS_BUFSIZE */
+                                size = 1;
+                            sm_size[i - 1] = (((total_size[i - 1]) < (size)) ? (total_size[i - 1]) : (size));
+                            sm_nbytes *= sm_size[i - 1];
+                        }
+                    }
+
+                    if(sm_nbytes > 0) {
+                        sm_buf = (unsigned char *)HDmalloc((size_t)sm_nbytes);
+
+                        sm_nelmts = sm_nbytes / p_type_nbytes;
+                        sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
+
+                        /* The stripmine loop */
+                        HDmemset(hs_offset, 0, sizeof hs_offset);
+                        HDmemset(zero, 0, sizeof zero);
+
+                        for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) {
+                            /* Calculate the hyperslab size */
+                            if (ndims > 0) {
+                                for (i = 0, hs_nelmts = 1; i < ndims; i++) {
+                                    hs_size[i] = (((total_size[i] - hs_offset[i]) < (sm_size[i])) ? (total_size[i] - hs_offset[i]) : (sm_size[i]));
+                                    hs_nelmts *= hs_size[i];
+                                }
+
+                                H5Sselect_hyperslab(f_space, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL);
+                                H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL, &hs_nelmts, NULL);
+                            }
+                            else {
+                                H5Sselect_all(f_space);
+                                H5Sselect_all(sm_space);
+                                hs_nelmts = 1;
+                            }
+
+                            /* Read the data */
+                            if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) >= 0) {
+
+                                if (binary_order == 99)
+                                    ret_value = h5tools_dump_simple_data(stream, dset, p_type, sm_buf, hs_nelmts);
+                                else
+                                    ret_value = h5str_render_bin_output(stream, dset, p_type, sm_buf, hs_nelmts);
+
+                                /* Reclaim any VL memory, if necessary */
+                                if (vl_data)
+                                    H5Dvlen_reclaim(p_type, sm_space, H5P_DEFAULT, sm_buf);
+                            }
+                            else {
+                                ret_value = -1;
+                                break;
+                            }
+
+                            if(ret_value < 0) break;
+
+                            /* Calculate the next hyperslab offset */
+                            for (i = (size_t)ndims, carry = 1; i > 0 && carry; --i) {
+                                hs_offset[i - 1] += hs_size[i - 1];
+
+                                if (hs_offset[i - 1] == total_size[i - 1])
+                                    hs_offset[i - 1] = 0;
+                                else
+                                    carry = 0;
+                            }
+                        }
+
+                        if(sm_buf)
+                            HDfree(sm_buf);
+                    }
+                    if(sm_space >= 0 && H5Sclose(sm_space) < 0)
+                        ret_value = -1;
+                }
+            }
+            if(f_space >= 0 && H5Sclose(f_space) < 0)
+                ret_value = -1;
+        } /* end if((f_space = H5Dget_space(dset)) >= 0) */
+        else
+            ret_value = -1;
+
+        if (p_type >= 0)
+            H5Tclose(p_type);
+    }
+    return ret_value;
+} /* end h5str_dump_simple_dset */
+
+static int
+h5tools_dump_simple_data(FILE *stream, hid_t container, hid_t type, void *_mem, hsize_t nelmts)
+{
+    int                ret_value = 0;
+    int                line_count;
+    unsigned char     *mem  = (unsigned char*)_mem;
+    size_t             size;   /* datum size */
+    H5T_class_t        type_class;
+    hsize_t            i;         /*element counter  */
+    h5str_t            buffer;    /*string into which to render */
+
+    if((size = H5Tget_size(type)) > 0) {
+        for (i = 0, line_count = 0; i < nelmts; i++, line_count++) {
+            size_t bytes_in        = 0;    /* # of bytes to write  */
+            size_t bytes_wrote     = 0;    /* # of bytes written   */
+            void* memref = mem + i * size;
+
+            /* Render the data element*/
+            h5str_new(&buffer, 32 * size);
+            bytes_in = h5str_sprintf(&buffer, container, type, memref, 1);
+            if(i > 0) {
+                HDfprintf(stream, ", ");
+                if (line_count >= H5TOOLS_TEXT_BLOCK) {
+                    line_count = 0;
+                    HDfprintf(stream, "\n");
+                }
+            }
+            HDfprintf(stream, "%s", buffer.s);
+            h5str_free(&buffer);
+        } /* end for (i = 0; i < nelmts... */
+        HDfprintf(stream, "\n");
+    } /* end if((size = H5Tget_size(tid)) > 0) */
+    else
+        ret_value = -1;
+
+    return ret_value;
+} /* end h5tools_dump_simple_data */
+
+/*
+ * Utility Java APIs
+ * Functions designed to workaround issues with the Java-C interface
+ */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5AwriteVL
+ * Signature: (JJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5AwriteVL(JNIEnv *env, jclass clss, jlong attr_id, jlong mem_type_id, jobjectArray buf)
+{
+    herr_t  status = -1;
+    char  **wdata;
+    jsize   size;
+    jint    i;
+
+    size = ENVPTR->GetArrayLength(ENVPAR (jarray) buf);
+
+    wdata = (char**)HDcalloc((size_t)size + 1, sizeof(char*));
+    if (!wdata) {
+        h5JNIFatalError(env, "H5AwriteVL:  cannot allocate buffer");
+    } /* end if */
+    else {
+        HDmemset(wdata, 0, (size_t)size * sizeof(char*));
+        for (i = 0; i < size; ++i) {
+            jstring obj = (jstring) ENVPTR->GetObjectArrayElement(ENVPAR (jobjectArray) buf, i);
+            if (obj != 0) {
+                jsize length = ENVPTR->GetStringUTFLength(ENVPAR obj);
+                const char *utf8 = ENVPTR->GetStringUTFChars(ENVPAR obj, 0);
+
+                if (utf8) {
+                    wdata[i] = (char*)HDmalloc((size_t)length + 1);
+                    if (wdata[i]) {
+                        HDmemset(wdata[i], 0, ((size_t)length + 1));
+                        HDstrncpy(wdata[i], utf8, (size_t)length);
+                    } /* end if */
+                } /* end if */
+
+                ENVPTR->ReleaseStringUTFChars(ENVPAR obj, utf8);
+                ENVPTR->DeleteLocalRef(ENVPAR obj);
+            } /* end if */
+        } /* end for (i = 0; i < size; ++i) */
+
+        status = H5Awrite((hid_t)attr_id, (hid_t)mem_type_id, wdata);
+
+        for (i = 0; i < size; i++) {
+            if(wdata[i]) {
+                HDfree(wdata[i]);
+            } /* end if */
+        } /* end for */
+        HDfree(wdata);
+
+        if (status < 0)
+            h5libraryError(env);
+    } /* end else */
+
+    return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5AwriteVL */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5AreadVL
+ * Signature: (JJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5AreadVL(JNIEnv *env, jclass clss, jlong attr_id, jlong mem_type_id, jobjectArray buf)
+{
+    herr_t  status = -1;
+    jstring jstr;
+    char  **strs;
+    int     i, n;
+    hid_t   sid;
+    hsize_t dims[H5S_MAX_RANK];
+
+    n = ENVPTR->GetArrayLength(ENVPAR buf);
+
+    strs =(char **)HDmalloc((size_t)n * sizeof(char *));
+    if (strs == NULL) {
+        h5JNIFatalError( env, "H5AreadVL:  failed to allocate buff for read variable length strings");
+    } /* end if */
+    else {
+        status = H5Aread(attr_id, mem_type_id, strs);
+        if (status < 0) {
+            dims[0] = (hsize_t)n;
+            sid = H5Screate_simple(1, dims, NULL);
+            H5Dvlen_reclaim(mem_type_id, sid, H5P_DEFAULT, strs);
+            H5Sclose(sid);
+            HDfree(strs);
+            h5JNIFatalError(env, "H5AreadVL: failed to read variable length strings");
+        } /* end if */
+        else {
+            for (i=0; i<n; i++) {
+                jstr = ENVPTR->NewStringUTF(ENVPAR strs[i]);
+                ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr);
+                HDfree (strs[i]);
+            } /* end for */
+
+            /*
+                for repeatedly reading an attribute with a large number of strs (e.g., 1,000,000 strings,
+                H5Dvlen_reclaim() may crash on Windows because the Java GC will not be able to collect
+                free space in time. Instead, use "free(strs[i])" to free individual strings
+                after it is done.
+                H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, strs);
+            */
+
+            HDfree(strs);
+        }  /* end else */
+    }  /* end else */
+    return status;
+} /* end Java_hdf_hdf5lib_H5_H5AreadVL */
+
+/*
+ * Copies the content of one dataset to another dataset
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Acopy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Acopy(JNIEnv *env, jclass clss, jlong src_id, jlong dst_id)
+{
+    jbyte  *buf;
+    herr_t  retVal = -1;
+    hid_t   src_did = (hid_t)src_id;
+    hid_t   dst_did = (hid_t)dst_id;
+    hid_t   tid = -1;
+    hid_t   sid = -1;
+    hsize_t total_size = 0;
+
+
+    sid = H5Aget_space(src_did);
+    if (sid < 0) {
+        h5libraryError(env);
+    } /* end if */
+    else {
+        tid = H5Aget_type(src_did);
+        if (tid < 0) {
+            H5Sclose(sid);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            total_size = (hsize_t)H5Sget_simple_extent_npoints(sid) * (hsize_t)H5Tget_size(tid);
+
+            H5Sclose(sid);
+
+            buf = (jbyte *)HDmalloc( (size_t)total_size * sizeof(jbyte));
+            if (buf == NULL) {
+                H5Tclose(tid);
+                h5outOfMemory( env, "H5Acopy:  malloc failed");
+            } /* end if */
+            else {
+                retVal = H5Aread(src_did, tid, buf);
+                H5Tclose(tid);
+
+                if (retVal < 0) {
+                    HDfree(buf);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    tid = H5Aget_type(dst_did);
+                    if (tid < 0) {
+                        HDfree(buf);
+                        h5libraryError(env);
+                    } /* end if */
+                    else {
+                        retVal = H5Awrite(dst_did, tid, buf);
+
+                        H5Tclose(tid);
+                        HDfree(buf);
+
+                        if (retVal < 0)
+                            h5libraryError(env);
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Acopy */
+
+/*
+ * Copies the content of one dataset to another dataset
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dcopy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Dcopy(JNIEnv *env, jclass clss, jlong src_id, jlong dst_id)
+{
+    jbyte  *buf;
+    herr_t  retVal = -1;
+    hid_t   src_did = (hid_t)src_id;
+    hid_t   dst_did = (hid_t)dst_id;
+    hid_t   tid = -1;
+    hid_t   sid = -1;
+    hsize_t total_size = 0, total_allocated_size;
+
+    total_allocated_size = H5Dget_storage_size(src_did);
+    if (total_allocated_size <=0)
+      return 0; // nothing to write;
+
+    sid = H5Dget_space(src_did);
+    if (sid < 0) {
+        h5libraryError(env);
+        return -1;
+    } /* end if */
+
+    tid = H5Dget_type(src_did);
+    if (tid < 0) {
+        H5Sclose(sid);
+        h5libraryError(env);
+        return -1;
+    } /* end if */
+
+    total_size = (hsize_t)H5Sget_simple_extent_npoints(sid) * (hsize_t)H5Tget_size(tid);
+
+    H5Sclose(sid);
+
+    buf = (jbyte*)HDmalloc((size_t)total_size * sizeof(jbyte));
+    if (buf == NULL) {
+        H5Tclose(tid);
+        h5outOfMemory(env, "H5Dcopy:  malloc failed");
+        return -1;
+    } /* end if */
+
+    retVal = H5Dread(src_did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+    H5Tclose(tid);
+
+    if (retVal < 0) {
+        HDfree(buf);
+        h5libraryError(env);
+        return (jint)retVal;
+    } /* end if */
+
+    tid = H5Dget_type(dst_did);
+    if (tid < 0) {
+        HDfree(buf);
+        h5libraryError(env);
+        return -1;
+    } /* end if */
+    retVal = H5Dwrite(dst_did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+    H5Tclose(tid);
+    HDfree(buf);
+
+    if (retVal < 0) {
+        h5libraryError(env);
+    } /* end if */
+
+    return (jint)retVal;
+} /* end Java_hdf_hdf5lib_H5_H5Dcopy */
+
+/*
+/////////////////////////////////////////////////////////////////////////////////
+//
+//
+// Add these methods so that we don't need to call H5Gget_objtype_by_idx
+// in a loop to get information for all the object in a group, which takes
+// a lot of time to finish if the number of objects is more than 10,000
+//
+/////////////////////////////////////////////////////////////////////////////////
+*/
+
+#ifdef __cplusplus
+    herr_t obj_info_all(hid_t g_id, const char *name, const H5L_info_t *linfo, void *op_data);
+    herr_t obj_info_max(hid_t g_id, const char *name, const H5L_info_t *linfo, void *op_data);
+    int H5Gget_obj_info_max(hid_t, char **, int *, int *, unsigned long *, long);
+    int H5Gget_obj_info_full( hid_t loc_id, char **objname, int *otype, int *ltype, unsigned long *fno, unsigned long *objno, int indexType, int indexOrder);
+#else
+    static herr_t obj_info_all(hid_t g_id, const char *name, const H5L_info_t *linfo, void *op_data);
+    static herr_t obj_info_max(hid_t g_id, const char *name, const H5L_info_t *linfo, void *op_data);
+    static int H5Gget_obj_info_max(hid_t, char **, int *, int *, unsigned long *, long);
+    static int H5Gget_obj_info_full( hid_t loc_id, char **objname, int *otype, int *ltype, unsigned long *fno, unsigned long *objno, int indexType, int indexOrder);
+#endif
+
+typedef struct info_all
+{
+    char **objname;
+    int *otype;
+    int *ltype;
+    unsigned long *objno;
+    unsigned long *fno;
+    unsigned long idxnum;
+    int count;
+} info_all_t;
+
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_obj_info_full
+ * Signature: (JLjava/lang/String;[Ljava/lang/String;[I[I[J[JIII)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1full(JNIEnv *env, jclass clss, jlong loc_id, jstring group_name,
+        jobjectArray objName, jintArray oType, jintArray lType, jlongArray fNo,
+        jlongArray oRef, jint n, jint indx_type, jint indx_order)
+{
+    herr_t        ret_val = -1;
+    const char   *gName = NULL;
+    char        **oName = NULL;
+    jboolean      isCopy;
+    jstring       str;
+    jint          *otarr;
+    jint          *ltarr;
+    jlong         *refP;
+    jlong         *fnoP;
+    unsigned long *refs=NULL;
+    unsigned long *fnos=NULL;
+    hid_t          gid = (hid_t)loc_id;
+    int            i;
+    int            indexType = indx_type;
+    int            indexOrder = indx_order;
+
+    if (oType == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_full:  oType is NULL");
+    }
+    else if (lType == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_full:  lType is NULL");
+    }
+    else if (oRef == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_full:  oRef is NULL");
+    }
+    else if (fNo == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_full:  fNo is NULL");
+    }
+    else {
+        otarr = ENVPTR->GetIntArrayElements(ENVPAR oType, &isCopy);
+        if (otarr == NULL) {
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  otype not pinned");
+            return -1;
+        } /* end if */
+        ltarr = ENVPTR->GetIntArrayElements(ENVPAR lType, &isCopy);
+        if (ltarr == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  ltype not pinned");
+            return -1;
+        } /* end if */
+        refP = ENVPTR->GetLongArrayElements(ENVPAR oRef, &isCopy);
+        if (refP == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  oRef not pinned");
+            return -1;
+        } /* end if */
+        fnoP = ENVPTR->GetLongArrayElements(ENVPAR fNo, &isCopy);
+        if (fnoP == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  fNo not pinned");
+            return -1;
+        } /* end if */
+        oName = (char **)HDcalloc((size_t)n, sizeof(*oName));
+        if (!oName) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR fNo, fnoP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  oName not allocated");
+            return -1;
+        } /* end if */
+
+        refs = (unsigned long *)HDcalloc((size_t)n, sizeof(unsigned long));
+        fnos = (unsigned long *)HDcalloc((size_t)n, sizeof(unsigned long));
+        if (!refs || !fnos) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR fNo, fnoP, JNI_ABORT);
+            h5str_array_free(oName, (size_t)n);
+            if (refs)
+                HDfree(refs);
+            if (fnos)
+                HDfree(fnos);
+            h5JNIFatalError(env, "H5Gget_obj_info_full:  result arrays not allocated");
+            return -1;
+        } /* end if */
+
+        if (group_name != NULL) {
+            gid = -1;
+            gName = ENVPTR->GetStringUTFChars(ENVPAR group_name, &isCopy);
+            if (gName != NULL) {
+                gid = H5Gopen2((hid_t)loc_id, gName, H5P_DEFAULT);
+
+                ENVPTR->ReleaseStringUTFChars(ENVPAR group_name, gName);
+            } /* end if */
+            if(gid < 0) {
+                ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+                ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+                ENVPTR->ReleaseLongArrayElements(ENVPAR fNo, fnoP, JNI_ABORT);
+                h5str_array_free(oName, (size_t)n);
+                HDfree(refs);
+                HDfree(fnos);
+                h5JNIFatalError(env, "H5Gget_obj_info_full: could not get group identifier");
+                return -1;
+            } /* end if */
+        } /* end if */
+
+        ret_val = H5Gget_obj_info_full(gid, oName, (int *)otarr, (int *)ltarr, fnos, refs, indexType, indexOrder);
+
+        ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, 0);
+        ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, 0);
+
+        if (group_name != NULL)
+            H5Gclose(gid);
+
+        if (ret_val < 0) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR fNo, fnoP, JNI_ABORT);
+            h5str_array_free(oName, (size_t)n);
+            HDfree(refs);
+            HDfree(fnos);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            for (i=0; i<n; i++) {
+                refP[i] = (jlong)refs[i];
+            } /* end for */
+            HDfree(refs);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, 0);
+
+            for (i=0; i<n; i++) {
+                fnoP[i] = (jlong)fnos[i];
+            } /* end for */
+            HDfree(fnos);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR fNo, fnoP, 0);
+
+            for (i=0; i<n; i++) {
+                if (*(oName+i)) {
+                    str = ENVPTR->NewStringUTF(ENVPAR *(oName+i));
+                    ENVPTR->SetObjectArrayElement(ENVPAR objName, i, (jobject)str);
+                } /* end if */
+            } /* for (i=0; i<n; i++)*/
+            h5str_array_free(oName, (size_t)n);
+        } /* end else */
+    } /* end else */
+    return ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1full */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_obj_info_max
+ * Signature: (J[Ljava/lang/String;[I[I[JJI)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1max(JNIEnv *env, jclass clss, jlong loc_id, jobjectArray objName,
+          jintArray oType, jintArray lType, jlongArray oRef,
+          jlong maxnum, jint n)
+{
+    herr_t         ret_val = -1;
+    char         **oName=NULL;
+    jboolean       isCopy;
+    jstring        str;
+    jint          *otarr;
+    jint          *ltarr;
+    jlong         *refP;
+    unsigned long *refs;
+    int            i;
+
+    if (oType == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_max:  oType is NULL");
+    } /* end if */
+    else if (lType == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_max:  lType is NULL");
+    } /* end else if */
+    else if (oRef == NULL) {
+        h5nullArgument(env, "H5Gget_obj_info_max:  oRef is NULL");
+    } /* end else if */
+    else {
+        otarr = ENVPTR->GetIntArrayElements(ENVPAR oType, &isCopy);
+        if (otarr == NULL) {
+            h5JNIFatalError(env, "H5Gget_obj_info_max:  otype not pinned");
+            return -1;
+        } /* end if */
+
+        ltarr = ENVPTR->GetIntArrayElements(ENVPAR lType, &isCopy);
+        if (ltarr == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_max:  ltype not pinned");
+            return -1;
+        } /* end if */
+
+        refP = ENVPTR->GetLongArrayElements(ENVPAR oRef, &isCopy);
+        if (refP == NULL) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_max:  oRef not pinned");
+            return -1;
+        } /* end if */
+
+        oName = (char **)HDcalloc((size_t)n, sizeof(*oName));
+        if (!oName) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            h5JNIFatalError(env, "H5Gget_obj_info_max:  oName not allocated");
+            return -1;
+        } /* end if */
+        refs = (unsigned long *)HDcalloc((size_t)n, sizeof(unsigned long));
+        if (!refs) {
+            ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, JNI_ABORT);
+            ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, JNI_ABORT);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            h5str_array_free(oName, (size_t)n);
+            h5JNIFatalError(env, "H5Gget_obj_info_max:  result array not allocated");
+            return -1;
+        } /* end if */
+
+        ret_val = H5Gget_obj_info_max((hid_t)loc_id, oName, (int*)otarr, (int*)ltarr, refs, maxnum );
+        ENVPTR->ReleaseIntArrayElements(ENVPAR lType, ltarr, 0);
+        ENVPTR->ReleaseIntArrayElements(ENVPAR oType, otarr, 0);
+
+        if (ret_val < 0) {
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, JNI_ABORT);
+            h5str_array_free(oName, (size_t)n);
+            HDfree(refs);
+            h5libraryError(env);
+        } /* end if */
+        else {
+            for (i=0; i<n; i++) {
+                refP[i] = (jlong) refs[i];
+            } /* end for */
+            HDfree(refs);
+            ENVPTR->ReleaseLongArrayElements(ENVPAR oRef, refP, 0);
+
+            for (i=0; i<n; i++) {
+                if (*(oName+i)) {
+                    str = ENVPTR->NewStringUTF(ENVPAR *(oName+i));
+                    ENVPTR->SetObjectArrayElement(ENVPAR objName, i, (jobject)str);
+                }
+            } /* for (i=0; i<n; i++)*/
+
+            h5str_array_free(oName, (size_t)n);
+        } /* end else */
+    } /* end else */
+
+    return ret_val;
+} /* end Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1max */
+
+int
+H5Gget_obj_info_full(hid_t loc_id, char **objname, int *otype, int *ltype, unsigned long *fno, unsigned long *objno, int indexType, int indexOrder)
+{
+    info_all_t info;
+    info.objname = objname;
+    info.otype = otype;
+    info.ltype = ltype;
+    info.idxnum = 0;
+    info.fno = fno;
+    info.objno = objno;
+    info.count = 0;
+
+    if(H5Literate(loc_id, (H5_index_t)indexType, (H5_iter_order_t)indexOrder, NULL, obj_info_all, (void *)&info) < 0) {
+        /* iterate failed, try normal alphabetical order */
+        if(H5Literate(loc_id, H5_INDEX_NAME, H5_ITER_INC, NULL, obj_info_all, (void *)&info) < 0)
+            return -1;
+    } /* end if */
+
+    return info.count;
+} /* end H5Gget_obj_info_full */
+
+int
+H5Gget_obj_info_max(hid_t loc_id, char **objname, int *otype, int *ltype, unsigned long *objno, long maxnum)
+{
+    info_all_t info;
+    info.objname = objname;
+    info.otype = otype;
+    info.ltype = ltype;
+    info.idxnum = (unsigned long)maxnum;
+    info.objno = objno;
+    info.count = 0;
+
+    if(H5Lvisit(loc_id, H5_INDEX_NAME, H5_ITER_NATIVE, obj_info_max, (void *)&info) < 0)
+        return -1;
+
+    return info.count;
+} /* end H5Gget_obj_info_max */
+
+herr_t
+obj_info_all(hid_t loc_id, const char *name, const H5L_info_t *info, void *op_data)
+{
+    int         type = -1;
+    hid_t       oid = -1;
+    herr_t      retVal = -1;
+    info_all_t *datainfo = (info_all_t*)op_data;
+    H5O_info_t  object_info;
+
+    retVal = H5Oget_info_by_name(loc_id, name, &object_info, H5P_DEFAULT);
+
+    if (retVal < 0) {
+        *(datainfo->otype+datainfo->count) = -1;
+        *(datainfo->ltype+datainfo->count) = -1;
+        *(datainfo->objname+datainfo->count) = (char *)HDmalloc(strlen(name)+1);
+        HDstrcpy(*(datainfo->objname+datainfo->count), name);
+        *(datainfo->objno+datainfo->count) = (unsigned long)-1;
+    } /* end if */
+    else {
+        *(datainfo->otype+datainfo->count) = object_info.type;
+        *(datainfo->ltype+datainfo->count) = info->type;
+        *(datainfo->objname+datainfo->count) = (char *)HDmalloc(HDstrlen(name)+1);
+        HDstrcpy(*(datainfo->objname+datainfo->count), name);
+
+        *(datainfo->fno+datainfo->count) = object_info.fileno;
+        *(datainfo->objno+datainfo->count) = (unsigned long)object_info.addr;
+        /*
+        if(info->type==H5L_TYPE_HARD)
+            *(datainfo->objno+datainfo->count) = (unsigned long)info->u.address;
+        else
+            *(datainfo->objno+datainfo->count) = info->u.val_size;
+        */
+    } /* end else */
+
+    datainfo->count++;
+
+    return 0;
+} /* end obj_info_all */
+
+herr_t
+obj_info_max(hid_t loc_id, const char *name, const H5L_info_t *info, void *op_data)
+{
+    int         type = -1;
+    herr_t      retVal = 0;
+    info_all_t *datainfo = (info_all_t*)op_data;
+    H5O_info_t  object_info;
+
+    retVal = H5Oget_info(loc_id, &object_info);
+    if (retVal < 0) {
+        *(datainfo->otype+datainfo->count) = -1;
+        *(datainfo->ltype+datainfo->count) = -1;
+        *(datainfo->objname+datainfo->count) = NULL;
+        *(datainfo->objno+datainfo->count) = (unsigned long)-1;
+        return 1;
+    } /* end if */
+    else {
+        *(datainfo->otype+datainfo->count) = object_info.type;
+        *(datainfo->ltype+datainfo->count) = info->type;
+        /* this will be freed by h5str_array_free(oName, n)*/
+        *(datainfo->objname+datainfo->count) = (char *)HDmalloc(HDstrlen(name)+1);
+        strcpy(*(datainfo->objname+datainfo->count), name);
+        if(info->type==H5L_TYPE_HARD)
+            *(datainfo->objno+datainfo->count) = (unsigned long)info->u.address;
+        else
+            *(datainfo->objno+datainfo->count) = info->u.val_size;
+    } /* end else */
+    datainfo->count++;
+    if(datainfo->count < (int)datainfo->idxnum)
+        return 0;
+    else
+        return 1;
+} /* end obj_info_max */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5export_dataset
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL
+Java_hdf_hdf5lib_H5_H5export_1dataset(JNIEnv *env, jclass cls, jstring file_export_name, jstring file_name, jstring object_path, jint binary_order)
+{
+    herr_t      status = -1;
+    herr_t      ret_val = -1;
+    hid_t       file_id = -1;
+    hid_t       dataset_id = -1;
+    FILE       *stream;
+    const char *file_export;
+    const char *object_name;
+    const char *fileName;
+    jboolean    isCopy2;
+
+    if (file_export_name == NULL) {
+        h5nullArgument(env, "HDF5Library_export_data:  file_export_name is NULL");
+    } /* end if */
+    else if (object_path == NULL) {
+        h5nullArgument(env, "HDF5Library_export_data:  object_path is NULL");
+    } /* end else if */
+    else {
+        PIN_JAVA_STRING0(file_name, fileName);
+
+        file_id = H5Fopen(fileName, (unsigned)H5F_ACC_RDWR, (hid_t)H5P_DEFAULT);
+
+        UNPIN_JAVA_STRING(file_name, fileName);
+
+        if (file_id < 0) {
+            /* throw exception */
+            h5libraryError(env);
+        } /* end if */
+        else {
+            object_name = ENVPTR->GetStringUTFChars(ENVPAR object_path, &isCopy2);
+            if (object_name == NULL) {
+                h5JNIFatalError( env, "H5Dopen:  object name not pinned");
+            } /* end if */
+            else {
+                dataset_id = H5Dopen2(file_id, object_name, H5P_DEFAULT);
+
+                ENVPTR->ReleaseStringUTFChars(ENVPAR object_path, object_name);
+
+                if (dataset_id < 0) {
+                    H5Fclose(file_id);
+                    h5libraryError(env);
+                } /* end if */
+                else {
+                    file_export = ENVPTR->GetStringUTFChars(ENVPAR file_export_name, 0);
+                    stream = HDfopen(file_export, "w+");
+                    ENVPTR->ReleaseStringUTFChars(ENVPAR file_export_name, file_export);
+
+                    ret_val = h5str_dump_simple_dset(stream, dataset_id, binary_order);
+
+                    if (stream)
+                        HDfclose(stream);
+
+                    H5Dclose(dataset_id);
+
+                    H5Fclose(file_id);
+
+                    if (ret_val < 0)
+                        h5libraryError(env);
+                } /* end else */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+} /* end Java_hdf_hdf5lib_H5_H5export_1dataset */
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/java/src/jni/h5util.h b/java/src/jni/h5util.h
new file mode 100644
index 0000000..fcf343d
--- /dev/null
+++ b/java/src/jni/h5util.h
@@ -0,0 +1,108 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifndef H5UTIL_H__
+#define H5UTIL_H__
+
+#include "h5jni.h"
+
+#ifndef SUCCEED
+#define SUCCEED     0
+#endif
+
+#ifndef FAIL
+#define FAIL        (-1)
+#endif
+
+typedef struct h5str_t {
+    char    *s;
+    size_t   max;  /* the allocated size of the string */
+} h5str_t;
+
+extern void    h5str_new (h5str_t *str, size_t len);
+extern void    h5str_free (h5str_t *str);
+extern void    h5str_resize (h5str_t *str, size_t new_len);
+extern char*   h5str_append (h5str_t *str, const char* cstr);
+extern size_t  h5str_sprintf(h5str_t *str, hid_t container, hid_t tid, void *buf, int expand_data);
+extern void    h5str_array_free(char **strs, size_t len);
+extern int     h5str_dump_simple_dset(FILE *stream, hid_t dset, int binary_order);
+extern int     h5str_dump_region_blocks_data(h5str_t *str, hid_t region, hid_t region_obj);
+extern int     h5str_dump_region_points_data(h5str_t *str, hid_t region, hid_t region_obj);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5AwriteVL
+ * Signature: (JJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5AwriteVL
+  (JNIEnv *, jclass, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5AreadVL
+ * Signature: (JJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5AreadVL
+  (JNIEnv *, jclass, jlong, jlong, jobjectArray);
+
+/*
+ * Copies the content of one dataset to another dataset
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Acopy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Acopy
+  (JNIEnv *, jclass, jlong, jlong);
+
+/*
+ * Copies the content of one dataset to another dataset
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Dcopy
+ * Signature: (JJ)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Dcopy
+  (JNIEnv*, jclass, jlong, jlong);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_obj_info_full
+ * Signature: (JLjava/lang/String;[Ljava/lang/String;[I[I[J[JIII)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1full
+  (JNIEnv*, jclass, jlong, jstring, jobjectArray, jintArray, jintArray, jlongArray, jlongArray, jint, jint, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Gget_obj_info_max
+ * Signature: (J[Ljava/lang/String;[I[I[JJI)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Gget_1obj_1info_1max
+  (JNIEnv*, jclass, jlong, jobjectArray, jintArray, jintArray, jlongArray, jlong, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5export_dataset
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+ */
+JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5export_1dataset
+  (JNIEnv*, jclass, jstring, jstring, jstring, jint);
+
+#endif  /* H5UTIL_H__ */
diff --git a/java/src/jni/h5zImp.c b/java/src/jni/h5zImp.c
new file mode 100644
index 0000000..a60854d
--- /dev/null
+++ b/java/src/jni/h5zImp.c
@@ -0,0 +1,84 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "hdf5.h"
+#include <jni.h>
+#include <stdlib.h>
+#include "h5jni.h"
+#include "h5zImp.h"
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zunregister
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Zunregister(JNIEnv *env, jclass clss, jint filter)
+{
+    herr_t retValue = H5Zunregister((H5Z_filter_t)filter);
+
+    if (retValue < 0)
+        h5libraryError(env);
+
+    return (jint)retValue;
+} /* end Java_hdf_hdf5lib_H5_H5Zunregister */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zfilter_avail
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Zfilter_1avail(JNIEnv *env, jclass clss, jint filter)
+{
+    herr_t retValue = H5Zfilter_avail((H5Z_filter_t)filter);
+
+    if (retValue < 0)
+        h5libraryError(env);
+
+    return (jint)retValue;
+} /* end Java_hdf_hdf5lib_H5_H5Zfilter_1avail */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zget_filter_info
+ * Signature: (I)I
+ */
+
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5Zget_1filter_1info(JNIEnv *env, jclass clss, jint filter)
+{
+    unsigned int flags = 0;
+
+    if (H5Zget_filter_info ((H5Z_filter_t) filter, (unsigned *) &flags) < 0)
+        h5libraryError(env);
+
+    return (jint)flags;
+} /* end Java_hdf_hdf5lib_H5_H5Zget_1filter_1info */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/h5zImp.h b/java/src/jni/h5zImp.h
new file mode 100644
index 0000000..de0d6e6
--- /dev/null
+++ b/java/src/jni/h5zImp.h
@@ -0,0 +1,55 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_H5_H5Z */
+
+#ifndef _Included_hdf_hdf5lib_H5_H5Z
+#define _Included_hdf_hdf5lib_H5_H5Z
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zunregister
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Zunregister
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zfilter_avail
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Zfilter_1avail
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     hdf_hdf5lib_H5
+ * Method:    H5Zget_filter_info
+ * Signature: (I)I
+ */
+
+JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Zget_1filter_1info
+  (JNIEnv *, jclass, jint);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_H5_H5Z */
diff --git a/java/src/jni/nativeData.c b/java/src/jni/nativeData.c
new file mode 100644
index 0000000..da86e09
--- /dev/null
+++ b/java/src/jni/nativeData.c
@@ -0,0 +1,1195 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  For details of the HDF libraries, see the HDF Documentation at:
+ *    http://hdfdfgroup.org/HDF5/doc/
+ *
+ */
+/*
+ *  This module contains the implementation of all the native methods
+ *  used for number conversion.  This is represented by the Java
+ *  class HDFNativeData.
+ *
+ *  These routines convert one dimensional arrays of bytes into
+ *  one-D arrays of other types (int, float, etc) and vice versa.
+ *
+ *  These routines are called from the Java parts of the Java-C
+ *  interface.
+ *
+ *  ***Important notes:
+ *
+ *     1.  These routines are designed to be portable--they use the
+ *         C compiler to do the required native data manipulation.
+ *     2.  These routines copy the data at least once -- a serious
+ *         but unavoidable performance hit.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <jni.h>
+#include "hdf5.h"
+#include "h5jni.h"
+#include "nativeData.h"
+
+
+/* returns int [] */
+JNIEXPORT jintArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B(JNIEnv *env, jclass clss, jbyteArray bdata)  /* IN: array of bytes */
+{
+    jbyte *barr;
+    jintArray rarray = NULL;
+    int blen;
+    jint *iarray;
+    jboolean bb;
+    char *bp;
+    jint *iap;
+    int ii;
+    int len;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToInt: bdata is NULL?");
+    } /* end if */
+    else {
+        barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+        if (barr == NULL) {
+            h5JNIFatalError(env,  "byteToInt: pin failed");
+        } /* end if */
+        else {
+            blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+
+            len = blen/(int)sizeof(jint);
+            rarray = ENVPTR->NewIntArray(ENVPAR len);
+            if (rarray == NULL) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+                h5outOfMemory( env,  "byteToInt" );
+                return NULL;
+            } /* end if */
+
+            iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb);
+            if (iarray == NULL) {
+                ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+                h5JNIFatalError(env,  "byteToInt: pin iarray failed");
+                return NULL;
+            } /* end if */
+
+            bp = (char *)barr;
+            iap = iarray;
+            for (ii = 0; ii < len; ii++) {
+                *iap = *(jint *)bp;
+                iap++;
+                bp += sizeof(jint);
+            } /* end for */
+
+            ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0);
+        } /* end else */
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+    }  /* end else */
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B */
+
+/* returns float [] */
+JNIEXPORT jfloatArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B(JNIEnv *env, jclass clss, jbyteArray bdata)  /* IN: array of bytes */
+{
+    jbyte *barr;
+    jfloatArray rarray;
+    int blen;
+    jfloat *farray;
+    jboolean bb;
+    char *bp;
+    jfloat *iap;
+    int ii;
+    int len;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToFloat: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError(env,  "byteToFloat: pin failed");
+        return NULL;
+    } /* end if */
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+
+    len = blen/(int)sizeof(jfloat);
+    rarray = ENVPTR->NewFloatArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToFloat" );
+        return NULL;
+    } /* end if */
+    farray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb);
+    if (farray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToFloat: pin farray failed");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr;
+    iap = farray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jfloat *)bp;
+        iap++;
+        bp += sizeof(jfloat);
+    } /* end for */
+
+    ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,farray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B */
+
+/* returns short [] */
+JNIEXPORT jshortArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B(JNIEnv *env, jclass clss, jbyteArray bdata)  /* IN: array of bytes */
+{
+    jbyte *barr;
+    jshortArray rarray;
+    int blen;
+    jshort *sarray;
+    jboolean bb;
+    char *bp;
+    jshort *iap;
+    int ii;
+    int len;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToShort: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError(env,  "byteToShort: pin failed");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+
+    len = blen/(int)sizeof(jshort);
+    rarray = ENVPTR->NewShortArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToShort" );
+        return NULL;
+    } /* end if */
+
+    sarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb);
+    if (sarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToShort: pin sarray failed");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr;
+    iap = sarray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jshort *)bp;
+        iap++;
+        bp += sizeof(jshort);
+    } /* end for */
+
+    ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,sarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B */
+
+
+/* returns long [] */
+JNIEXPORT jlongArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B(JNIEnv *env, jclass clss, jbyteArray bdata)  /* IN: array of bytes */
+{
+    jbyte *barr;
+    jlongArray rarray;
+    int blen;
+    jlong *larray;
+    jboolean bb;
+    char *bp;
+    jlong *iap;
+    int ii;
+    int len;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToLong: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError(env,  "byteToLong: pin failed");
+        return NULL;
+    } /* end if */
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+
+    len = blen/(int)sizeof(jlong);
+    rarray = ENVPTR->NewLongArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToLong" );
+        return NULL;
+    } /* end if */
+
+    larray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb);
+    if (larray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToLong: pin larray failed");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr;
+    iap = larray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jlong *)bp;
+        iap++;
+        bp += sizeof(jlong);
+    } /* end for */
+    ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,larray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B */
+
+
+/* returns double [] */
+JNIEXPORT jdoubleArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B(JNIEnv *env, jclass clss, jbyteArray bdata)  /* IN: array of bytes */
+{
+    jbyte *barr;
+    jdoubleArray rarray;
+    int blen;
+    jdouble *darray;
+    jboolean bb;
+    char *bp;
+    jdouble *iap;
+    int ii;
+    int len;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToDouble: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError(env,  "byteToDouble: pin failed");
+        return NULL;
+    } /* end if */
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+
+    len = blen/(int)sizeof(jdouble);
+    rarray = ENVPTR->NewDoubleArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToDouble" );
+        return NULL;
+    } /* end if */
+
+    darray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb);
+    if (darray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToDouble: pin darray failed");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr;
+    iap = darray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jdouble *)bp;
+        iap++;
+        bp += sizeof(jdouble);
+    } /* end for */
+
+    ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,darray,0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B */
+
+
+/* returns int [] */
+JNIEXPORT jintArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata)  /* IN: array of bytes */
+{
+    char *bp;
+    jbyte *barr;
+    jintArray rarray;
+    int blen;
+    jint *iarray;
+    jint *iap;
+    int ii;
+    jboolean bb;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToInt: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError(env,  "byteToInt: pin failed");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+    if ((start < 0) || ((int)(start + (len*(int)sizeof(jint))) > blen)) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToInt: getLen failed");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr + start;
+
+    rarray = ENVPTR->NewIntArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToInt" );
+        return NULL;
+    } /* end if */
+
+    iarray = ENVPTR->GetIntArrayElements(ENVPAR rarray,&bb);
+    if (iarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError(env,  "byteToInt: pin iarray failed");
+        return NULL;
+    } /* end if */
+
+    iap = iarray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jint *)bp;
+        iap++;
+        bp += sizeof(jint);
+    } /* end for */
+
+    ENVPTR->ReleaseIntArrayElements(ENVPAR rarray,iarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B */
+
+/* returns short [] */
+JNIEXPORT jshortArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata)  /* IN: array of bytes */
+{
+    char *bp;
+    jbyte *barr;
+    jshortArray rarray;
+    int blen;
+    jshort *iarray;
+    jshort *iap;
+    int ii;
+    jboolean bb;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToShort: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError( env,  "byteToShort: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+    if ((start < 0) || ((int)(start + (len*(int)sizeof(jshort))) > blen)) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5badArgument( env,  "byteToShort: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr + start;
+
+    rarray = ENVPTR->NewShortArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToShort" );
+        return NULL;
+    } /* end if */
+
+    iarray = ENVPTR->GetShortArrayElements(ENVPAR rarray,&bb);
+    if (iarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError( env,  "byteToShort: getShort failed?");
+        return NULL;
+    } /* end if */
+
+    iap = iarray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jshort *)bp;
+        iap++;
+        bp += sizeof(jshort);
+    } /* end for */
+
+    ENVPTR->ReleaseShortArrayElements(ENVPAR rarray,iarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B */
+
+/* returns float [] */
+JNIEXPORT jfloatArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata)  /* IN: array of bytes */
+{
+    char *bp;
+    jbyte *barr;
+    jfloatArray rarray;
+    int blen;
+    jfloat *iarray;
+    jfloat *iap;
+    int ii;
+    jboolean bb;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToFloat: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError( env,  "byteToFloat: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+    if ((start < 0) || ((int)(start + (len*(int)sizeof(jfloat))) > blen)) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5badArgument( env,  "byteToFloat: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr + start;
+
+    rarray = ENVPTR->NewFloatArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToFloat" );
+        return NULL;
+    } /* end if */
+
+    iarray = ENVPTR->GetFloatArrayElements(ENVPAR rarray,&bb);
+    if (iarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError( env,  "byteToFloat: getFloat failed?");
+        return NULL;
+    } /* end if */
+
+    iap = iarray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jfloat *)bp;
+        iap++;
+        bp += sizeof(jfloat);
+    } /* end for */
+
+    ENVPTR->ReleaseFloatArrayElements(ENVPAR rarray,iarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B */
+
+/* returns long [] */
+JNIEXPORT jlongArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata)  /* IN: array of bytes */
+{
+    char *bp;
+    jbyte *barr;
+    jlongArray rarray;
+    int blen;
+    jlong *iarray;
+    jlong *iap;
+    int ii;
+    jboolean bb;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToLong: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError( env,  "byteToLong: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+    if ((start < 0) || ((int)(start + (len*(int)sizeof(jlong))) > blen)) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5badArgument( env,  "byteToLong: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr + start;
+
+    rarray = ENVPTR->NewLongArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToLong" );
+        return NULL;
+    } /* end if */
+
+    iarray = ENVPTR->GetLongArrayElements(ENVPAR rarray,&bb);
+    if (iarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError( env,  "byteToLong: getLong failed?");
+        return NULL;
+    } /* end if */
+
+    iap = iarray;
+    for (ii = 0; ii < len; ii++) {
+
+        *iap = *(jlong *)bp;
+        iap++;
+        bp += sizeof(jlong);
+    } /* end for */
+
+    ENVPTR->ReleaseLongArrayElements(ENVPAR rarray,iarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B */
+
+/* returns double [] */
+JNIEXPORT jdoubleArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B(JNIEnv *env, jclass clss, jint start, jint len, jbyteArray bdata)  /* IN: array of bytes */
+{
+    char *bp;
+    jbyte *barr;
+    jdoubleArray rarray;
+    int blen;
+    jdouble *iarray;
+    jdouble *iap;
+    int ii;
+    jboolean bb;
+
+    if (bdata == NULL) {
+        h5nullArgument( env,  "byteToDouble: bdata is NULL?");
+        return NULL;
+    } /* end if */
+    barr = ENVPTR->GetByteArrayElements(ENVPAR bdata,&bb);
+    if (barr == NULL) {
+        h5JNIFatalError( env,  "byteToDouble: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    blen = ENVPTR->GetArrayLength(ENVPAR bdata);
+    if ((start < 0) || ((int)(start + (len*(int)sizeof(jdouble))) > blen)) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5badArgument( env,  "byteToDouble: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    bp = (char *)barr + start;
+
+    rarray = ENVPTR->NewDoubleArray(ENVPAR len);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5outOfMemory( env,  "byteToDouble" );
+        return NULL;
+    } /* end if */
+
+    iarray = ENVPTR->GetDoubleArrayElements(ENVPAR rarray,&bb);
+    if (iarray == NULL) {
+        ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+        h5JNIFatalError( env,  "byteToDouble: getDouble failed?");
+        return NULL;
+    } /* end if */
+
+    iap = iarray;
+    for (ii = 0; ii < len; ii++) {
+        *iap = *(jdouble *)bp;
+        iap++;
+        bp += sizeof(jdouble);
+    } /* end for */
+
+    ENVPTR->ReleaseDoubleArrayElements(ENVPAR rarray,iarray, 0);
+    ENVPTR->ReleaseByteArrayElements(ENVPAR bdata,barr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I(JNIEnv *env, jclass clss, jint start, jint len, jintArray idata)  /* IN: array of int */
+{
+    jint *ip;
+    jint *iarr;
+    int ilen;
+    jbyteArray rarray;
+    int blen;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ii;
+    int ij;
+    union things {
+        int ival;
+        char bytes[4];
+    } u;
+
+    if (idata == NULL) {
+        h5nullArgument( env,  "intToByte: idata is NULL?");
+        return NULL;
+    } /* end if */
+
+    iarr = ENVPTR->GetIntArrayElements(ENVPAR idata,&bb);
+    if (iarr == NULL) {
+        h5JNIFatalError( env,  "intToByte: getInt failed?");
+        return NULL;
+    } /* end if */
+
+    ilen = ENVPTR->GetArrayLength(ENVPAR idata);
+    if ((start < 0) || (((start + len)) > ilen)) {
+        ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5badArgument( env,  "intToByte: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    ip = iarr + start;
+
+    blen = ilen * (int)sizeof(jint);
+    rarray = ENVPTR->NewByteArray(ENVPAR blen);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5outOfMemory( env,  "intToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5JNIFatalError( env,  "intToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    for (ii = 0; ii < len; ii++) {
+        u.ival = *ip++;
+        for (ij = 0; ij < sizeof(jint); ij++) {
+            *bap = u.bytes[ij];
+            bap++;
+        } /* end for */
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+    ENVPTR->ReleaseIntArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S(JNIEnv *env, jclass clss, jint start, jint len, jshortArray idata)  /* IN: array of short */
+{
+    jshort *ip;
+    jshort *iarr;
+    int ilen;
+    jbyteArray rarray;
+    int blen;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ii;
+    int ij;
+    union things {
+        short ival;
+        char bytes[4];
+    } u;
+
+    if (idata == NULL) {
+        h5nullArgument( env,  "shortToByte: idata is NULL?");
+        return NULL;
+    } /* end if */
+    iarr = ENVPTR->GetShortArrayElements(ENVPAR idata,&bb);
+    if (iarr == NULL) {
+        h5JNIFatalError( env,  "shortToByte: getShort failed?");
+        return NULL;
+    } /* end if */
+
+    ilen = ENVPTR->GetArrayLength(ENVPAR idata);
+    if ((start < 0) || (((start + len)) > ilen)) {
+        ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5badArgument( env,  "shortToByte: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    ip = iarr + start;
+
+    blen = ilen * (int)sizeof(jshort);
+    rarray = ENVPTR->NewByteArray(ENVPAR blen);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5outOfMemory( env,  "shortToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5JNIFatalError( env,  "shortToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    for (ii = 0; ii < len; ii++) {
+        u.ival = *ip++;
+        for (ij = 0; ij < sizeof(jshort); ij++) {
+            *bap = u.bytes[ij];
+            bap++;
+        } /* end for */
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+    ENVPTR->ReleaseShortArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F(JNIEnv *env, jclass clss, jint start, jint len, jfloatArray idata)  /* IN: array of float */
+{
+    jfloat *ip;
+    jfloat *iarr;
+    int ilen;
+    jbyteArray rarray;
+    int blen;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ii;
+    int ij;
+    union things {
+        float ival;
+        char bytes[4];
+    } u;
+
+    if (idata == NULL) {
+        h5nullArgument( env,  "floatToByte: idata is NULL?");
+        return NULL;
+    } /* end if */
+    iarr = ENVPTR->GetFloatArrayElements(ENVPAR idata,&bb);
+    if (iarr == NULL) {
+        h5JNIFatalError( env,  "floatToByte: getFloat failed?");
+        return NULL;
+    } /* end if */
+
+    ilen = ENVPTR->GetArrayLength(ENVPAR idata);
+    if ((start < 0) || (((start + len)) > ilen)) {
+        ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5badArgument( env,  "floatToByte: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    ip = iarr + start;
+
+    blen = ilen * (int)sizeof(jfloat);
+    rarray = ENVPTR->NewByteArray(ENVPAR blen);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5outOfMemory( env,  "floatToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5JNIFatalError( env,  "floatToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    for (ii = 0; ii < len; ii++) {
+        u.ival = *ip++;
+        for (ij = 0; ij < sizeof(jfloat); ij++) {
+            *bap = u.bytes[ij];
+            bap++;
+        } /* end for */
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+    ENVPTR->ReleaseFloatArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D(JNIEnv *env, jclass clss, jint start, jint len, jdoubleArray idata)  /* IN: array of double */
+{
+    jdouble *ip;
+    jdouble *iarr;
+    int ilen;
+    jbyteArray rarray;
+    int blen;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ii;
+    int ij;
+    union things {
+        double ival;
+        char bytes[8];
+    } u;
+
+    if (idata == NULL) {
+        h5nullArgument( env,  "doubleToByte: idata is NULL?");
+        return NULL;
+    } /* end if */
+    iarr = ENVPTR->GetDoubleArrayElements(ENVPAR idata,&bb);
+    if (iarr == NULL) {
+        h5JNIFatalError( env,  "doubleToByte: getDouble failed?");
+        return NULL;
+    } /* end if */
+
+    ilen = ENVPTR->GetArrayLength(ENVPAR idata);
+    if ((start < 0) || (((start + len)) > ilen)) {
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5badArgument( env,  "doubleToByte: start or len is out of bounds");
+        return NULL;
+    } /* end if */
+
+    ip = iarr + start;
+
+    blen = ilen * (int)sizeof(jdouble);
+    rarray = ENVPTR->NewByteArray(ENVPAR blen);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5outOfMemory( env,  "doubleToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5JNIFatalError( env,  "doubleToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    for (ii = 0; ii < len; ii++) {
+        u.ival = *ip++;
+        for (ij = 0; ij < sizeof(jdouble); ij++) {
+            *bap = u.bytes[ij];
+            bap++;
+        } /* end for */
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+    ENVPTR->ReleaseDoubleArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D */
+
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J(JNIEnv *env, jclass clss, jint start, jint len, jlongArray idata)  /* IN: array of long */
+{
+    jlong *ip;
+    jlong *iarr;
+    int ilen;
+    jbyteArray rarray;
+    int blen;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ii;
+    int ij;
+    union things {
+        jlong ival;
+        char bytes[8];
+    } u;
+
+    if (idata == NULL) {
+        h5nullArgument( env,  "longToByte: idata is NULL?");
+        return NULL;
+    } /* end if */
+    iarr = ENVPTR->GetLongArrayElements(ENVPAR idata,&bb);
+    if (iarr == NULL) {
+        h5JNIFatalError( env,  "longToByte: getLong failed?");
+        return NULL;
+    } /* end if */
+
+    ilen = ENVPTR->GetArrayLength(ENVPAR idata);
+    if ((start < 0) || (((start + len)) > ilen)) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5badArgument( env,  "longToByte: start or len is out of bounds?\n");
+        return NULL;
+    } /* end if */
+
+    ip = iarr + start;
+
+    blen = ilen * (int)sizeof(jlong);
+    rarray = ENVPTR->NewByteArray(ENVPAR blen);
+    if (rarray == NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5outOfMemory( env,  "longToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+        h5JNIFatalError( env,  "longToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    for (ii = 0; ii < len; ii++) {
+        u.ival = *ip++;
+        for (ij = 0; ij < sizeof(jlong); ij++) {
+            *bap = u.bytes[ij];
+            bap++;
+        } /* end for */
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+    ENVPTR->ReleaseLongArrayElements(ENVPAR idata,iarr,JNI_ABORT);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J */
+
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_intToByte__I(JNIEnv *env, jclass clss, jint idata)  /* IN: int */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    int ij;
+    jboolean bb;
+    union things {
+        int ival;
+        char bytes[sizeof(int)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jint));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "intToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "intToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jint); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_intToByte__I */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_floatToByte__F(JNIEnv *env, jclass clss, jfloat idata)  /* IN: int */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ij;
+    union things {
+        float ival;
+        char bytes[sizeof(float)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jfloat));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "floatToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "floatToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jfloat); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_floatToByte__F */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_shortToByte__S(JNIEnv *env, jclass clss, jshort idata)  /* IN: short */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ij;
+    union things {
+        short ival;
+        char bytes[sizeof(short)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jshort));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "shortToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "shortToByte: getShort failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jshort); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_shortToByte__S */
+
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D(JNIEnv *env, jclass clss, jdouble idata)  /* IN: double */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ij;
+    union things {
+        double ival;
+        char bytes[sizeof(double)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jdouble));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "doubleToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "doubleToByte: getDouble failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jdouble); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D */
+
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_longToByte__J(JNIEnv *env, jclass clss, jlong idata)  /* IN: array of long */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ij;
+    union things {
+        jlong ival;
+        char bytes[sizeof(jlong)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jlong));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "longToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "longToByte: getLong failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jlong); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_longToByte__J */
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL
+Java_hdf_hdf5lib_HDFNativeData_byteToByte__B(JNIEnv *env, jclass clss, jbyte idata)  /* IN: array of long */
+{
+    jbyteArray rarray;
+    jbyte *barray;
+    jbyte *bap;
+    jboolean bb;
+    int ij;
+    union things {
+        jbyte ival;
+        char bytes[sizeof(jbyte)];
+    } u;
+
+    rarray = ENVPTR->NewByteArray(ENVPAR sizeof(jbyte));
+    if (rarray == NULL) {
+        h5outOfMemory( env,  "byteToByte" );
+        return NULL;
+    } /* end if */
+
+    barray = ENVPTR->GetByteArrayElements(ENVPAR rarray,&bb);
+    if (barray == NULL) {
+        h5JNIFatalError( env,  "byteToByte: getByte failed?");
+        return NULL;
+    } /* end if */
+
+    bap = barray;
+    u.ival = idata;
+    for (ij = 0; ij < sizeof(jbyte); ij++) {
+        *bap = u.bytes[ij];
+        bap++;
+    } /* end for */
+
+    ENVPTR->ReleaseByteArrayElements(ENVPAR rarray,(jbyte *)barray, 0);
+
+    return rarray;
+} /* end Java_hdf_hdf5lib_HDFNativeData_byteToByte__B */
+
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
diff --git a/java/src/jni/nativeData.h b/java/src/jni/nativeData.h
new file mode 100644
index 0000000..1af06b4
--- /dev/null
+++ b/java/src/jni/nativeData.h
@@ -0,0 +1,115 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <jni.h>
+/* Header for class hdf_hdf5lib_HDFNativeData */
+
+#ifndef _Included_hdf_hdf5lib_HDFNativeData
+#define _Included_hdf_hdf5lib_HDFNativeData
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* returns int [] */
+JNIEXPORT jintArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToInt___3B
+(JNIEnv *, jclass, jbyteArray);
+
+/* returns float [] */
+JNIEXPORT jfloatArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToFloat___3B
+(JNIEnv *, jclass, jbyteArray);
+
+/* returns short [] */
+JNIEXPORT jshortArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToShort___3B
+(JNIEnv *, jclass, jbyteArray);
+
+/* returns long [] */
+JNIEXPORT jlongArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToLong___3B
+(JNIEnv *, jclass, jbyteArray);
+
+/* returns double [] */
+JNIEXPORT jdoubleArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToDouble___3B
+(JNIEnv *, jclass, jbyteArray);
+
+/* returns int [] */
+JNIEXPORT jintArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToInt__II_3B
+(JNIEnv *, jclass, jint, jint, jbyteArray);
+
+/* returns short [] */
+JNIEXPORT jshortArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToShort__II_3B
+(JNIEnv *, jclass, jint, jint, jbyteArray);
+
+/* returns float [] */
+JNIEXPORT jfloatArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToFloat__II_3B
+(JNIEnv *, jclass, jint, jint, jbyteArray);
+
+/* returns long [] */
+JNIEXPORT jlongArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToLong__II_3B
+(JNIEnv *, jclass, jint, jint, jbyteArray);
+
+/* returns double [] */
+JNIEXPORT jdoubleArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToDouble__II_3B
+(JNIEnv *, jclass, jint, jint, jbyteArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_intToByte__II_3I
+(JNIEnv *, jclass, jint, jint, jintArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_shortToByte__II_3S
+(JNIEnv *, jclass, jint, jint, jshortArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_floatToByte__II_3F
+(JNIEnv *, jclass, jint, jint, jfloatArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_doubleToByte__II_3D
+(JNIEnv *, jclass, jint, jint, jdoubleArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_longToByte__II_3J
+(JNIEnv *, jclass, jint, jint, jlongArray);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_intToByte__I
+(JNIEnv *, jclass, jint);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_floatToByte__F
+(JNIEnv *, jclass, jfloat);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_shortToByte__S
+(JNIEnv *, jclass, jshort);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_doubleToByte__D
+(JNIEnv *env, jclass, jdouble);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_longToByte__J
+(JNIEnv *, jclass, jlong);
+
+/* returns byte [] */
+JNIEXPORT jbyteArray JNICALL Java_hdf_hdf5lib_HDFNativeData_byteToByte__B
+(JNIEnv *, jclass, jbyte);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif /* __cplusplus */
+
+#endif /* _Included_hdf_hdf5lib_HDFNativeData */
diff --git a/java/test/CMakeLists.txt b/java/test/CMakeLists.txt
new file mode 100644
index 0000000..e45e081
--- /dev/null
+++ b/java/test/CMakeLists.txt
@@ -0,0 +1,117 @@
+cmake_minimum_required (VERSION 3.1.0)
+PROJECT (HDF5_JAVA_TEST Java)
+
+set (CMAKE_VERBOSE_MAKEFILE 1)
+
+INCLUDE_DIRECTORIES (
+    ${HDF5_JAVA_JNI_BINARY_DIR}
+    ${HDF5_JAVA_HDF5_LIB_DIR}
+)
+
+set (HDF5_JAVA_TEST_SRCS
+    TestH5.java
+    TestH5E.java
+    TestH5Edefault.java
+    TestH5Eregister.java
+    TestH5Fparams.java
+    TestH5Fbasic.java
+    TestH5F.java
+    TestH5Fswmr.java
+    TestH5Gbasic.java
+    TestH5G.java
+    TestH5Giterate.java
+    TestH5Sbasic.java
+    TestH5S.java
+    TestH5Tparams.java
+    TestH5Tbasic.java
+    TestH5T.java
+    TestH5Dparams.java
+    TestH5D.java
+    TestH5Dplist.java
+    TestH5Lparams.java
+    TestH5Lbasic.java
+    TestH5Lcreate.java
+    TestH5R.java
+    TestH5P.java
+    TestH5PData.java
+    TestH5Pfapl.java
+    TestH5Pvirtual.java
+    TestH5Plist.java
+    TestH5A.java
+    TestH5Oparams.java
+    TestH5Obasic.java
+    TestH5Ocreate.java
+    TestH5Ocopy.java
+    TestH5PL.java
+    TestH5Z.java
+    TestAll.java
+)
+
+file (WRITE ${PROJECT_BINARY_DIR}/Manifest.txt
+"Main-Class: test.TestAll
+"
+)
+
+set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVA_LIB_DIR}/junit.jar;${HDF5_JAVA_LIB_DIR}/hamcrest-core.jar;${HDF5_JAVA_JARS};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_SIMPLE_JAR}")
+
+add_jar (${HDF5_JAVA_TEST_LIB_TARGET} MANIFEST ${PROJECT_BINARY_DIR}/Manifest.txt ${HDF5_JAVA_TEST_SRCS})
+
+get_target_property (${HDF5_JAVA_TEST_LIB_TARGET}_JAR_FILE ${HDF5_JAVA_TEST_LIB_TARGET} JAR_FILE)
+#install_jar (${HDF5_JAVA_TEST_LIB_TARGET} ${HJAVA_INSTALL_DATA_DIR}/tests tests)
+#get_target_property (${HDF5_JAVA_TEST_LIB_TARGET}_CLASSPATH ${HDF5_JAVA_TEST_LIB_TARGET} CLASSDIR)
+
+add_dependencies (${HDF5_JAVA_TEST_LIB_TARGET} ${HDF5_JAVA_HDF5_LIB_TARGET})
+set_target_properties (${HDF5_JAVA_TEST_LIB_TARGET} PROPERTIES FOLDER test/java)
+
+set (HDF_JAVA_TEST_FILES
+      h5ex_g_iterate.hdf
+      JUnit-interface.txt
+      JUnit-interface.ert
+)
+
+foreach (h5_file ${HDF_JAVA_TEST_FILES})
+  set (dest "${PROJECT_BINARY_DIR}/${h5_file}")
+  #message (STATUS " Copying ${h5_file}")
+  add_custom_command (
+      TARGET     ${HDF5_JAVA_TEST_LIB_TARGET}
+      POST_BUILD
+      COMMAND    ${CMAKE_COMMAND}
+      ARGS       -E copy_if_different ${PROJECT_SOURCE_DIR}/${h5_file} ${dest}
+  )
+endforeach (h5_file ${HDF_JAVA_TEST_FILES})
+
+if (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
+else (WIN32)
+  set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
+endif (WIN32)
+
+set (CMAKE_JAVA_CLASSPATH ".")
+foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
+  set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
+endforeach (CMAKE_INCLUDE_PATH)
+set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF5_JAVA_TEST_LIB_TARGET}_JAR_FILE}")
+set (testfilter "OK (598 tests)")
+
+if (CMAKE_BUILD_TYPE MATCHES Debug)
+  set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;")
+endif(CMAKE_BUILD_TYPE MATCHES Debug)
+
+add_test (
+    NAME JUnit-interface
+    COMMAND "${CMAKE_COMMAND}"
+        -D "TEST_TESTER=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
+        -D "TEST_CLASSPATH:STRING=${CMAKE_JAVA_CLASSPATH}"
+        -D "TEST_ARGS:STRING=${CMD_ARGS}-ea;org.junit.runner.JUnitCore"
+        -D "TEST_PROGRAM=test.TestAll"
+        -D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
+        -D "TEST_FOLDER=${HDF5_BINARY_DIR}/java/test"
+        -D "TEST_OUTPUT=JUnit-interface.out"
+        -D "TEST_ERRREF=JUnit-interface.ert"
+#        -D "TEST_LOG_LEVEL=trace"
+        -D "TEST_EXPECT=0"
+        -D "TEST_MASK_ERROR=TRUE"
+        -D "TEST_FILTER:STRING=${testfilter}"
+        -D "TEST_REFERENCE=JUnit-interface.txt"
+        -P "${HDF_RESOURCES_DIR}/jrunTest.cmake"
+)
diff --git a/java/test/JUnit-interface.ert b/java/test/JUnit-interface.ert
new file mode 100644
index 0000000..5771a4f
--- /dev/null
+++ b/java/test/JUnit-interface.ert
@@ -0,0 +1,2 @@
+[main] INFO hdf.hdf5lib.H5 - HDF5 library: hdf5_java
+[main] INFO hdf.hdf5lib.H5 -  successfully loaded from java.library.path
diff --git a/java/test/JUnit-interface.txt b/java/test/JUnit-interface.txt
new file mode 100644
index 0000000..d7cd29d
--- /dev/null
+++ b/java/test/JUnit-interface.txt
@@ -0,0 +1,652 @@
+JUnit version 4.11
+.testJ2C
+.testIsSerializable
+.testH5garbage_collect
+.testH5error_off
+.serializeToDisk
+.testH5open
+.testH5check_version
+.testH5get_libversion
+.testH5set_free_list_limits
+.testH5Eregister_class_lib_name_null
+.testH5Eregister_class_version_null
+.testH5Eunregister_class_invalid_classid
+.testH5Eregister_class
+.testH5Eregister_class_cls_name_null
+.testH5EprintInt
+.testH5Eset_current_stack_invalid_stkid
+.testH5Eset_current_stack
+.testH5Eget_num
+.testH5Eclear
+.testH5Eprint
+.testH5Epush_null_name
+.testH5Eget_num_with_msg
+.testH5Eclear2_with_msg
+.testH5Epush_invalid_stkid
+.testH5Eget_current_stack
+.testH5Ecreate_stack
+.testH5Eget_msg_invalid_msgid
+.testH5Eauto_is_v2
+.testH5EclearInt
+.testH5Eauto_is_v2_invalid_stkid
+.testH5Eclose_msg_invalid_errid
+.testH5Eclose_stack_invalid_stackid
+.testH5Eget_class_name_invalid_classname
+.testH5Eget_num_invalid_stkid
+.testH5EprintInt_invalid_classid
+.testH5Epop
+.testH5Epop_invalid_stkid
+.testH5Eget_current_stack_pop
+.testH5Eget_class_name_invalid_classid
+.testH5Ecreate_msg_invalid_errid
+.testH5Eclear2_invalid_stkid
+.testH5Eprint2_invalid_classid
+.testH5EprintInt
+.testH5Eget_msg_major
+.testH5Eget_msg_minor
+.testH5Eget_msg
+.testH5Eget_num
+.testH5Epush
+.testH5Ewalk
+.testH5Eget_class_name
+.testH5Eget_num_with_msg
+.testH5Eclear2
+.testH5Eprint2
+.testH5Ecreate_msg_major
+.testH5Ecreate_msg_minor
+.testH5Ecreate_stack
+.testH5Ecreate_msg_name_null
+.testH5Eauto_is_v2
+.testH5EclearInt
+.testH5Epop
+.testH5Fcreate_null
+.testH5Fflush_local
+.testH5Fget_info
+.testH5Fmount_null
+.testH5Fcreate
+.testH5Fflush_global
+.testH5Funmount_null
+.testH5Fclose_negative
+.testH5Fopen_null
+.testH5Fis_hdf5_null
+.testH5Fis_hdf5_text
+.testH5Fget_mdc_size
+.testH5Fget_mdc_hit_rate
+.testH5Fis_hdf5
+.testH5Fget_freespace
+.testH5Fclose
+.testH5Fget_filesize
+.testH5Fcreate_EXCL
+.testH5Freopen_closed
+.testH5Freset_mdc_hit_rate_stats
+.testH5Fget_name
+.testH5Fcreate
+.testH5Fclear_elink_file_cache
+.testH5Fclose_twice
+.testH5Freopen
+.testH5Fopen_read_only
+.testH5Fget_access_plist
+.testH5Fget_obj_ids
+.testH5Fget_intent_rdwr
+.testH5Fget_access_plist_closed
+.testH5Fget_create_plist_closed
+.testH5Fget_intent_rdonly
+.testH5Fget_create_plist
+.testH5Fget_obj_count
+.testH5Fstart_swmr_write
+.testH5Gget_info_by_name_not_exists
+.testH5Gget_info_by_idx_not_exists
+.testH5Gget_info_by_name
+.testH5Gget_create_plist
+.testH5Gopen
+.testH5Gget_info_by_idx_null
+.testH5Gopen_not_exists
+.testH5Gclose
+.testH5Gcreate_anon
+.testH5Gcreate_null
+.testH5Gget_info_by_idx_fileid
+.testH5Gclose_invalid
+.testH5Gopen_invalid
+.testH5Gget_info_invalid
+.testH5Gcreate_invalid
+.testH5Gcreate_exists
+.testH5Gget_info_by_name_null
+.testH5Gget_info_by_name_invalid
+.testH5Gget_create_plist_invalid
+.testH5Gcreate
+.testH5Gget_info_by_name_fileid
+.testH5Gget_info_by_idx_invalid
+.testH5Gopen_null
+.testH5Gget_info_by_idx
+.testH5Gget_info
+.testH5Gget_info_by_name
+.testH5Gget_create_plist
+.testH5Gopen
+.testH5Gget_obj_info_all_gid2
+.testH5Gget_obj_info_all_byIndexType
+.testH5Gget_obj_info_max_limit
+.testH5Gget_obj_info_all
+.testH5Gget_obj_info_max
+.testH5Gget_obj_info_all_gid
+.testH5Gget_info_by_idx
+.testH5Gget_info
+.testH5Gget_obj_info_all
+.testH5Sclose_invalid
+.testH5Screate_simple_max_default
+.testH5Screate_simple_dims_null
+.testH5Sdecode_null
+.testH5Screate_simple_dims_exceed
+.testH5Screate_simple_unlimted_1d
+.testH5Screate_simple_dims_invalid
+.testH5Screate_scalar
+.testH5Screate_simple
+.testH5Screate_simple_rank_invalid
+.testH5Sget_simple_extent_type_invalid
+.testH5Sencode_invalid
+.testH5Screate_null
+.testH5Screate_simple_extent
+.testH5Screate_invalid
+.testH5Screate_simple_unlimted
+.testH5Sget_select_npoints
+.testH5Sget_select_type
+.testH5Sset_extent_simple
+.testH5Sget_select_hyper
+.testH5Sget_select_valid
+.testH5Sget_select_elem_pointlist
+.testH5Sset_extent_none
+.testH5Sencode_decode_scalar_dataspace
+.testH5Soffset_simple
+.testH5Scopy
+.testH5Sget_simple_extent_ndims
+.testH5Sextent_equal
+.testH5Sget_simple_extent_dims
+.testH5Sget_simple_extent_type
+.testH5Shyper_regular
+.testH5Sget_select_bounds
+.testH5Sget_select_elem_pointlist_invalid
+.testH5Sget_simple_extent_npoints
+.testH5Sextent_copy
+.testH5Sencode_decode_null_dataspace
+.testH5Sis_simple
+.testH5Sget_simple_extent_dims_null
+.testH5Sselect_none
+.testH5Tget_member_type_invalid
+.testH5Tenum_insert_null
+.testH5Tget_offset_invalid
+.testH5Tset_precision_invalid
+.testH5Tget_inpad_invalid
+.testH5Tenum_nameof_invalid
+.testH5Tget_member_value_invalid
+.testH5Tenum_nameof_value_null
+.testH5Tcreate_invalid
+.testH5Tget_strpad_invalid
+.testH5Tenum_valueof_invalid
+.testH5Tget_fields_null
+.testH5Topen_null
+.testH5Tpack_invalid
+.testH5Tcommit_null
+.testH5Tinsert_invalid
+.testH5Tenum_valueof_null
+.testH5Tset_norm_invalid
+.testH5Tlock_invalid
+.testH5Tarray_create_invalid
+.testH5Tget_member_value_null
+.testH5Tset_offset_invalid
+.testH5Tget_fields_invalid
+.testH5Tequal_invalid
+.testH5Tget_ebias_long_invalid
+.testH5Tget_cset_invalid
+.testH5Tget_size_invalid
+.testH5Tset_strpad_invalid
+.testH5Tset_ebias_invalid
+.testH5Tget_sign_invalid
+.testH5Tget_member_index_invalid
+.testH5Tget_precision_invalid
+.testH5Tset_fields_invalid
+.testH5Tcopy_invalid
+.testH5Tget_pad_invalid
+.testH5Tset_order_invalid
+.testH5Tget_member_class_invalid
+.testH5Tget_super_invalid
+.testH5Tget_class_invalid
+.testH5Topen_invalid
+.testH5Tget_precision_long_invalid
+.testH5Tget_ebias_invalid
+.testH5Tget_native_type_invalid
+.testH5Tget_fields_length_invalid
+.testH5Tget_norm_invalid
+.testH5Tenum_nameof_invalid_size
+.testH5Tset_pad_invalid
+.testH5Tget_pad_null
+.testH5Tset_tag_null
+.testH5Tget_order_invalid
+.testH5Tcommit_invalid
+.testH5Tget_array_ndims_invalid
+.testH5Tset_tag_invalid
+.testH5Tvlen_create_invalid
+.testH5Tenum_create_invalid
+.testH5Tinsert_null
+.testH5Tset_inpad_invalid
+.testH5Tenum_valueof_name_null
+.testH5Tset_cset_invalid
+.testH5Tclose_invalid
+.testH5Tget_nmembers_invalid
+.testH5Tarray_create_value_null
+.testH5Tset_size_invalid
+.testH5Tenum_insert_invalid
+.testH5Tget_array_dims_null
+.testH5Tget_member_index_null
+.testH5Tset_sign_invalid
+.testH5Tenum_insert_name_null
+.testH5Tequal_not
+.testH5Tcopy
+.testH5Tequal
+.testH5Torder_size
+.testH5Tconvert
+.testH5Tvlen_create
+.testH5Tenum_create_functions
+.testH5Tenum_functions
+.testH5Tget_class
+.testH5Tget_array_ndims
+.testH5Tequal_type_error
+.testH5Tget_array_dims
+.testH5Tset_size
+.testH5Tis_variable_str
+.testH5Tcompound_functions
+.testH5Tget_size
+.testH5Tarray_create
+.testH5Topaque_functions
+.testH5Dget_space_status_invalid
+.testH5Dget_access_plist_invalid
+.testH5Dget_type_invalid
+.testH5Dget_create_plist_invalid
+.testH5Dget_offset_invalid
+.testH5Dvlen_get_buf_size_invalid
+.testH5Dcreate_null
+.testH5Dset_extent_status_null
+.testH5Dvlen_reclaim_null
+.testH5Dcreate_invalid
+.testH5Dcreate_anon_invalid
+.testH5Dset_extent_status_invalid
+.testH5Dvlen_reclaim_invalid
+.testH5Dopen_invalid
+.testH5Dclose_invalid
+.testH5Dget_storage_size_invalid
+.testH5Dget_space_invalid
+.testH5Dopen_null
+.testH5Dget_storage_size
+.testH5Diterate_write
+.testH5Dcreate
+.testH5Dget_offset
+.testH5Dget_type
+.testH5Dfill
+.testH5Dopen
+.testH5Dcreate_anon
+.testH5Dfill_null
+.testH5Dget_storage_size_empty
+.testH5Diterate
+.testH5Dget_access_plist
+.testH5Dvlen_read_invalid_buffer
+.testH5Dvlen_get_buf_size
+.testH5Dget_space_closed
+.testH5Dget_space_status
+.testH5Dvlen_write_read
+.testH5Dget_space
+.testH5Dget_type_closed
+.testH5Dset_extent
+.testH5Lcopy_invalid
+.testH5Lget_value_by_idx_null
+.testH5Lcreate_external_invalid
+.testH5Lexists_null
+.testH5Lget_info_invalid
+.testH5Lget_name_by_idx_invalid
+.testH5Lmove_null_current
+.testH5Literate_by_name_nullname
+.testH5Lvisit_by_name_nullname
+.testH5Lvisit_null
+.testH5Lget_name_by_idx_null
+.testH5Lcreate_hard_null_dest
+.testH5Lget_value_null
+.testH5Lcreate_external_null_dest
+.testH5Lcreate_external_null_file
+.testH5Lcreate_external_null_current
+.testH5Ldelete_null
+.testH5Lexists_invalid
+.testH5Lmove_invalid
+.testH5Lcreate_hard_invalid
+.testH5Lcopy_null_dest
+.testH5Lcreate_soft_null_current
+.testH5Lcopy_null_current
+.testH5Lget_info_by_idx_null
+.testH5Literate_null
+.testH5Ldelete_invalid
+.testH5Lvisit_by_name_null
+.testH5Ldelete_by_idx_invalid
+.testH5Lget_info_by_idx_invalid
+.testH5Ldelete_by_idx_null
+.testH5Lcreate_soft_invalid
+.testH5Lcreate_hard_null_current
+.testH5Lget_value_by_idx_invalid
+.testH5Lmove_null_dest
+.testH5Lget_info_null
+.testH5Literate_by_name_null
+.testH5Lcreate_soft_null_dest
+.testH5Lget_value_invalid
+.testH5Lget_info_by_idx_not_exist_name
+.testH5Lget_name_by_idx_not_exist
+.testH5Lvisit
+.testH5Lget_name_by_idx_n0
+.testH5Lget_name_by_idx_n3
+.testH5Lvisit_by_name
+.testH5Literate_by_name
+.testH5Lget_info_hardlink
+.testH5Literate
+.testH5Lget_info_by_idx_n0
+.testH5Lget_info_by_idx_n3
+.testH5Lget_info_by_idx_name_not_exist_create
+.testH5Lexists
+.testH5Lget_info_by_idx_name_not_exist_name
+.testH5Lget_info_by_idx_not_exist_create
+.testH5Lget_info_not_exist
+.testH5Lget_info_dataset
+.testH5Lget_info_by_idx_n0_create
+.testH5Ldelete_soft_link_dangle
+.testH5Lget_value_by_idx_external_create
+.testH5Ldelete_by_idx_not_exist_create
+.testH5Lvisit_create
+.testH5Lmove_dst_link_exists
+.testH5Lcreate_soft_dangle
+.testH5Literate_create
+.testH5Lcopy_cur_not_exists
+.testH5Lcopy
+.testH5Lmove
+.testH5Lget_value_by_idx_n2_create
+.testH5Lget_value_soft
+.testH5Ldelete_by_idx_n2_name
+.testH5Lget_info_by_idx_n1_create
+.testH5Lcreate_external
+.testH5Lget_value_dangle
+.testH5Lcreate_hard_dst_link_exists
+.testH5Lget_value_by_idx_n2_name
+.testH5Lcreate_soft_dst_link_exists
+.testH5Lcreate_hard
+.testH5Lcreate_soft
+.testH5Lmove_cur_not_exists
+.testH5Lcreate_hard_cur_not_exists
+.testH5Lget_info_softlink_dangle
+.testH5Ldelete_by_idx_n2_create
+.testH5Ldelete_soft_link
+.testH5Lget_info_externallink
+.testH5Lcopy_dst_link_exists
+.testH5Lget_value_by_idx_external_name
+.testH5Ldelete_by_idx_not_exist_name
+.testH5Lget_info_softlink
+.testH5Lget_value_external
+.testH5Lget_value_by_idx_not_exist_create
+.testH5Lget_value_by_idx_not_exist_name
+.testH5Ldelete_hard_link
+.testH5Rgetregion_Nullreference
+.testH5Rget_obj_type2_Invalidreftype
+.testH5Rdereference
+.testH5Rget_name
+.testH5Rcreate_Invalidreftype
+.testH5Rget_name_NULLreference
+.testH5Rget_region
+.testH5Rdereference_Nullreference
+.testH5Rcreate_refobj
+.testH5Rcreate_Invalidspace_id
+.testH5Rdereference_Invalidreference
+.testH5Rgetregion_Badreferencetype
+.testH5Rcreate_regionrefobj
+.testH5Rget_name_Invalidreftype
+.testH5Rgetregion_Invalidreftype
+.testH5Rget_obj_type2
+.testH5Rcreate_InvalidObjectName
+.testH5Pset_nbit
+.testH5Pset_shared_mesg_index_InvalidFlag
+.testH5Pset_shared_mesg_phase_change
+.testH5PH5Pset_shared_mesg_phase_change_HighMaxlistValue
+.testH5P_layout
+.testH5Pget_link_creation_order
+.testH5Pset_shared_mesg_nindexes_InvalidHIGHnindexes
+.testH5Pget_shared_mesg_index_Invalid_indexnum
+.testH5Pset_data_transform_NullExpression
+.testH5Pset_elink_prefix_null
+.testH5Pget_elink_prefix
+.testH5Pget_nlinks
+.testH5Pset_libver_bounds_invalidhigh
+.testH5Pget_char_encoding
+.testH5P_istore_k
+.testH5Pget_link_phase_change
+.testH5Pset_link_phase_change_max_compactLESSTHANmin_dense
+.testH5Pget_shared_mesg_phase_change_EqualsSET
+.testH5Pset_scaleoffset_Invalidscale_type
+.testH5Pget_istore_k_null
+.testH5Pset_libver_bounds_invalidlow
+.testH5Pset_est_link_info
+.testH5Pget_link_phase_change_Null
+.testH5P_fill_time
+.testH5Pget_userblock_null
+.testH5Pset_link_creation_order_tracked
+.testH5Pset_shared_mesg_index
+.testH5Pset_copy_object
+.testH5Pset_link_creation_order_trackedPLUSindexed
+.testH5Pset_copy_object_invalidobject
+.testH5Pset_est_link_info_InvalidValues
+.testH5P_file_space
+.testH5Pset_local_heap_size_hint
+.testH5Pget_est_link_info
+.testH5Pset_scaleoffset
+.testH5Pset_create_intermediate_group_invalidobject
+.testH5PH5Pset_shared_mesg_phase_change_HighMinbtreeValue
+.testH5Pset_create_intermediate_group
+.testH5P_alloc_time
+.testH5Pset_elink_acc_flags
+.testH5Pset_link_phase_change_Highmax_Compact
+.testH5P_chunk
+.testH5P_sizes
+.testH5Pset_link_creation_order_invalidvalue
+.testH5P_sym_k
+.testH5PH5Pset_shared_mesg_phase_change_MinbtreeGreaterThanMaxlist
+.testH5Pget_version_null
+.testH5Pset_scaleoffset_Invalidscale_factor
+.testH5Pget_elink_prefix_null
+.testH5Pget_data_transform_IllegalSize
+.testH5Pget_create_intermediate_group
+.testH5Pset_shared_mesg_nindexes
+.testH5Pset_attr_creation_order_trackedPLUSindexed
+.testH5Pget_sym_k_null
+.testH5Pset_nlinks
+.testH5P_obj_track_times
+.testH5P_userblock
+.testH5Pget_local_heap_size_hint
+.testH5Pset_shared_mesg_index_Invalid_indexnum
+.testH5Pset_data_transform_InvalidExpression1
+.testH5Pset_data_transform_InvalidExpression2
+.testH5Pget_attr_phase_change
+.testH5Pget_data_transform
+.testH5Pget_create_intermediate_group_notcreated
+.testH5Pset_elink_prefix
+.testH5Pget_attr_creation_order
+.testH5Pset_attr_creation_order_invalidvalue
+.testH5Pget_shared_mesg_phase_change
+.testH5Pget_shared_mesg_index
+.testH5Pset_link_phase_change
+.testH5Pget_shared_mesg_nindexes
+.testH5Pget_version
+.testH5Pset_elink_acc_flags_InvalidFlag1
+.testH5Pset_elink_acc_flags_InvalidFlag2
+.testH5Pget_link_phase_change_EqualsSet
+.testH5Pget_elink_acc_flags
+.testH5Pget_data_transform_ExpressionNotSet
+.testH5P_fill_value
+.testH5Pget_sizes_null
+.testH5Pset_data_transform
+.testH5Pset_attr_creation_order_tracked
+.testH5P_buffer
+.testH5Pdata_transform
+.testH5P_elink_fapl
+.testH5P_fapl_direct
+.testH5P_alignment
+.testH5P_fapl_family
+.testH5P_chunk_cache
+.testH5P_meta_block_size
+.testH5Fmdc_logging
+.testH5Pget_elink_fapl
+.testH5Pset_mdc_config
+.testH5P_small_data_block_size
+.testH5Pset_fapl_log
+.testH5Pset_libver_bounds
+.testH5P_sieve_buf_size
+.testH5P_elink_file_cache_size
+.testH5P_cache
+.testH5Pget_mdc_config
+.testH5P_fapl_muti_defaults
+.testH5Pget_libver_bounds
+.testH5P_btree_ratios
+.testH5P_fapl_muti_nulls
+.testH5Pset_fapl_sec2
+.testH5Pmulti_transform
+.testH5Pset_elink_fapl_NegativeID
+.testH5Pset_fapl_stdio
+.testH5P_edc_check
+.testH5Pset_elink_fapl
+.testH5P_hyper_vector_size
+.testH5P_gc_references
+.testH5P_family_offset
+.testH5P_fapl_core
+.testH5P_fapl_muti
+.testH5P_fapl_split
+.testH5Pset_fapl_windows
+.testH5P_fclose_degree
+.testH5Pget_source_datasetname
+.testH5Pvirtual_storage
+.testH5Pget_selection_source_dataset
+.testH5Pget_source_filename
+.testH5Pget_virtual_count
+.testH5Pset_get_virtual_view
+.testH5Pget_mapping_parameters
+.testH5P_genprop_basic_class
+.testH5P_genprop_class_iter
+.testH5P_genprop_basic_class_prop
+.testH5P_genprop_basic_list_prop
+.testH5Acreate2_nullname
+.testH5Acreate_by_name
+.testH5Aget_name_by_idx
+.testH5Aget_storage_size
+.testH5Aiterate
+.testH5Aopen_by_idx
+.testH5Aopen_invalidname
+.testH5Aopen
+.testH5Aget_info_by_name
+.testH5Aget_create_plist
+.testH5Adelete_by_name
+.testH5Aopen_by_name
+.testH5Aget_info
+.testH5Aget_name
+.testH5Aexists
+.testH5Aget_info_by_idx
+.testH5Arename
+.testH5Adelete_by_idx_name1
+.testH5Adelete_by_idx_name2
+.testH5Adelete_by_idx_order
+.testH5Arename_by_name
+.testH5Acreate2_invalidobject
+.testH5Acreate2
+.testH5Aiterate_by_name
+.testH5Adelete_by_idx_null
+.testH5Adelete_by_idx_invalidobject
+.testH5Awrite_readVL
+.testH5Aget_info1
+.testH5Oget_comment_by_name_null
+.testH5Ovisit_by_name_nullname
+.testH5Oget_info_invalid
+.testH5Ovisit_by_name_null
+.testH5Oget_comment_invalid
+.testH5Oset_comment_by_name_invalid
+.testH5Oopen_null
+.testH5Oclose_invalid
+.testH5Oget_comment_by_name_invalid
+.testH5Ocopy_null_dest
+.testH5Olink_invalid
+.testH5Oget_info_by_idx_invalid
+.testH5Oget_info_by_idx_null
+.testH5Olink_null_dest
+.testH5Oget_info_by_name_invalid
+.testH5Oget_info_by_name_null
+.testH5Ocopy_invalid
+.testH5Oset_comment_by_name_null
+.testH5Ocopy_null_current
+.testH5Oset_comment_invalid
+.testH5Oopen_invalid
+.testH5Ovisit_null
+.testH5Oexists_by_name
+.testH5Oget_info_by_idx_n0
+.testH5Oget_info_by_idx_n3
+.testH5Oget_info_by_name_not_exist_name
+.testH5Ovisit_by_name
+.testH5Oget_info_by_idx_name_not_exist_name
+.testH5Oget_info_datatype
+.testH5Oget_info_by_idx_not_exist_name
+.testH5Oopen_by_idx_n0
+.testH5Oopen_by_idx_n3
+.testH5Oopen_not_exists
+.testH5Ovisit
+.testH5Oget_info_by_idx_not_exist_create
+.testH5Oget_info_by_name_hardlink
+.testH5Oget_info_by_name_group
+.testH5Oopen_by_addr
+.testH5Oget_info_by_name_not_exists
+.testH5Oget_info_by_name_dataset
+.testH5Oget_info_group
+.testH5Oget_info_by_name_datatype
+.testH5Oget_info_hardlink
+.testH5Oget_info_by_idx_name_not_exist_create
+.testH5Oget_info_dataset
+.testH5OcopyRefsDatasettosameFile
+.testH5OcopyRefsDatasettodiffFile
+.testH5OcopyRefsAttr
+.testH5Oget_info_by_idx_n0_create
+.testH5Oget_info_softlink_dangle
+.testH5Oget_info_softlink
+.testH5Oget_info_externallink
+.testH5Ocopy
+.testH5Olink
+.testH5Ocomment_by_name
+.testH5Oget_info_by_idx_n1_create
+.testH5Ocomment
+.testH5Oinc_dec_count
+.testH5Ocomment_by_name_clear
+.testH5Ovisit_create
+.testH5Ocopy_dst_link_exists
+.testH5Ocomment_clear
+.testH5Ocopy_cur_not_exists
+.TestH5PLplugins
+.testH5Zfilter_avail
+.testH5Zunregister_predefined
+.testH5Zget_filter_info
+
+Time:  XXXX
+
+OK (626 tests)
+
+HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
+  #000: (file name) line (number) in H5Fopen(): can't set access and transfer property lists
+    major: File accessibilty
+    minor: Can't set value
+  #001: (file name) line (number) in H5P_verify_apl_and_dxpl(): not the required access property list
+    major: Property lists
+    minor: Inappropriate type
+  #002: (file name) line (number) in H5P_isa_class(): not a property list
+    major: Invalid arguments to routine
+    minor: Inappropriate type
+HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
+  #000: (file name) line (number) in H5Fopen(): can't set access and transfer property lists
+    major: File accessibilty
+    minor: Can't set value
+  #001: (file name) line (number) in H5P_verify_apl_and_dxpl(): not the required access property list
+    major: Property lists
+    minor: Inappropriate type
+  #002: (file name) line (number) in H5P_isa_class(): not a property list
+    major: Invalid arguments to routine
+    minor: Inappropriate type
diff --git a/java/test/Makefile.am b/java/test/Makefile.am
new file mode 100644
index 0000000..2c960ee
--- /dev/null
+++ b/java/test/Makefile.am
@@ -0,0 +1,104 @@
+#
+# 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.
+##
+## Makefile.am
+## Run automake to generate a Makefile.in from this file.
+##
+#
+# HDF5 Java native interface (JNI) Library Test Makefile(.in)
+
+include $(top_srcdir)/config/commence.am
+
+# Mark this directory as part of the JNI API
+JAVA_API=yes
+
+JAVAROOT = .classes
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+pkgpath = test
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+jarfile = jar$(PACKAGE_TARNAME)test.jar
+
+CLASSPATH_ENV=CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/junit.jar:$(top_srcdir)/java/lib/hamcrest-core.jar:$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+
+noinst_JAVA = \
+	TestH5.java \
+    TestH5E.java \
+    TestH5Edefault.java \
+    TestH5Eregister.java \
+    TestH5Fparams.java \
+    TestH5Fbasic.java \
+    TestH5F.java \
+    TestH5Fswmr.java \
+    TestH5Gbasic.java \
+    TestH5G.java \
+    TestH5Giterate.java \
+    TestH5Sbasic.java \
+    TestH5S.java \
+    TestH5Tparams.java \
+    TestH5Tbasic.java \
+    TestH5T.java \
+    TestH5Dparams.java \
+    TestH5D.java \
+    TestH5Dplist.java \
+    TestH5Lparams.java \
+    TestH5Lbasic.java \
+    TestH5Lcreate.java \
+    TestH5R.java \
+    TestH5P.java \
+    TestH5PData.java \
+    TestH5Pfapl.java \
+    TestH5Pvirtual.java \
+    TestH5Plist.java \
+    TestH5A.java \
+    TestH5Oparams.java \
+    TestH5Obasic.java \
+    TestH5Ocreate.java \
+    TestH5Ocopy.java \
+    TestH5PL.java \
+    TestH5Z.java \
+    TestAll.java
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+noinst_DATA = $(jarfile)
+
+.PHONY: classes
+
+check_SCRIPTS = junit.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class junit.sh
+
+#JAVA_JUNIT  = $(JAVA_SRCS)
+#noinst_JAVA = @JAVA_JUNIT@
+#EXTRA_JAVA  = $(JAVA_JUNIT)
+TESTS_JUNIT = AllJunitTests
+#EXTRA_TEST  = $(TESTS_JUNIT)
+
+AllJunitTests :
+	echo "#! /bin/sh" > $@
+	echo "exec @JUNIT@ test.TestAll" >> $@
+	chmod +x $@
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+include $(top_srcdir)/config/conclude.am
diff --git a/java/test/Makefile.in b/java/test/Makefile.in
new file mode 100644
index 0000000..384f000
--- /dev/null
+++ b/java/test/Makefile.in
@@ -0,0 +1,1336 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# 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.
+#
+# HDF5 Java native interface (JNI) Library Test Makefile(.in)
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+TESTS = $(TEST_SCRIPT)
+subdir = java/test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/H5config.h \
+	$(top_builddir)/fortran/src/H5config_f.inc
+CONFIG_CLEAN_FILES = junit.sh
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__java_sources = $(noinst_JAVA)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/bin/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/junit.sh.in \
+	$(top_srcdir)/bin/test-driver $(top_srcdir)/config/commence.am \
+	$(top_srcdir)/config/conclude.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@
+AMTAR = @AMTAR@
+
+# H5_CFLAGS holds flags that should be used when building hdf5,
+# but which should not be exported to h5cc for building other programs.
+# AM_CFLAGS is an automake construct which should be used by Makefiles 
+# instead of CFLAGS, as CFLAGS is reserved solely for the user to define.
+# This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well.
+AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@
+AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
+AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = $(H5_JAVACFLAGS) -deprecation
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
+AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
+AR = @AR@
+ASSERTS = @ASSERTS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
+BYTESEX = @BYTESEX@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_VERSION = @CC_VERSION@
+CFLAGS = @CFLAGS@
+CODESTACK = @CODESTACK@
+CONFIG_DATE = @CONFIG_DATE@
+CONFIG_MODE = @CONFIG_MODE@
+CONFIG_USER = @CONFIG_USER@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CXX_VERSION = @CXX_VERSION@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@
+DIRECT_VFD = @DIRECT_VFD@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTERNAL_FILTERS = @EXTERNAL_FILTERS@
+
+# Make sure that these variables are exported to the Makefiles
+F9XMODEXT = @F9XMODEXT@
+F9XMODFLAG = @F9XMODFLAG@
+F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_VERSION = @FC_VERSION@
+FGREP = @FGREP@
+FORTRAN_C_LONG_DOUBLE_IS_UNIQUE = @FORTRAN_C_LONG_DOUBLE_IS_UNIQUE@
+FORTRAN_HAVE_C_LONG_DOUBLE = @FORTRAN_HAVE_C_LONG_DOUBLE@
+FORTRAN_SIZEOF_LONG_DOUBLE = @FORTRAN_SIZEOF_LONG_DOUBLE@
+FSEARCH_DIRS = @FSEARCH_DIRS@
+Fortran_COMPILER_ID = @Fortran_COMPILER_ID@
+GREP = @GREP@
+H5CONFIG_F_IKIND = @H5CONFIG_F_IKIND@
+H5CONFIG_F_NUM_IKIND = @H5CONFIG_F_NUM_IKIND@
+H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
+H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
+H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
+H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
+H5_CPPFLAGS = @H5_CPPFLAGS@
+H5_CXXFLAGS = @H5_CXXFLAGS@
+H5_FCFLAGS = @H5_FCFLAGS@
+H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
+H5_LDFLAGS = @H5_LDFLAGS@
+H5_VERSION = @H5_VERSION@
+HADDR_T = @HADDR_T@
+HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_Fortran_INTEGER_SIZEOF_16 = @HAVE_Fortran_INTEGER_SIZEOF_16@
+HAVE_PTHREAD = @HAVE_PTHREAD@
+HDF5_HL = @HDF5_HL@
+HDF5_INTERFACES = @HDF5_INTERFACES@
+HDF_CXX = @HDF_CXX@
+HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
+HID_T = @HID_T@
+HL = @HL@
+HL_FOR = @HL_FOR@
+HSIZE_T = @HSIZE_T@
+HSSIZE_T = @HSSIZE_T@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LL_PATH = @LL_PATH@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_STATIC_EXEC = @LT_STATIC_EXEC@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
+MKDIR_P = @MKDIR_P@
+MPE = @MPE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAC_C_MAX_REAL_PRECISION = @PAC_C_MAX_REAL_PRECISION@
+PAC_FC_ALL_INTEGER_KINDS = @PAC_FC_ALL_INTEGER_KINDS@
+PAC_FC_ALL_INTEGER_KINDS_SIZEOF = @PAC_FC_ALL_INTEGER_KINDS_SIZEOF@
+PAC_FC_ALL_REAL_KINDS = @PAC_FC_ALL_REAL_KINDS@
+PAC_FC_ALL_REAL_KINDS_SIZEOF = @PAC_FC_ALL_REAL_KINDS_SIZEOF@
+PAC_FC_MAX_REAL_PRECISION = @PAC_FC_MAX_REAL_PRECISION@
+PAC_FORTRAN_NATIVE_DOUBLE_KIND = @PAC_FORTRAN_NATIVE_DOUBLE_KIND@
+PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF = @PAC_FORTRAN_NATIVE_DOUBLE_SIZEOF@
+PAC_FORTRAN_NATIVE_INTEGER_KIND = @PAC_FORTRAN_NATIVE_INTEGER_KIND@
+PAC_FORTRAN_NATIVE_INTEGER_SIZEOF = @PAC_FORTRAN_NATIVE_INTEGER_SIZEOF@
+PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
+PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
+PARALLEL = @PARALLEL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
+RANLIB = @RANLIB@
+ROOT = @ROOT@
+RUNPARALLEL = @RUNPARALLEL@
+RUNSERIAL = @RUNSERIAL@
+R_INTEGER = @R_INTEGER@
+R_LARGE = @R_LARGE@
+SEARCH = @SEARCH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZE_T = @SIZE_T@
+STATIC_EXEC = @STATIC_EXEC@
+STATIC_SHARED = @STATIC_SHARED@
+STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
+STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
+TESTPARALLEL = @TESTPARALLEL@
+
+#JAVA_JUNIT  = $(JAVA_SRCS)
+#noinst_JAVA = @JAVA_JUNIT@
+#EXTRA_JAVA  = $(JAVA_JUNIT)
+TESTS_JUNIT = AllJunitTests
+THREADSAFE = @THREADSAFE@
+TIME = @TIME@
+TR = @TR@
+TRACE_API = @TRACE_API@
+UNAME_INFO = @UNAME_INFO@
+USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
+USE_FILTER_SZIP = @USE_FILTER_SZIP@
+USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
+VERSION = @VERSION@
+WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_FC = @ac_ct_FC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+
+# Install directories that automake doesn't know about
+docdir = $(exec_prefix)/doc
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Shell commands used in Makefiles
+RM = rm -f
+CP = cp
+
+# Some machines need a command to run executables; this is that command
+# so that our tests will run.
+# We use RUNEXEC instead of RUNSERIAL directly because it may be that
+# some tests need to be run with a different command.  Older versions
+# of the makefiles used the command
+# $(LIBTOOL) --mode=execute
+# in some directories, for instance.
+RUNEXEC = $(RUNSERIAL)
+
+# Libraries to link to while building
+LIBHDF5 = $(top_builddir)/src/libhdf5.la
+LIBH5TEST = $(top_builddir)/test/libh5test.la
+LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
+LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
+LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
+LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
+LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
+LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
+LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la
+
+# Note that in svn revision 19400 the '/' after DESTDIR in H5* variables below  
+# has been removed. According to the official description of DESTDIR by Gnu at 
+# http://www.gnu.org/prep/standards/html_node/DESTDIR.html, DESTDIR is 
+# prepended to the normal and complete install path that it precedes for the 
+# purpose of installing in a temporary directory which is useful for building 
+# rpms and other packages.  The '/' after ${DESTDIR} will be followed by another 
+# '/' at the beginning of the normal install path.  When DESTDIR is empty the  
+# path then begins with '//', which is incorrect and causes problems at least for 
+# Cygwin.   
+
+# Scripts used to build examples
+# If only shared libraries have been installed, have h5cc build examples with
+# shared libraries instead of static libraries
+H5CC = ${DESTDIR}$(bindir)/h5cc
+H5CC_PP = ${DESTDIR}$(bindir)/h5pcc
+H5FC = ${DESTDIR}$(bindir)/h5fc
+H5FC_PP = ${DESTDIR}$(bindir)/h5pfc
+H5CPP = ${DESTDIR}$(bindir)/h5c++
+ACLOCAL_AMFLAGS = "-I m4"
+
+# The trace script; this is used on source files from the C library to
+# insert tracing macros.
+TRACE = perl $(top_srcdir)/bin/trace
+
+# .chkexe files are used to mark tests that have run successfully.
+# .chklog files are output from those tests.
+# *.clog and *.clog2 are from the MPE option.
+CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2
+
+# Mark this directory as part of the JNI API
+JAVA_API = yes
+JAVAROOT = .classes
+pkgpath = test
+hdfjarfile = jar$(PACKAGE_TARNAME)-$(PACKAGE_VERSION).jar
+jarfile = jar$(PACKAGE_TARNAME)test.jar
+CLASSPATH_ENV = CLASSPATH=.:$(JAVAROOT):$(top_builddir)/java/src/$(hdfjarfile):$(top_srcdir)/java/lib/junit.jar:$(top_srcdir)/java/lib/hamcrest-core.jar:$(top_srcdir)/java/lib/slf4j-api-1.7.5.jar:$(top_srcdir)/java/lib/ext/slf4j-simple-1.7.5.jar:$$CLASSPATH
+noinst_JAVA = \
+	TestH5.java \
+    TestH5E.java \
+    TestH5Edefault.java \
+    TestH5Eregister.java \
+    TestH5Fparams.java \
+    TestH5Fbasic.java \
+    TestH5F.java \
+    TestH5Fswmr.java \
+    TestH5Gbasic.java \
+    TestH5G.java \
+    TestH5Giterate.java \
+    TestH5Sbasic.java \
+    TestH5S.java \
+    TestH5Tparams.java \
+    TestH5Tbasic.java \
+    TestH5T.java \
+    TestH5Dparams.java \
+    TestH5D.java \
+    TestH5Dplist.java \
+    TestH5Lparams.java \
+    TestH5Lbasic.java \
+    TestH5Lcreate.java \
+    TestH5R.java \
+    TestH5P.java \
+    TestH5PData.java \
+    TestH5Pfapl.java \
+    TestH5Pvirtual.java \
+    TestH5Plist.java \
+    TestH5A.java \
+    TestH5Oparams.java \
+    TestH5Obasic.java \
+    TestH5Ocreate.java \
+    TestH5Ocopy.java \
+    TestH5PL.java \
+    TestH5Z.java \
+    TestAll.java
+
+noinst_DATA = $(jarfile)
+check_SCRIPTS = junit.sh
+TEST_SCRIPT = $(check_SCRIPTS)
+CLEANFILES = classnoinst.stamp $(jarfile) $(JAVAROOT)/$(pkgpath)/*.class junit.sh
+
+# Automake needs to be taught how to build lib, progs, and tests targets.
+# These will be filled in automatically for the most part (e.g.,
+# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and
+# EXTRA_TEST variables are supplied to allow the user to force targets to
+# be built at certain times. 
+LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES)                 \
+      $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB)
+
+PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS)   \
+        $(EXTRA_PROG)
+
+chk_TESTS = $(check_PROGRAMS) $(check_SCRIPTS) $(EXTRA_TEST) 
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+AM_SH_LOG_FLAGS = 
+TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_)
+TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_)
+TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_)
+TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign java/test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign java/test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+$(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+junit.sh: $(top_builddir)/config.status $(srcdir)/junit.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+classnoinst.stamp: $(am__java_sources)
+	@list1='$?'; list2=; if test -n "$$list1"; then \
+	  for p in $$list1; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    list2="$$list2 $$d$$p"; \
+	  done; \
+	  echo '$(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) '"$$list2"; \
+	  $(CLASSPATH_ENV) $(JAVAC) -d $(JAVAROOT) $(AM_JAVACFLAGS) $(JAVACFLAGS) $$list2; \
+	else :; fi
+	echo timestamp > $@
+
+clean-noinstJAVA:
+	-rm -f *.class classnoinst.stamp
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+recheck: all $(check_SCRIPTS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+.sh.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile classnoinst.stamp $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean-am: clean-generic clean-libtool clean-noinstJAVA mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+	mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am all-local check check-TESTS check-am clean \
+	clean-generic clean-libtool clean-noinstJAVA cscopelist-am \
+	ctags-am distclean distclean-generic distclean-libtool distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \
+	recheck tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# List all build rules defined by HDF5 Makefiles as "PHONY" targets here.
+# This tells the Makefiles that these targets are not files to be built but
+# commands that should be executed even if a file with the same name already
+# exists.
+.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \
+        build-tests check-clean check-install check-p check-s check-vfd \
+        install-doc lib progs tests uninstall-doc _exec_check-s _test help
+
+help:
+	@$(top_srcdir)/bin/makehelp
+
+classes:
+	$(MKDIR_P) $(@D)/$(JAVAROOT)
+
+$(jarfile): classnoinst.stamp classes
+	$(JAR) cvf $@ -C $(JAVAROOT)/ $(pkgpath)
+
+.PHONY: classes
+#EXTRA_TEST  = $(TESTS_JUNIT)
+
+AllJunitTests :
+	echo "#! /bin/sh" > $@
+	echo "exec @JUNIT@ test.TestAll" >> $@
+	chmod +x $@
+
+clean:
+	rm -rf $(JAVAROOT)
+	rm -f $(jarfile)
+	rm -f classnoinst.stamp
+
+# lib/progs/tests targets recurse into subdirectories. build-* targets
+# build files in this directory.
+build-lib: $(LIB)
+build-progs: $(LIB) $(PROGS)
+build-tests: $(LIB) $(PROGS) $(chk_TESTS)
+
+# General rule for recursive building targets.
+# BUILT_SOURCES contain targets that need to be built before anything else
+# in the directory (e.g., for Fortran type detection)
+lib progs tests check-s check-p :: $(BUILT_SOURCES)
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# General rule for recursive cleaning targets.  Like the rule above,
+# but doesn't require building BUILT_SOURCES.
+check-clean ::
+	@$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1;
+	@for d in X $(SUBDIRS); do                                             \
+	    if test $$d != X && test $$d != .; then                           \
+	        (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1;     \
+	    fi;                                                               \
+	done
+
+# Tell Automake to build tests when the user types `make all' (this is
+# not its default behavior).  Also build EXTRA_LIB and EXTRA_PROG since
+# Automake won't build them automatically, either.
+all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS)
+
+# make install-doc doesn't do anything outside of doc directory, but
+# Makefiles should recognize it.
+# UPDATE: docs no longer reside in this build tree, so this target
+# is depreciated.
+install-doc uninstall-doc:
+	@echo "Nothing to be done."
+
+# clean up files generated by tests so they can be re-run.
+build-check-clean:
+	$(RM) -rf $(CHECK_CLEANFILES)
+
+# run check-clean whenever mostlyclean is run
+mostlyclean-local: build-check-clean
+
+# check-install is just a synonym for installcheck
+check-install: installcheck
+
+# Run each test in order, passing $(TEST_FLAGS) to the program.
+# Since tests are done in a shell loop, "make -i" does apply inside it.
+# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+# The timestamps give a rough idea how much time the tests use.
+#
+# Note that targets in chk_TESTS (defined above) will be built when the user
+# types 'make tests' or 'make check', but only programs in TEST_PROG,
+# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed.
+check-TESTS: test
+
+test _test:
+	@$(MAKE) build-check-s
+	@$(MAKE) build-check-p
+
+# Actual execution of check-s.
+build-check-s: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	   echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@$(MAKE) $(AM_MAKEFLAGS) _exec_check-s
+	@if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then      \
+	    echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH)
+
+# The dummy.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \
+	   tname=$(@:.chkexe_=)$(EXEEXT);\
+	   log=$(@:.chkexe_=.chklog); \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\
+	      else \
+	         echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \
+	         echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(RUNEXEC) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $(@:.chkexe_=.chkexe) || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	fi
+
+# The dummysh.chkexe here prevents the target from being
+# empty if there are no tests in the current directory.
+# $${log} is the log file.
+# $${tname} is the name of test.
+$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_:
+	@if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \
+	   cmd=$(@:.chkexe_=);\
+	   tname=`basename $$cmd`;\
+	   chkname=`basename $(@:.chkexe_=.chkexe)`;\
+	   log=`basename $(@:.chkexe_=.chklog)`; \
+	   echo "============================"; \
+	   if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \
+	      echo "No need to test $${tname} again."; \
+	   else \
+	      echo "============================" > $${log}; \
+	      if test "X$(FORTRAN_API)" = "Xyes"; then \
+	         echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      elif test "X$(CXX_API)" = "Xyes"; then \
+	         echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      else \
+	         echo "Testing $${tname} $(TEST_FLAGS)"; \
+	         echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \
+	      fi; \
+	      echo "============================" >> $${log}; \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	      srcdir="$(srcdir)" \
+	         $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \
+	         && touch $${chkname} || \
+	         (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \
+	         (cat $${log} && false) || exit 1; \
+	      echo "" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \
+	      echo "============================" >> $${log}; \
+	      echo "Finished testing $${tname} $(TEST_FLAGS)"; \
+	      cat $${log}; \
+	   fi; \
+	   echo "============================"; \
+	fi
+
+# Actual execution of check-p.
+build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	   echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \
+	fi
+	@if test -n "$(TEST_PROG_PARA)"; then                                \
+	    echo "**** Hint ****";                                            \
+	    echo "Parallel test files reside in the current directory"        \
+	         "by default.";                                               \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";       \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";                          \
+	    echo "    export HDF5_PARAPREFIX";                                \
+	    echo "    make check";                                            \
+	    echo "**** end of Hint ****";                                     \
+	fi
+	@for test in $(TEST_PROG_PARA) dummy; do                             \
+	   if test $$test != dummy; then                                      \
+	      $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \
+	      RUNEXEC="$(RUNPARALLEL)" || exit 1; \
+	   fi;                                                                \
+	done
+	@for test in $(TEST_SCRIPT_PARA) dummy; do                           \
+	  if test $$test != dummy; then                                      \
+	    $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \
+	  fi;                                                                 \
+	done
+	@if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then      \
+	    echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\
+	fi
+
+# Run test with different Virtual File Driver
+check-vfd: $(LIB) $(PROGS) $(chk_TESTS)
+	@for vfd in $(VFD_LIST) dummy; do                                     \
+	    if test $$vfd != dummy; then                                      \
+	        echo "============================";                          \
+	        echo "Testing Virtual File Driver $$vfd";                     \
+	        echo "============================";                          \
+	        $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1;                \
+	        HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1;    \
+	    fi;                                                               \
+	done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/java/test/TestAll.java b/java/test/TestAll.java
new file mode 100644
index 0000000..a4b44c3
--- /dev/null
+++ b/java/test/TestAll.java
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+ at RunWith(Suite.class)
+ at Suite.SuiteClasses( { TestH5.class,
+        TestH5Eregister.class,
+        TestH5Edefault.class,
+        TestH5E.class,
+        TestH5Fparams.class, TestH5Fbasic.class, TestH5F.class, TestH5Fswmr.class,
+        TestH5Gbasic.class, TestH5G.class, TestH5Giterate.class,
+        TestH5Sbasic.class, TestH5S.class,
+        TestH5Tparams.class, TestH5Tbasic.class, TestH5T.class,
+        TestH5Dparams.class, TestH5D.class, TestH5Dplist.class,
+        TestH5Lparams.class, TestH5Lbasic.class, TestH5Lcreate.class,
+        TestH5R.class,
+        TestH5P.class, TestH5PData.class, TestH5Pfapl.class, TestH5Pvirtual.class, TestH5Plist.class,
+        TestH5A.class,
+        TestH5Oparams.class, TestH5Obasic.class, TestH5Ocopy.class, TestH5Ocreate.class,
+        TestH5PL.class, TestH5Z.class
+})
+
+public class TestAll {
+}
diff --git a/java/test/TestH5.java b/java/test/TestH5.java
new file mode 100644
index 0000000..3ab4f3c
--- /dev/null
+++ b/java/test/TestH5.java
@@ -0,0 +1,257 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+/**
+ * @author xcao
+ *
+ */
+public class TestH5 {
+    @Rule public TestName testname = new TestName();
+    @Before
+    public void showTestName() {
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    /**
+     * Test method for {@link hdf.hdf5lib.H5#J2C(int)}.
+     * NOTE:
+     * H5F_ACC_DEBUG no longer prints any special debug info. The symbol is
+     * being retained and will be listed as deprecated in HDF5 1.10.0.
+     */
+    @Test
+    public void testJ2C() {
+        int H5F_ACC_RDONLY = 0x0000;
+        int H5F_ACC_RDWR = 0x0001;
+        int H5F_ACC_TRUNC = 0x0002;
+        int H5F_ACC_EXCL = 0x0004;
+        int H5F_ACC_DEBUG =  0x0000; // HDFFV-1074 was 0x0008;
+        int H5F_ACC_CREAT = 0x0010;
+        int H5F_OBJ_FILE = 0x0001;
+        int H5F_OBJ_DATASET = 0x0002;
+        int H5F_OBJ_GROUP = 0x0004;
+        int H5F_OBJ_DATATYPE = 0x0008;
+        int H5F_OBJ_ATTR = 0x0010;
+        int H5F_OBJ_ALL = H5F_OBJ_FILE | H5F_OBJ_DATASET | H5F_OBJ_GROUP
+                | H5F_OBJ_DATATYPE | H5F_OBJ_ATTR;
+        int H5F_OBJ_LOCAL = 0x0020;
+
+        int definedValues[] = { H5F_ACC_RDONLY, H5F_ACC_RDWR, H5F_ACC_TRUNC,
+                H5F_ACC_EXCL, H5F_ACC_DEBUG, H5F_ACC_CREAT, H5F_OBJ_FILE,
+                H5F_OBJ_DATASET, H5F_OBJ_GROUP, H5F_OBJ_DATATYPE, H5F_OBJ_ATTR,
+                H5F_OBJ_ALL, H5F_OBJ_LOCAL };
+
+        int j2cValues[] = { HDF5Constants.H5F_ACC_RDONLY,
+                HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5F_ACC_EXCL, H5F_ACC_DEBUG,
+                HDF5Constants.H5F_ACC_CREAT, HDF5Constants.H5F_OBJ_FILE,
+                HDF5Constants.H5F_OBJ_DATASET, HDF5Constants.H5F_OBJ_GROUP,
+                HDF5Constants.H5F_OBJ_DATATYPE, HDF5Constants.H5F_OBJ_ATTR,
+                HDF5Constants.H5F_OBJ_ALL, HDF5Constants.H5F_OBJ_LOCAL };
+
+        for (int i = 0; i < definedValues.length; i++) {
+            assertEquals(definedValues[i], j2cValues[i]);
+        }
+
+        assertFalse(H5F_ACC_RDONLY == HDF5Constants.H5F_ACC_RDWR);
+        assertFalse(H5F_OBJ_FILE == HDF5Constants.H5F_OBJ_GROUP);
+    }
+
+    /**
+     * Test method for {@link hdf.hdf5lib.H5#H5error_off()}.
+     */
+    @Test
+    public void testH5error_off() {
+        try {
+            H5.H5error_off();
+        }
+        catch (Throwable err) {
+            fail("H5.H5error_off failed: " + err);
+        }
+    }
+
+    /**
+     * Test method for {@link hdf.hdf5lib.H5#H5open()}.
+     */
+    @Test
+    public void testH5open() {
+        try {
+            H5.H5open();
+        }
+        catch (Throwable err) {
+            fail("H5.H5open failed: " + err);
+        }
+    }
+
+    /**
+     * Test method for {@link hdf.hdf5lib.H5#H5garbage_collect()}.
+     */
+    @Test
+    public void testH5garbage_collect() {
+        try {
+            H5.H5garbage_collect();
+        }
+        catch (Throwable err) {
+            fail("H5.H5garbage_collect failed: " + err);
+        }
+    }
+
+    /**
+     * Test method for
+     * {@link hdf.hdf5lib.H5#H5set_free_list_limits(int, int, int, int, int, int)}
+     * .
+     */
+    @Test
+    public void testH5set_free_list_limits() {
+        int reg_global_lim = 1;
+        int reg_list_lim = 1;
+        int arr_global_lim = 1;
+        int arr_list_lim = 1;
+        int blk_global_lim = 1;
+        int blk_list_lim = 1;
+
+        try {
+            H5.H5set_free_list_limits(reg_global_lim, reg_list_lim,
+                    arr_global_lim, arr_list_lim, blk_global_lim, blk_list_lim);
+        }
+        catch (Throwable err) {
+            fail("H5.H5set_free_list_limits failed: " + err);
+        }
+    }
+
+    /**
+     * Test method for {@link hdf.hdf5lib.H5#H5get_libversion(int[])}.
+     */
+    @Test
+    public void testH5get_libversion() {
+        int libversion[] = { 1, 10, 0 };
+
+        try {
+            H5.H5get_libversion(libversion);
+        }
+        catch (Throwable err) {
+            fail("H5.H5get_libversion: " + err);
+        }
+
+        for (int i = 0; i < 2; i++)
+            assertEquals(H5.LIB_VERSION[i], libversion[i]);
+
+        for (int i = 0; i < 2; i++)
+            assertFalse(libversion[i] == 0);
+    }
+
+    /**
+     * Test method for
+     * {@link hdf.hdf5lib.H5#H5check_version(int, int, int)}.
+     */
+    @Test
+    public void testH5check_version() {
+        int majnum = 1, minnum = 10, relnum = 0;
+
+        try {
+            H5.H5check_version(majnum, minnum, relnum);
+        }
+        catch (Throwable err) {
+            fail("H5.H5check_version failed: " + err);
+        }
+
+        try {
+            H5.H5check_version(-1, 0, 0);
+        }
+        catch (Throwable err) {
+            fail("H5.H5check_version failed: " + err);
+        }
+    }
+
+    @Test
+    public void testIsSerializable() {
+        H5 test = new H5();
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ObjectOutputStream oos;
+        try {
+            oos = new ObjectOutputStream(out);
+            oos.writeObject(test);
+            oos.close();
+        }
+        catch (IOException err) {
+            err.printStackTrace();
+            fail("ObjectOutputStream failed: " + err);
+        }
+        assertTrue(out.toByteArray().length > 0);
+
+    }
+
+    @SuppressWarnings("static-access")
+    @Test
+    public void serializeToDisk()
+    {
+        try {
+            H5 test = new H5();
+
+            FileOutputStream fos = new FileOutputStream("temph5.ser");
+            ObjectOutputStream oos = new ObjectOutputStream(fos);
+            oos.writeObject(test);
+            oos.close();
+        }
+        catch (Exception ex) {
+            fail("Exception thrown during test: " + ex.toString());
+        }
+
+        try {
+            FileInputStream fis = new FileInputStream("temph5.ser");
+            ObjectInputStream ois = new ObjectInputStream(fis);
+            H5 test = (hdf.hdf5lib.H5) ois.readObject();
+            ois.close();
+
+            assertTrue("H5.LIB_VERSION[0]", test.LIB_VERSION[0]==H5.LIB_VERSION[0]);
+            assertTrue("H5.LIB_VERSION[1]", test.LIB_VERSION[1]==H5.LIB_VERSION[1]);
+            assertTrue("H5.LIB_VERSION[2]", test.LIB_VERSION[2]==H5.LIB_VERSION[2]);
+
+            // Clean up the file
+            new File("temph5.ser").delete();
+        }
+        catch (Exception ex) {
+            fail("Exception thrown during test: " + ex.toString());
+        }
+    }
+}
diff --git a/java/test/TestH5A.java b/java/test/TestH5A.java
new file mode 100644
index 0000000..fb7b31a
--- /dev/null
+++ b/java/test/TestH5A.java
@@ -0,0 +1,1119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5A_iterate_cb;
+import hdf.hdf5lib.callbacks.H5A_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5A_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5A {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+    long type_id = -1;
+    long space_id = -1;
+    long lapl_id = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name, HDF5Constants.H5T_STD_I32BE, dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5A._createDataset: ", did > 0);
+
+        return did;
+    }
+
+    @Before
+    public void createH5file() throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0", H5.getOpenIDCount() == 0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("TestH5A.createH5file: H5.H5Fcreate: ", H5fid > 0);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            assertTrue("TestH5A.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+            H5did = _createDataset(H5fid, H5dsid, "dset",
+                    HDF5Constants.H5P_DEFAULT);
+            assertTrue("TestH5A.createH5file: _createDataset: ", H5did > 0);
+            space_id = H5.H5Screate(HDF5Constants.H5S_NULL);
+            assertTrue(space_id > 0);
+            lapl_id = H5.H5Pcreate(HDF5Constants.H5P_ATTRIBUTE_ACCESS);
+            assertTrue(lapl_id > 0);
+            type_id = H5.H5Tenum_create(HDF5Constants.H5T_STD_I32LE);
+            assertTrue(type_id > 0);
+            int status = H5.H5Tenum_insert(type_id, "test", 1);
+            assertTrue(status >= 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5A.createH5file: " + err);
+        }
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+
+        if (type_id > 0)
+            try {H5.H5Tclose(type_id);} catch (Exception ex) {}
+        if (space_id > 0)
+            try {H5.H5Sclose(space_id);} catch (Exception ex) {}
+        if (lapl_id > 0)
+            try {H5.H5Pclose(lapl_id);} catch (Exception ex) {}
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Acreate2() {
+        long attr_id = -1;
+        try {
+            attr_id = H5.H5Acreate(H5did, "dset", type_id, space_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Acreate2", attr_id >= 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Acreate2: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Acreate2_invalidobject() throws Throwable {
+        H5.H5Acreate(H5dsid, "dset", type_id, space_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Acreate2_nullname() throws Throwable {
+        H5.H5Acreate(H5did, null, type_id, space_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Aopen() {
+        String attr_name = "dset";
+        long attribute_id = -1;
+        long attr_id = -1;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, attr_name, type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+            // Opening the existing attribute, attr_name(Created by H5ACreate2)
+            // attached to an object identifier.
+            attribute_id = H5.H5Aopen(H5did, attr_name,
+                    HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Aopen: H5Aopen", attribute_id >= 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aopen: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Aopen_invalidname() throws Throwable {
+        H5.H5Aopen(H5did, "attr_name", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Aopen_by_idx() {
+        long loc_id = H5did;
+        String obj_name = ".";
+        int idx_type = HDF5Constants.H5_INDEX_CRT_ORDER;
+        int order = HDF5Constants.H5_ITER_INC;
+        long n = 0;
+        long attr_id = -1;
+        long attribute_id = -1;
+        long aapl_id = HDF5Constants.H5P_DEFAULT;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, "file", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+            // Opening the existing attribute, obj_name(Created by H5ACreate2)
+            // by index, attached to an object identifier.
+            attribute_id = H5.H5Aopen_by_idx(H5did, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC,
+                    0, HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            assertTrue("testH5Aopen_by_idx: H5Aopen_by_idx", attribute_id >= 0);
+
+            // Negative test- Error should be thrown when H5Aopen_by_idx is
+            // called
+            // with n=5 and we do not have 5 attributes created.
+            try {
+                n = 5;
+                H5.H5Aopen_by_idx(loc_id, obj_name, idx_type, order, n,
+                        aapl_id, lapl_id);
+                fail("Negative Test Failed:- Error not Thrown when n is invalid.");
+            }
+            catch (AssertionError err) {
+                fail("H5.H5Aopen_by_idx: " + err);
+            }
+            catch (HDF5LibraryException err) {}
+
+            // Negative test- Error should be thrown when H5Aopen_by_idx is
+            // called
+            // with an invalid object name(which hasn't been created).
+            try {
+                n = 0;
+                obj_name = "file";
+                H5.H5Aopen_by_idx(loc_id, obj_name, idx_type, order, n,
+                        aapl_id, lapl_id);
+                fail("Negative Test Failed:- Error not Thrown when attribute name is invalid.");
+            }
+            catch (AssertionError err) {
+                fail("H5.H5Aopen_by_idx: " + err);
+            }
+            catch (HDF5LibraryException err) {}
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aopen_by_idx: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Acreate_by_name() {
+        String obj_name = ".";
+        String attr_name = "DATASET";
+        long attribute_id = -1;
+        boolean bool_val = false;
+
+        try {
+            attribute_id = H5.H5Acreate_by_name(H5fid, obj_name, attr_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            assertTrue("testH5Acreate_by_name: H5Acreate_by_name",
+                    attribute_id >= 0);
+
+            // Check if the name of attribute attached to the object specified
+            // by loc_id and obj_name exists.It should be true.
+            bool_val = H5.H5Aexists_by_name(H5fid, obj_name, attr_name,
+                    lapl_id);
+            assertTrue("testH5Acreate_by_name: H5Aexists_by_name",
+                    bool_val == true);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Acreate_by_name " + err);
+        }
+        finally {
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Arename() throws Throwable, HDF5LibraryException, NullPointerException {
+        long loc_id = H5fid;
+        String old_attr_name = "old";
+        String new_attr_name = "new";
+        long attr_id = -1;
+        int ret_val = -1;
+        boolean bool_val = false;
+
+        try {
+            attr_id = H5.H5Acreate(loc_id, old_attr_name, type_id, space_id, HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            ret_val = H5.H5Arename(loc_id, old_attr_name, new_attr_name);
+
+            // Check the return value.It should be non negative.
+            assertTrue("testH5Arename: H5Arename", ret_val >= 0);
+
+            // Check if the new name of attribute attached to the object
+            // specified by loc_id and obj_name exists.It should be true.
+            bool_val = H5.H5Aexists(loc_id, new_attr_name);
+            assertTrue("testH5Arename: H5Aexists", bool_val == true);
+
+            // Check if the old name of attribute attached to the object
+            // specified by loc_id and obj_name exists. It should equal false.
+            bool_val = H5.H5Aexists(loc_id, old_attr_name);
+            assertEquals(bool_val, false);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Arename " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Arename_by_name() {
+        long loc_id = H5fid;
+        String obj_name = ".";
+        String old_attr_name = "old";
+        String new_attr_name = "new";
+        long attr_id = -1;
+        int ret_val = -1;
+        boolean bool_val = false;
+
+        try {
+            attr_id = H5.H5Acreate_by_name(loc_id, obj_name, old_attr_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            ret_val = H5.H5Arename_by_name(loc_id, obj_name, old_attr_name,
+                    new_attr_name, lapl_id);
+
+            // Check the return value.It should be non negative.
+            assertTrue("testH5Arename_by_name: H5Arename_by_name", ret_val >= 0);
+
+            // Check if the new name of attribute attached to the object
+            // specified by loc_id and obj_name exists.It should be true.
+            bool_val = H5.H5Aexists_by_name(loc_id, obj_name, new_attr_name,
+                    lapl_id);
+            assertTrue("testH5Arename_by_name: H5Aexists_by_name",
+                    bool_val == true);
+
+            // Check if the old name of attribute attached to the object
+            // specified by loc_id and obj_name exists. It should equal false.
+            bool_val = H5.H5Aexists_by_name(loc_id, obj_name, old_attr_name,
+                    lapl_id);
+            assertEquals(bool_val, false);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Arename_by_name " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_name() {
+        String obj_name = ".";
+        String attr_name = "DATASET1";
+        String ret_name = null;
+        long attribute_id = -1;
+
+        try {
+            attribute_id = H5.H5Acreate_by_name(H5fid, obj_name, attr_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            assertTrue("testH5Aget_name: H5Acreate_by_name ", attribute_id > 0);
+            ret_name = H5.H5Aget_name(attribute_id);
+            assertEquals(ret_name, attr_name);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Aget_name " + err);
+        }
+        finally {
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+
+    @Test
+    public void testH5Aget_name_by_idx() {
+        long loc_id = H5fid;
+        String obj_name = ".";
+        String attr_name = "DATASET1", attr2_name = "DATASET2";
+        String ret_name = null;
+        int idx_type = HDF5Constants.H5_INDEX_NAME;
+        int order = HDF5Constants.H5_ITER_INC;
+        int n = 0;
+        long attr1_id = -1;
+        long attr2_id = -1;
+
+        try {
+            attr1_id = H5.H5Acreate_by_name(loc_id, obj_name, attr_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(loc_id, obj_name, attr2_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            // getting the 1st attribute name(n=0).
+            ret_name = H5.H5Aget_name_by_idx(loc_id, obj_name, idx_type, order,
+                    n, lapl_id);
+            assertFalse("H5Aget_name_by_idx ", ret_name == null);
+            assertEquals(ret_name, attr_name);
+
+            // getting the second attribute name(n=1)
+            ret_name = H5.H5Aget_name_by_idx(loc_id, obj_name, idx_type, order,
+                    1, lapl_id);
+            assertFalse("H5Aget_name_by_idx ", ret_name == null);
+            assertEquals(ret_name, attr2_name);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_name_by_idx " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_storage_size() {
+        long attr_id = -1;
+        long attr_size = -1;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, "dset", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+            attr_size = H5.H5Aget_storage_size(attr_id);
+            assertTrue("The size of attribute is :", attr_size == 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_storage_size: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_info() {
+        H5A_info_t attr_info = null;
+        long attribute_id = -1;
+        long attr_id = -1;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, "dset", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            attribute_id = H5.H5Aopen(H5did, "dset", HDF5Constants.H5P_DEFAULT);
+            // Calling H5Aget_info with attribute_id returned from H5Aopen.
+            attr_info = H5.H5Aget_info(attribute_id);
+            assertFalse("H5Aget_info ", attr_info == null);
+            assertTrue("Corder_Valid should be false",
+                    attr_info.corder_valid == false);
+            assertTrue("Character set used for attribute name",
+                    attr_info.cset == HDF5Constants.H5T_CSET_ASCII);
+            assertTrue("Corder ", attr_info.corder == 0);
+            assertEquals(attr_info.data_size, H5.H5Aget_storage_size(attr_id));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_info: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_info1() {
+        H5A_info_t attr_info = null;
+        long attribute_id = -1;
+        long attr_id = -1;
+        int order = HDF5Constants.H5_ITER_INC;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, ".", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            attribute_id = H5.H5Aopen_by_idx(H5did, ".",
+                    HDF5Constants.H5_INDEX_CRT_ORDER, order, 0,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            // Calling H5Aget_info with attribute_id returned from
+            // H5Aopen_by_idx.
+            attr_info = H5.H5Aget_info(attribute_id);
+
+            assertFalse("H5Aget_info ", attr_info == null);
+            assertTrue("Corder_Valid should be true",
+                    attr_info.corder_valid == true);
+            assertTrue("Character set",
+                    attr_info.cset == HDF5Constants.H5T_CSET_ASCII);
+            assertTrue("Corder ", attr_info.corder == 0);
+            assertEquals(attr_info.data_size, H5.H5Aget_storage_size(attr_id));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_info1: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_info_by_idx() {
+        long attr_id = -1;
+        long attr2_id = -1;;
+        H5A_info_t attr_info = null;
+
+        try {
+            attr_id = H5.H5Acreate(H5did, "dset1", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            attr2_id = H5.H5Acreate(H5did, "dataset2", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+            //Verify info for 1st attribute, in increasing creation order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder ", attr_info.corder == 0);//should equal 0 as this is the order of 1st attribute created.
+            assertEquals(attr_info.data_size, H5.H5Aget_storage_size(attr_id));
+
+            //Verify info for 2nd attribute, in increasing creation order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 1, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder", attr_info.corder == 1);
+            assertEquals(attr_info.data_size, H5.H5Aget_storage_size(attr2_id));
+
+            //verify info for 2nd attribute, in decreasing creation order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_DEC, 0, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder", attr_info.corder == 1); //should equal 1 as this is the order of 2nd attribute created.
+
+            //verify info for 1st attribute, in decreasing creation order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_DEC, 1, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder", attr_info.corder == 0); //should equal 0 as this is the order of 1st attribute created.
+
+            //verify info for 1st attribute, in increasing name order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 1, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder", attr_info.corder == 0); //should equal 0 as this is the order of 1st attribute created.
+
+            //verify info for 2nd attribute, in decreasing name order
+            attr_info = H5.H5Aget_info_by_idx(H5did, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_DEC, 1, lapl_id);
+            assertNotNull(attr_info);
+            assertTrue("Corder", attr_info.corder == 1); //should equal 1 as this is the order of 2nd attribute created.
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_info_by_idx:" + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_info_by_name() {
+        long attr_id = -1;
+        H5A_info_t attr_info = null;
+        String obj_name = ".";
+        String attr_name = "DATASET";
+
+        try {
+            attr_id = H5.H5Acreate_by_name(H5fid, obj_name, attr_name, type_id,
+                    space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr_info = H5.H5Aget_info_by_name(H5fid, obj_name, attr_name,
+                    lapl_id);
+            assertNotNull(attr_info);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aget_info_by_name:" + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Adelete_by_name() {
+        long attr_id = -1;
+        int ret_val = -1;
+        boolean bool_val = false;
+        boolean exists = false;
+
+        try {
+            attr_id = H5.H5Acreate_by_name(H5fid, ".", "DATASET",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            ret_val = H5.H5Adelete_by_name(H5fid, ".", "DATASET", lapl_id);
+            assertTrue("H5Adelete_by_name", ret_val >= 0);
+
+            // Check if the Attribute still exists.
+            bool_val = H5.H5Aexists_by_name(H5fid, ".", "DATASET",
+                    lapl_id);
+            assertFalse("testH5Adelete_by_name: H5Aexists_by_name", bool_val);
+            exists = H5.H5Aexists(H5fid, "DATASET");
+            assertFalse("testH5Adelete_by_name: H5Aexists ",exists);
+
+            // Negative test. Error thrown when we try to delete an attribute
+            // that has already been deleted.
+            try{
+                ret_val = H5.H5Adelete_by_name(H5fid, ".", "DATASET", lapl_id);
+                fail("Negative Test Failed: Error Not thrown.");
+            }
+            catch (AssertionError err) {
+                fail("H5.H5Adelete_by_name: " + err);
+            }
+            catch (HDF5LibraryException err) {}
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Adelete_by_name " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aexists() {
+        boolean exists = false;
+        long attr_id = -1;
+        long attribute_id = -1;
+
+        try {
+            exists = H5.H5Aexists(H5fid, "None");
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aexists: " + err);
+        }
+        assertFalse("H5Aexists ", exists);
+
+        try {
+            attr_id = H5.H5Acreate(H5fid, "dset", type_id, space_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            exists = H5.H5Aexists(H5fid, "dset");
+            assertTrue("H5Aexists ", exists);
+
+            attribute_id = H5.H5Acreate_by_name(H5fid, ".", "attribute",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            exists = H5.H5Aexists(H5fid, "attribute");
+            assertTrue("H5Aexists ", exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aexists: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Adelete_by_idx_order() {
+        boolean exists = false;
+        long attr1_id = -1;
+        long attr2_id = -1;
+        long attr3_id = -1;
+        long attr4_id = -1;
+
+        try {
+            attr1_id = H5.H5Acreate_by_name(H5fid, ".", "attribute1",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(H5fid, ".", "attribute2",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr3_id = H5.H5Acreate_by_name(H5fid, ".", "attribute3",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr4_id = H5.H5Acreate_by_name(H5fid, ".", "attribute4",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            H5.H5Adelete_by_idx(H5fid, ".", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 3, lapl_id);
+            exists = H5.H5Aexists(H5fid, "attribute4");
+            assertFalse("H5Adelete_by_idx: H5Aexists", exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Adelete_by_idx: " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+            if (attr3_id > 0)
+                try {H5.H5Aclose(attr3_id);} catch (Exception ex) {}
+            if (attr4_id > 0)
+                try {H5.H5Aclose(attr4_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Adelete_by_idx_name1() {
+        boolean exists = false;
+        long attr1_id = -1;
+        long attr2_id = -1;
+        long attr3_id = -1;
+
+        try {
+            attr1_id = H5.H5Acreate_by_name(H5fid, ".", "attribute1",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(H5fid, ".", "attribute2",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr3_id = H5.H5Acreate_by_name(H5fid, ".", "attribute3",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            H5.H5Adelete_by_idx(H5fid, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, lapl_id);
+            exists = H5.H5Aexists(H5fid, "attribute3");
+            assertFalse("H5Adelete_by_idx: H5Aexists", exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Adelete_by_idx: " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+            if (attr3_id > 0)
+                try {H5.H5Aclose(attr3_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Adelete_by_idx_name2() {
+        boolean exists = false;
+        long attr1_id = -1;
+        long attr2_id = -1;
+        long attr3_id = -1;
+        long attr4_id = -1;
+
+        try {
+            attr1_id = H5.H5Acreate_by_name(H5fid, ".", "attribute1",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(H5fid, ".", "attribute2",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr3_id = H5.H5Acreate_by_name(H5fid, ".", "attribute3",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr4_id = H5.H5Acreate_by_name(H5fid, ".", "attribute4",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            H5.H5Adelete_by_idx(H5fid, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_DEC, 3, lapl_id);
+            exists = H5.H5Aexists(H5fid, "attribute1");
+            assertFalse("H5Adelete_by_idx: H5Aexists", exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Adelete_by_idx: " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+            if (attr3_id > 0)
+                try {H5.H5Aclose(attr3_id);} catch (Exception ex) {}
+            if (attr4_id > 0)
+                try {H5.H5Aclose(attr4_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Adelete_by_idx_null() throws Throwable {
+        H5.H5Adelete_by_idx(H5fid, null, HDF5Constants.H5_INDEX_CRT_ORDER,
+                HDF5Constants.H5_ITER_INC, 0, lapl_id);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Adelete_by_idx_invalidobject() throws Throwable {
+        H5.H5Adelete_by_idx(H5fid, "invalid", HDF5Constants.H5_INDEX_CRT_ORDER,
+                HDF5Constants.H5_ITER_INC, 0, lapl_id);
+    }
+
+    @Test
+    public void testH5Aopen_by_name() {
+        String obj_name = ".";
+        String attr_name = "DATASET";
+        long attribute_id = -1;
+        long aid = -1;
+
+        try {
+            attribute_id = H5.H5Acreate_by_name(H5fid, obj_name, attr_name,
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+
+            //open Attribute by name
+            if(attribute_id >= 0) {
+                try {
+                    aid = H5.H5Aopen_by_name(H5fid, obj_name, attr_name, HDF5Constants.H5P_DEFAULT, lapl_id);
+                    assertTrue("testH5Aopen_by_name: ", aid>=0);
+                }
+                catch(Throwable err) {
+                    err.printStackTrace();
+                    fail("H5.H5Aopen_by_name " + err);
+                }
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Aopen_by_name " + err);
+        }
+        finally {
+            if (aid > 0)
+                try {H5.H5Aclose(aid);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Awrite_readVL() {
+        String attr_name = "VLdata";
+        long attr_id = -1;
+        long atype_id = -1;
+        long aspace_id = -1;
+        String[] str_data = { "Parting", "is such", "sweet", "sorrow." };
+        long[] dims = { str_data.length };
+        long lsize = 1;
+
+        try {
+            atype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            assertTrue("testH5Awrite_readVL.H5Tcopy: ", atype_id >= 0);
+            H5.H5Tset_size(atype_id, HDF5Constants.H5T_VARIABLE);
+            assertTrue("testH5Awrite_readVL.H5Tis_variable_str", H5.H5Tis_variable_str(atype_id));
+        }
+        catch (Exception err) {
+            if (atype_id > 0)
+                try {H5.H5Tclose(atype_id);} catch (Exception ex) {}
+            err.printStackTrace();
+            fail("H5.testH5Awrite_readVL: " + err);
+        }
+
+        try {
+            aspace_id = H5.H5Screate_simple(1, dims, null);
+            assertTrue(aspace_id > 0);
+            attr_id = H5.H5Acreate(H5did, attr_name, atype_id, aspace_id,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Awrite_readVL: ", attr_id >= 0);
+
+            H5.H5AwriteVL(attr_id, atype_id, str_data);
+
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+
+            for (int j = 0; j < dims.length; j++) {
+                lsize *= dims[j];
+            }
+            String[] strs = new String[(int) lsize];
+            for (int j = 0; j < lsize; j++) {
+                strs[j] = "";
+            }
+            try {
+                H5.H5AreadVL(attr_id, atype_id, strs);
+            }
+            catch (Exception ex) {
+                ex.printStackTrace();
+            }
+            assertTrue("testH5Awrite_readVL:", str_data[0].equals(strs[0]));
+            assertTrue("testH5Awrite_readVL:", str_data[1].equals(strs[1]));
+            assertTrue("testH5Awrite_readVL:", str_data[2].equals(strs[2]));
+            assertTrue("testH5Awrite_readVL:", str_data[3].equals(strs[3]));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.testH5Awrite_readVL: " + err);
+        }
+        finally {
+            if (attr_id > 0)
+                try {H5.H5Aclose(attr_id);} catch (Exception ex) {}
+            if (aspace_id > 0)
+                try {H5.H5Sclose(aspace_id);} catch (Exception ex) {}
+            if (atype_id > 0)
+                try {H5.H5Tclose(atype_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aget_create_plist() {
+        String attr_name = "DATASET1";
+        int char_encoding = 0;
+        long plist_id = -1;
+        long attribute_id = -1;
+
+        try {
+            plist_id = H5.H5Pcreate(HDF5Constants.H5P_ATTRIBUTE_CREATE);
+            assertTrue(plist_id > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Aget_create_plist: H5Pcreate " + err);
+        }
+        try {
+            // Get the character encoding and ensure that it is the default (ASCII)
+            try {
+                char_encoding = H5.H5Pget_char_encoding(plist_id);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_char_encoding: " + err);
+            }
+            assertTrue("testH5Aget_create_plist: get_char_encoding", char_encoding == HDF5Constants.H5T_CSET_ASCII);
+
+            // Create an attribute for the dataset using the property list
+            try {
+                attribute_id = H5.H5Acreate(H5fid, attr_name, type_id, space_id, plist_id, HDF5Constants.H5P_DEFAULT);
+                assertTrue("testH5Aget_create_plist: H5Acreate", attribute_id >= 0);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Acreate: " + err);
+            }
+
+            /* Close the property list, and get the attribute's property list */
+            H5.H5Pclose(plist_id);
+            plist_id = H5.H5Aget_create_plist(attribute_id);
+            assertTrue(plist_id > 0);
+
+            /* Get the character encoding and ensure that it is the default (ASCII) */
+            try {
+                char_encoding = H5.H5Pget_char_encoding(plist_id);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_char_encoding: " + err);
+            }
+            assertTrue("testH5Aget_create_plist: get_char_encoding", char_encoding == HDF5Constants.H5T_CSET_ASCII);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Aget_create_plist " + err);
+        }
+        finally {
+            if (plist_id > 0)
+                try {H5.H5Pclose(plist_id);} catch (Exception ex) {}
+            if (attribute_id > 0)
+                try {H5.H5Aclose(attribute_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aiterate() {
+        long attr1_id = -1;
+        long attr2_id = -1;
+        long attr3_id = -1;
+        long attr4_id = -1;
+
+        class idata {
+            public String attr_name = null;
+            idata(String name) {
+                this.attr_name = name;
+            }
+        }
+        class H5A_iter_data implements H5A_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5A_iterate_t iter_data = new H5A_iter_data();
+        class H5A_iter_callback implements H5A_iterate_cb {
+            public int callback(long group, String name, H5A_info_t info, H5A_iterate_t op_data) {
+                idata id = new idata(name);
+                ((H5A_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        try {
+            attr1_id = H5.H5Acreate_by_name(H5fid, ".", "attribute1",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(H5fid, ".", "attribute2",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr3_id = H5.H5Acreate_by_name(H5fid, ".", "attribute3",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr4_id = H5.H5Acreate_by_name(H5fid, ".", "attribute4",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            H5A_iterate_cb iter_cb = new H5A_iter_callback();
+            try {
+                H5.H5Aiterate(H5fid, HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0L, iter_cb, iter_data);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Aiterate: " + err);
+            }
+            assertFalse("H5Aiterate ",((H5A_iter_data)iter_data).iterdata.isEmpty());
+            assertTrue("H5Aiterate "+((H5A_iter_data)iter_data).iterdata.size(),((H5A_iter_data)iter_data).iterdata.size()==4);
+            assertTrue("H5Aiterate "+(((H5A_iter_data)iter_data).iterdata.get(0)).attr_name,(((H5A_iter_data)iter_data).iterdata.get(0)).attr_name.compareToIgnoreCase("attribute1")==0);
+            assertTrue("H5Aiterate "+(((H5A_iter_data)iter_data).iterdata.get(1)).attr_name,(((H5A_iter_data)iter_data).iterdata.get(1)).attr_name.compareToIgnoreCase("attribute2")==0);
+            assertTrue("H5Aiterate "+((idata)((H5A_iter_data)iter_data).iterdata.get(2)).attr_name,(((H5A_iter_data)iter_data).iterdata.get(2)).attr_name.compareToIgnoreCase("attribute3")==0);
+            assertTrue("H5Aiterate "+((idata)((H5A_iter_data)iter_data).iterdata.get(3)).attr_name,((idata)((H5A_iter_data)iter_data).iterdata.get(3)).attr_name.compareToIgnoreCase("attribute4")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Aiterate: " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+            if (attr3_id > 0)
+                try {H5.H5Aclose(attr3_id);} catch (Exception ex) {}
+            if (attr4_id > 0)
+                try {H5.H5Aclose(attr4_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Aiterate_by_name() {
+        long attr1_id = -1;
+        long attr2_id = -1;
+        long attr3_id = -1;
+        long attr4_id = -1;
+
+        class idata {
+            public String attr_name = null;
+            idata(String name) {
+                this.attr_name = name;
+            }
+        }
+        class H5A_iter_data implements H5A_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5A_iterate_t iter_data = new H5A_iter_data();
+        class H5A_iter_callback implements H5A_iterate_cb {
+            public int callback(long group, String name, H5A_info_t info, H5A_iterate_t op_data) {
+                idata id = new idata(name);
+                ((H5A_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        try {
+            attr1_id = H5.H5Acreate_by_name(H5fid, ".", "attribute4",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr2_id = H5.H5Acreate_by_name(H5fid, ".", "attribute3",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr3_id = H5.H5Acreate_by_name(H5fid, ".", "attribute2",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            attr4_id = H5.H5Acreate_by_name(H5fid, ".", "attribute1",
+                    type_id, space_id, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, lapl_id);
+            H5A_iterate_cb iter_cb = new H5A_iter_callback();
+            try {
+                H5.H5Aiterate_by_name(H5fid, ".", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0L, iter_cb, iter_data, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Aiterate_by_name: " + err);
+            }
+            assertFalse("H5Aiterate_by_name ",((H5A_iter_data)iter_data).iterdata.isEmpty());
+            assertTrue("H5Aiterate_by_name "+((H5A_iter_data)iter_data).iterdata.size(),((H5A_iter_data)iter_data).iterdata.size()==4);
+            assertTrue("H5Aiterate_by_name "+((idata)((H5A_iter_data)iter_data).iterdata.get(1)).attr_name,((idata)((H5A_iter_data)iter_data).iterdata.get(1)).attr_name.compareToIgnoreCase("attribute2")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Aiterate: " + err);
+        }
+        finally {
+            if (attr1_id > 0)
+                try {H5.H5Aclose(attr1_id);} catch (Exception ex) {}
+            if (attr2_id > 0)
+                try {H5.H5Aclose(attr2_id);} catch (Exception ex) {}
+            if (attr3_id > 0)
+                try {H5.H5Aclose(attr3_id);} catch (Exception ex) {}
+            if (attr4_id > 0)
+                try {H5.H5Aclose(attr4_id);} catch (Exception ex) {}
+        }
+    }
+
+}
+
+
+
diff --git a/java/test/TestH5D.java b/java/test/TestH5D.java
new file mode 100644
index 0000000..fa051db
--- /dev/null
+++ b/java/test/TestH5D.java
@@ -0,0 +1,944 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.HDFNativeData;
+import hdf.hdf5lib.callbacks.H5D_iterate_cb;
+import hdf.hdf5lib.callbacks.H5D_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5D {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    private static final int RANK = 2;
+    long H5fid = -1;
+    long H5faplid = -1;
+    long H5dsid = -1;
+    long H5dtid = -1;
+    long H5did = -1;
+    long H5did0 = -1;
+    long H5dcpl_id = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+
+    // Values for the status of space allocation
+    enum H5D_space_status {
+        H5D_SPACE_STATUS_ERROR(-1), H5D_SPACE_STATUS_NOT_ALLOCATED(0), H5D_SPACE_STATUS_PART_ALLOCATED(
+                1), H5D_SPACE_STATUS_ALLOCATED(2);
+
+        private int code;
+
+        H5D_space_status(int space_status) {
+            this.code = space_status;
+        }
+
+        public int getCode() {
+            return this.code;
+        }
+    }
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();}
+            catch (SecurityException e) {}
+        }
+    }
+
+    private final void _createPDataset(long fid, long dsid, String name, long dcpl_val) {
+
+        try {
+            H5dcpl_id = H5.H5Pcreate(dcpl_val);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Pcreate: " + err);
+        }
+        assertTrue("testH5D._createPDataset: H5.H5Pcreate: ", H5dcpl_id >= 0);
+
+        // Set the allocation time to "early". This way we can be sure
+        // that reading from the dataset immediately after creation will
+        // return the fill value.
+        try {
+            H5.H5Pset_alloc_time(H5dcpl_id, HDF5Constants.H5D_ALLOC_TIME_EARLY);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            H5did0 = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, H5dcpl_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D._createPDataset.H5Dcreate: ", H5did0 >= 0);
+    }
+
+    private final void _createChunkDataset(long fid, long dsid, String name, long dapl) {
+
+        try {
+            H5dcpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Pcreate: " + err);
+        }
+        assertTrue("testH5D._createChunkDataset: H5.H5Pcreate: ", H5dcpl_id >= 0);
+
+        // Set the chunking.
+        long[] chunk_dim = {4, 4};
+
+        try {
+            H5.H5Pset_chunk(H5dcpl_id, RANK, chunk_dim);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            H5did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, H5dcpl_id, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D._createChunkDataset.H5Dcreate: ", H5did >= 0);
+    }
+
+    private final void _createDataset(long fid, long dsid, String name, long dapl) {
+        try {
+            H5did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D._createDataset.H5Dcreate: ", H5did >= 0);
+    }
+
+    private final void _createVLDataset(long fid, long dsid, String name, long dapl) {
+        try {
+            H5dtid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Tcopy: " + err);
+        }
+        assertTrue("TestH5D._createVLDataset.H5Tcopy: ", H5dtid >= 0);
+        try {
+            H5.H5Tset_size(H5dtid, HDF5Constants.H5T_VARIABLE);
+            assertTrue("TestH5D._createVLDataset.H5Tis_variable_str", H5.H5Tis_variable_str(H5dtid));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Tset_size: " + err);
+        }
+        try {
+            H5did = H5.H5Dcreate(fid, name, H5dtid, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D._createVLDataset.H5Dcreate: ", H5did >= 0);
+    }
+
+    private final void _closeH5file() throws HDF5LibraryException {
+        if (H5dcpl_id >= 0)
+            try {H5.H5Pclose(H5dcpl_id);} catch (Exception ex) {}
+        if (H5did0 >= 0)
+            try {H5.H5Dclose(H5did0);} catch (Exception ex) {}
+        if (H5did >= 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5dtid > 0)
+            try {H5.H5Tclose(H5dtid);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+    }
+
+    private final void _openH5file(String name, long dapl) {
+       try {
+           H5fid = H5.H5Fopen(H5_FILE,
+                   HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("TestH5D._openH5file: " + err);
+       }
+       assertTrue("TestH5D._openH5file: H5.H5Fopen: ",H5fid >= 0);
+       try {
+           H5did = H5.H5Dopen(H5fid, name, dapl);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("TestH5D._openH5file: " + err);
+       }
+       assertTrue("TestH5D._openH5file: H5.H5Dopen: ",H5did >= 0);
+       try {
+           H5dsid = H5.H5Dget_space(H5did);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("TestH5D._openH5file: " + err);
+       }
+       assertTrue("TestH5D._openH5file: H5.H5Screate_simple: ",H5dsid > 0);
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+       assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+       System.out.print(testname.getMethodName());
+
+        try {
+            H5faplid = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, H5faplid);
+            H5dsid = H5.H5Screate_simple(RANK, H5dims, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5D.createH5file: " + err);
+        }
+        assertTrue("TestH5D.createH5file: H5.H5Fcreate: ",H5fid >= 0);
+        assertTrue("TestH5D.createH5file: H5.H5Screate_simple: ",H5dsid >= 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dcpl_id >= 0)
+            try {H5.H5Pclose(H5dcpl_id);} catch (Exception ex) {}
+        if (H5did0 >= 0)
+            try {H5.H5Dclose(H5did0);} catch (Exception ex) {}
+        if (H5did >= 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5dtid > 0)
+            try {H5.H5Tclose(H5dtid);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5faplid >= 0)
+            try {H5.H5Pclose(H5faplid);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Dcreate() {
+        long dataset_id = -1;
+        try {
+            dataset_id = H5.H5Dcreate(H5fid, "dset",
+                HDF5Constants.H5T_STD_I32BE, H5dsid,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dcreate: " + err);
+        }
+        assertTrue(dataset_id >= 0);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Test
+    public void testH5Dcreate_anon() {
+        long dataset_id = -1;
+        try {
+            dataset_id = H5.H5Dcreate_anon(H5fid, HDF5Constants.H5T_STD_I32BE,
+                    H5dsid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dcreate_anon: " + err);
+        }
+        assertTrue(dataset_id >= 0);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Test
+    public void testH5Dopen() {
+        long dataset_id = -1;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            H5.H5Dclose(H5did);
+            H5did = -1;
+            dataset_id = H5.H5Dopen(H5fid, "dset", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dopen: " + err);
+        }
+        assertTrue("testH5Dopen: ", dataset_id >= 0);
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dataset_id >= 0)
+                H5.H5Dclose(dataset_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Test
+    public void testH5Dget_storage_size_empty() {
+        long storage_size = 0;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            storage_size = H5.H5Dget_storage_size(H5did);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dget_storage_size: " + err);
+        }
+        assertTrue("testH5Dget_storage_size: ", storage_size == 0);
+    }
+
+    @Test
+    public void testH5Dget_storage_size() {
+        long storage_size = 0;
+        int[][] dset_data = new int[DIM_X][DIM_Y];
+        int FILLVAL = 99;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                dset_data[indx][jndx] = FILLVAL;
+
+        try {
+            if (H5did >= 0)
+                H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_INT,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, dset_data[0]);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            storage_size = H5.H5Dget_storage_size(H5did);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dget_storage_size: " + err);
+        }
+        assertTrue("testH5Dget_storage_size: "+storage_size, storage_size == DIM_X*DIM_Y*4);
+    }
+
+    @Test
+    public void testH5Dget_access_plist() {
+        long dapl_id = -1;
+        long test_dapl_id = -1;
+        int[] mdc_nelmts1 = {0};
+        int[] mdc_nelmts2 = {0};
+        long[] rdcc_nelmts1 = {0};
+        long[] rdcc_nelmts2 = {0};
+        long[] rdcc_nbytes1 = {0};
+        long[] rdcc_nbytes2 = {0};
+        double[] rdcc_w01 = {0};
+        double[] rdcc_w02 = {0};
+
+        try {
+            test_dapl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_ACCESS);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dget_access_plist: H5.H5Pcreate: " + err);
+        }
+        assertTrue("testH5Dget_access_plist: test_dapl_id: ", test_dapl_id >= 0);
+
+        try {
+            H5.H5Pget_cache(H5faplid, mdc_nelmts1, rdcc_nelmts1, rdcc_nbytes1, rdcc_w01);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dget_access_plist: H5.H5Pget_cache: " + err);
+        }
+
+        _createChunkDataset(H5fid, H5dsid, "dset", test_dapl_id);
+
+        try {
+            dapl_id = H5.H5Dget_access_plist(H5did);
+            assertTrue("testH5Dget_access_plist: dapl_id: ", dapl_id >= 0);
+            H5.H5Pget_chunk_cache(dapl_id, rdcc_nelmts2, rdcc_nbytes2, rdcc_w02);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("testH5Dget_access_plist: H5.H5Dget_access_plist: " + err);
+        }
+
+        // End access to the dataset and release resources used by it.
+        try {
+            if (dapl_id >= 0)
+                H5.H5Pclose(dapl_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+        try {
+            if (test_dapl_id >= 0)
+                H5.H5Pclose(test_dapl_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+        assertTrue("testH5Dget_access_plist: ", rdcc_nelmts2==rdcc_nelmts2 && rdcc_nbytes2==rdcc_nbytes2);
+    }
+
+    @Test
+    public void testH5Dget_space_status() {
+        int[][] write_dset_data = new int[DIM_X][DIM_Y];
+        int space_status = -1;
+        int space_status0 = -1;
+
+        // Initialize the dataset.
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                write_dset_data[indx][jndx] = indx * jndx - jndx;
+
+        _createPDataset(H5fid, H5dsid, "dset0", HDF5Constants.H5P_DATASET_CREATE);
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        // Retrieve and print space status and storage size for dset0.
+        try {
+            space_status0 = H5.H5Dget_space_status(H5did0);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        assertTrue("testH5Dget_space_status0 - H5.H5Dget_space_status: ", space_status0 == H5D_space_status.H5D_SPACE_STATUS_ALLOCATED.getCode());
+
+        // Retrieve and print space status and storage size for dset.
+        try {
+            space_status = H5.H5Dget_space_status(H5did);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        assertFalse("testH5Dget_space_status - H5.H5Dget_space_status: ", space_status == H5D_space_status.H5D_SPACE_STATUS_ALLOCATED.getCode());
+
+        // Write the data to the dataset.
+        try {
+            H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_INT,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, write_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Retrieve and print space status and storage size for dset.
+        try {
+            space_status = H5.H5Dget_space_status(H5did);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        assertTrue("testH5Dget_space_status - H5.H5Dget_space_status: ", space_status == H5D_space_status.H5D_SPACE_STATUS_ALLOCATED.getCode());
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_space_closed() throws Throwable {
+        long dataset_id = -1;
+        try {
+            dataset_id = H5.H5Dcreate(H5fid, "dset",
+                        HDF5Constants.H5T_STD_I32BE, H5dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D.testH5Dget_space_closed: ", dataset_id >= 0);
+        H5.H5Dclose(dataset_id);
+
+        H5.H5Dget_space(dataset_id);
+    }
+
+    @Test
+    public void testH5Dget_space() {
+        long dataspace_id = -1;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            dataspace_id = H5.H5Dget_space(H5did);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dget_space: " + err);
+        }
+        assertTrue("TestH5D.testH5Dget_space: ", dataspace_id >= 0);
+
+        // End access to the dataspace and release resources used by it.
+        try {
+            if (dataspace_id >= 0)
+                H5.H5Sclose(dataspace_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_type_closed() throws Throwable {
+        long dataset_id = -1;
+        try {
+            dataset_id = H5.H5Dcreate(H5fid, "dset",
+                        HDF5Constants.H5T_STD_I32BE, H5dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5D.testH5Dget_type_closed: ", dataset_id >= 0);
+        H5.H5Dclose(dataset_id);
+
+        H5.H5Dget_type(dataset_id);
+    }
+
+    @Test
+    public void testH5Dget_type() {
+        long datatype_id = -1;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            datatype_id = H5.H5Dget_type(H5did);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dget_type: " + err);
+        }
+        assertTrue("TestH5D.testH5Dget_type: ", datatype_id >= 0);
+
+        // End access to the datatype and release resources used by it.
+        try {
+            if (datatype_id >= 0)
+                H5.H5Tclose(datatype_id);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Test
+    public void testH5Dget_offset() {
+        int[][] write_dset_data = new int[DIM_X][DIM_Y];
+        long dset_address = 0;
+        _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            // Test dataset address.  Should be undefined.
+            dset_address = H5.H5Dget_offset(H5did);
+        }
+        catch (HDF5LibraryException hdfex) {
+            ;
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dget_offset: " + err);
+        }
+        // Write the data to the dataset.
+        try {
+            H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_INT,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, write_dset_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
+            // Test dataset address.
+            dset_address = H5.H5Dget_offset(H5did);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dget_offset: " + err);
+        }
+
+        assertTrue("TestH5D.testH5Dget_offset: ", dset_address >= 0);
+    }
+
+    @Test
+    public void testH5Dfill_null() {
+        int[] buf_data = new int[DIM_X*DIM_Y];
+
+        // Initialize memory buffer
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                buf_data[(indx * DIM_Y) + jndx] = indx * jndx - jndx;
+            }
+        byte[] buf_array = HDFNativeData.intToByte(0, DIM_X*DIM_Y, buf_data);
+
+        // Fill selection in memory
+        try {
+            H5.H5Dfill(null, HDF5Constants.H5T_NATIVE_UINT, buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dfill: " + err);
+        }
+        buf_data = HDFNativeData.byteToInt(buf_array);
+
+        // Verify memory buffer the hard way
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                assertTrue("H5.H5Dfill: [" + indx+","+jndx + "] ", buf_data[(indx * DIM_Y) + jndx] == 0);
+    }
+
+    @Test
+    public void testH5Dfill() {
+        int[] buf_data = new int[DIM_X*DIM_Y];
+        byte[] fill_value = HDFNativeData.intToByte(254);
+
+        // Initialize memory buffer
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                buf_data[(indx * DIM_Y) + jndx] = indx * jndx - jndx;
+            }
+        byte[] buf_array = HDFNativeData.intToByte(0, DIM_X*DIM_Y, buf_data);
+
+        // Fill selection in memory
+        try {
+            H5.H5Dfill(fill_value, HDF5Constants.H5T_NATIVE_UINT, buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Dfill: " + err);
+        }
+        buf_data = HDFNativeData.byteToInt(buf_array);
+
+        // Verify memory buffer the hard way
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                assertTrue("H5.H5Dfill: [" + indx+","+jndx + "] ", buf_data[(indx * DIM_Y) + jndx] == 254);
+    }
+
+    @Test
+    public void testH5Diterate() {
+        final int SPACE_RANK = 2;
+        final int SPACE_FILL = 254;
+
+        class H5D_iter_data implements H5D_iterate_t {
+            public int fill_value;             /* The fill value to check */
+            public long fill_curr_coord;          /* Current coordinate to examine */
+            public long[] fill_coords;            /* Pointer to selection's coordinates */
+        }
+
+        H5D_iterate_t iter_data = new H5D_iter_data();
+
+        class H5D_iter_callback implements H5D_iterate_cb {
+            public int callback(byte[] elem_buf, long elem_id, int ndim, long[] point, H5D_iterate_t op_data) {
+                //Check value in current buffer location
+                int element = HDFNativeData.byteToInt(elem_buf, 0);
+                if(element != ((H5D_iter_data)op_data).fill_value)
+                    return -1;
+                //Check number of dimensions
+                if(ndim != SPACE_RANK)
+                    return(-1);
+                //Check Coordinates
+                long[] fill_coords = new long[2];
+                fill_coords[0] = ((H5D_iter_data)op_data).fill_coords[(int) (2 * ((H5D_iter_data)op_data).fill_curr_coord)];
+                fill_coords[1] = ((H5D_iter_data)op_data).fill_coords[(int) (2 * ((H5D_iter_data)op_data).fill_curr_coord) + 1];
+                ((H5D_iter_data)op_data).fill_curr_coord++;
+                if(fill_coords[0] != point[0])
+                    return(-1);
+                if(fill_coords[1] != point[1])
+                    return(-1);
+
+                return(0);
+            }
+        }
+
+        int[] buf_data = new int[DIM_X*DIM_Y];
+        byte[] fill_value = HDFNativeData.intToByte(SPACE_FILL);
+
+        // Initialize memory buffer
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                buf_data[(indx * DIM_Y) + jndx] = indx * jndx - jndx;
+            }
+        byte[] buf_array = HDFNativeData.intToByte(0, DIM_X*DIM_Y, buf_data);
+
+        // Fill selection in memory
+        try {
+            H5.H5Dfill(fill_value, HDF5Constants.H5T_NATIVE_UINT, buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Diterate: " + err);
+        }
+
+        // Initialize the iterator structure
+        ((H5D_iter_data)iter_data).fill_value = SPACE_FILL;
+        ((H5D_iter_data)iter_data).fill_curr_coord = 0;
+        // Set the coordinates of the selection
+        ((H5D_iter_data)iter_data).fill_coords = new long[DIM_X*DIM_Y*SPACE_RANK];   /* Coordinates of selection */
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                ((H5D_iter_data)iter_data).fill_coords[2*(indx * DIM_Y + jndx)] = indx;
+                ((H5D_iter_data)iter_data).fill_coords[2*(indx * DIM_Y + jndx) + 1] = jndx;
+            } /* end for */
+
+        // Iterate through selection, verifying correct data
+        H5D_iterate_cb iter_cb = new H5D_iter_callback();
+        int op_status = -1;
+        try {
+            op_status = H5.H5Diterate(buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Diterate: " + err);
+        }
+        assertTrue("H5Diterate ", op_status == 0);
+    }
+
+    @Test
+    public void testH5Diterate_write() {
+        final int SPACE_RANK = 2;
+        final int SPACE_FILL = 254;
+
+        class H5D_iter_data implements H5D_iterate_t {
+            public int fill_value;             /* The fill value to check */
+            public long fill_curr_coord;          /* Current coordinate to examine */
+            public long[] fill_coords;            /* Pointer to selection's coordinates */
+        }
+
+        H5D_iterate_t iter_data = new H5D_iter_data();
+
+        class H5D_iter_callback implements H5D_iterate_cb {
+            public int callback(byte[] elem_buf, long elem_id, int ndim, long[] point, H5D_iterate_t op_data) {
+                //Check value in current buffer location
+                int element = HDFNativeData.byteToInt(elem_buf, 0);
+                if(element != ((H5D_iter_data)op_data).fill_value)
+                    return -1;
+                //Check number of dimensions
+                if(ndim != SPACE_RANK)
+                    return(-1);
+                //Check Coordinates
+                long[] fill_coords = new long[2];
+                fill_coords[0] = ((H5D_iter_data)op_data).fill_coords[(int) (2 * ((H5D_iter_data)op_data).fill_curr_coord)];
+                fill_coords[1] = ((H5D_iter_data)op_data).fill_coords[(int) (2 * ((H5D_iter_data)op_data).fill_curr_coord) + 1];
+                ((H5D_iter_data)op_data).fill_curr_coord++;
+                if(fill_coords[0] != point[0])
+                    return(-1);
+                if(fill_coords[1] != point[1])
+                    return(-1);
+                element -= 128;
+                byte[] new_elembuf = HDFNativeData.intToByte(element);
+                elem_buf[0] = new_elembuf[0];
+                elem_buf[1] = new_elembuf[1];
+                elem_buf[2] = new_elembuf[2];
+                elem_buf[3] = new_elembuf[3];
+                return(0);
+            }
+        }
+
+        int[] buf_data = new int[DIM_X*DIM_Y];
+        byte[] fill_value = HDFNativeData.intToByte(SPACE_FILL);
+
+        // Initialize memory buffer
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                buf_data[(indx * DIM_Y) + jndx] = indx * jndx - jndx;
+            }
+        byte[] buf_array = HDFNativeData.intToByte(0, DIM_X*DIM_Y, buf_data);
+
+        // Fill selection in memory
+        try {
+            H5.H5Dfill(fill_value, HDF5Constants.H5T_NATIVE_UINT, buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Diterate: " + err);
+        }
+
+        // Initialize the iterator structure
+        ((H5D_iter_data)iter_data).fill_value = SPACE_FILL;
+        ((H5D_iter_data)iter_data).fill_curr_coord = 0;
+        // Set the coordinates of the selection
+        ((H5D_iter_data)iter_data).fill_coords = new long[DIM_X*DIM_Y*SPACE_RANK];   /* Coordinates of selection */
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++) {
+                ((H5D_iter_data)iter_data).fill_coords[2*(indx * DIM_Y + jndx)] = indx;
+                ((H5D_iter_data)iter_data).fill_coords[2*(indx * DIM_Y + jndx) + 1] = jndx;
+            } /* end for */
+
+        // Iterate through selection, verifying correct data
+        H5D_iterate_cb iter_cb = new H5D_iter_callback();
+        int op_status = -1;
+        try {
+            op_status = H5.H5Diterate(buf_array, HDF5Constants.H5T_NATIVE_UINT, H5dsid, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Diterate: " + err);
+        }
+        assertTrue("H5Diterate ", op_status == 0);
+
+        buf_data = HDFNativeData.byteToInt(buf_array);
+
+        // Verify memory buffer the hard way
+        for (int indx = 0; indx < DIM_X; indx++)
+            for (int jndx = 0; jndx < DIM_Y; jndx++)
+                assertTrue("H5.H5Diterate: [" + indx+","+jndx + "] "+buf_data[(indx * DIM_Y) + jndx], buf_data[(indx * DIM_Y) + jndx] == 126);
+    }
+
+    @Test
+    public void testH5Dvlen_get_buf_size() {
+        String[] str_data = { "Parting", "is such", "sweet", "sorrow.",
+                "Testing", "one", "two", "three.",
+                "Dog,", "man's", "best", "friend.",
+                "Diamonds", "are", "a", "girls!",
+                "S A", "T U R", "D A Y", "night",
+                "That's", "all", "folks", "!!!" };
+        long vl_size = -1;  /* Number of bytes used */
+        long str_data_bytes = 0;
+        for (int idx = 0; idx < str_data.length; idx++)
+            str_data_bytes += str_data[idx].length() + 1;  //Account for terminating null
+
+        _createVLDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            if ((H5did >= 0) && (H5dtid >= 0))
+                H5.H5Dwrite_VLStrings(H5did, H5dtid,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, str_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            vl_size = H5.H5Dvlen_get_buf_size(H5did, H5dtid, H5dsid);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        assertTrue("H5Dvlen_get_buf_size " + vl_size + " == " + str_data_bytes, vl_size == str_data_bytes);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Dvlen_read_invalid_buffer() throws Throwable {
+        String[] str_data = { "Parting", "is such", "sweet", "sorrow.",
+                "Testing", "one", "two", "three.",
+                "Dog,", "man's", "best", "friend.",
+                "Diamonds", "are", "a", "girls!",
+                "S A", "T U R", "D A Y", "night",
+                "That's", "all", "folks", "!!!" };
+        byte[] read_data = new byte[512];
+
+        _createVLDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            H5.H5Dwrite_VLStrings(H5did, H5dtid,
+                    HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, str_data);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        H5.H5Dread(H5did, H5dtid,
+                     HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                     HDF5Constants.H5P_DEFAULT, read_data);
+    }
+
+    @Test
+    public void testH5Dvlen_write_read() {
+        String[] str_wdata = { "Parting", "is such", "sweet", "sorrow.",
+                "Testing", "one", "two", "three.",
+                "Dog,", "man's", "best", "friend.",
+                "Diamonds", "are", "a", "girls!",
+                "S A", "T U R", "D A Y", "night",
+                "That's", "all", "folks", "!!!" };
+        String[] str_rdata = new String[DIM_X * DIM_Y];
+
+        _createVLDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        try {
+            if ((H5did >= 0) && (H5dtid >= 0))
+                H5.H5Dwrite_VLStrings(H5did, H5dtid,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, str_wdata);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            if ((H5did >= 0) && (H5dtid >= 0))
+                H5.H5Dread_VLStrings(H5did, H5dtid,
+                        HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                        HDF5Constants.H5P_DEFAULT, str_rdata);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        for (int v = 0; v < DIM_X * DIM_Y; v++)
+            assertTrue("testH5Dvlen_write_read " + str_wdata[v] + " == " + str_rdata[v], str_wdata[v] == str_wdata[v]);
+    }
+
+}
diff --git a/java/test/TestH5Dparams.java b/java/test/TestH5Dparams.java
new file mode 100644
index 0000000..f056027
--- /dev/null
+++ b/java/test/TestH5Dparams.java
@@ -0,0 +1,134 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Dparams {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Dclose_invalid() throws Throwable {
+        long did = H5.H5Dclose(-1);
+        assertTrue(did == 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Dcreate_null() throws Throwable {
+        H5.H5Dcreate(-1, null, 0, 0, 0, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dcreate_invalid() throws Throwable {
+        H5.H5Dcreate(-1, "Bogus", -1, -1, -1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dcreate_anon_invalid() throws Throwable {
+        H5.H5Dcreate_anon(-1, -1, -1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_access_plist_invalid() throws Throwable {
+        H5.H5Dget_access_plist(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_create_plist_invalid() throws Throwable {
+        H5.H5Dget_create_plist(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_offset_invalid() throws Throwable {
+        H5.H5Dget_offset(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_space_invalid() throws Throwable {
+        H5.H5Dget_space(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_type_invalid() throws Throwable {
+        H5.H5Dget_type(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dget_space_status_invalid() throws Throwable {
+        int status = H5.H5Dget_space_status(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dset_extent_status_invalid() throws Throwable {
+        long[] size = new long[2];
+        H5.H5Dset_extent(-1, size);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Dset_extent_status_null() throws Throwable {
+        H5.H5Dset_extent(-1, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Dopen_null() throws Throwable {
+        H5.H5Dopen(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dopen_invalid() throws Throwable {
+        H5.H5Dopen(-1, "Bogus", 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dvlen_get_buf_size_invalid() throws Throwable {
+        H5.H5Dvlen_get_buf_size(-1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Dvlen_reclaim_invalid() throws Throwable {
+        byte[] buf = new byte[2];
+        H5.H5Dvlen_reclaim(-1, -1, -1, buf);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Dvlen_reclaim_null() throws Throwable {
+        H5.H5Dvlen_reclaim(-1, -1, -1, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Dget_storage_size_invalid() throws Throwable {
+        H5.H5Dget_storage_size(-1);
+    }
+
+}
diff --git a/java/test/TestH5Dplist.java b/java/test/TestH5Dplist.java
new file mode 100644
index 0000000..eb1669f
--- /dev/null
+++ b/java/test/TestH5Dplist.java
@@ -0,0 +1,216 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Dplist {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 7;
+    private static final int EDIM_X = 6;
+    private static final int EDIM_Y = 10;
+    private static final int CHUNK_X = 4;
+    private static final int CHUNK_Y = 4;
+    private static final int NDIMS = 2;
+    private static final int FILLVAL = 99;
+    private static final int RANK = 2;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long H5dcpl_id = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+    long[] H5extdims = { EDIM_X, EDIM_Y };
+    long[] H5chunk_dims = { CHUNK_X, CHUNK_Y };
+    long[] H5maxdims = { HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED };
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final void _createPDataset(long fid, long dsid, String name, long dcpl_val) {
+        try {
+            H5dcpl_id = H5.H5Pcreate(dcpl_val);
+        }
+        catch (Exception err) {
+            err.printStackTrace();
+            fail("H5.H5Pcreate: " + err);
+        }
+        assertTrue("TestH5Dplist._createPDataset: ", H5dcpl_id > 0);
+
+        // Set the chunk size.
+        try {
+            H5.H5Pset_chunk(H5dcpl_id, NDIMS, H5chunk_dims);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the fill value for the dataset
+        try {
+            int[] fill_value = { FILLVAL };
+            H5.H5Pset_fill_value(H5dcpl_id, HDF5Constants.H5T_NATIVE_INT, fill_value);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        // Set the allocation time to "early". This way we can be sure
+        // that reading from the dataset immediately after creation will
+        // return the fill value.
+        try {
+            H5.H5Pset_alloc_time(H5dcpl_id, HDF5Constants.H5D_ALLOC_TIME_EARLY);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        _createDataset(H5fid, H5dsid, "dset", H5dcpl_id, HDF5Constants.H5P_DEFAULT);
+    }
+
+    private final void _createDataset(long fid, long dsid, String name, long dcpl, long dapl) {
+        try {
+            H5did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, dcpl, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5Dplist._createDataset: ",H5did > 0);
+    }
+
+    @Before
+    public void createH5file() throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(RANK, H5dims, H5maxdims);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Dplist.createH5file: " + err);
+        }
+        assertTrue("TestH5Dplist.createH5file: H5.H5Fcreate: ",H5fid > 0);
+        assertTrue("TestH5Dplist.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dcpl_id >= 0)
+            try {H5.H5Pclose(H5dcpl_id);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+  @Test
+  public void testH5Dset_extent() {
+      int[][] write_dset_data = new int[DIM_X][DIM_Y];
+      int[][] read_dset_data = new int[DIM_X][DIM_Y];
+      int[][] extend_dset_data = new int[EDIM_X][EDIM_Y];
+
+      // Initialize the dataset.
+      for (int indx = 0; indx < DIM_X; indx++)
+          for (int jndx = 0; jndx < DIM_Y; jndx++)
+              write_dset_data[indx][jndx] = indx * jndx - jndx;
+
+      _createPDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DATASET_CREATE);
+
+      // Read values from the dataset, which has not been written to yet.
+      try {
+          H5.H5Dread(H5did, HDF5Constants.H5T_NATIVE_INT,
+                      HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                      HDF5Constants.H5P_DEFAULT, read_dset_data);
+      }
+      catch (Exception e) {
+          e.printStackTrace();
+      }
+      assertTrue("testH5Dset_extent - H5.H5Dread: ", read_dset_data[0][0] == 99);
+
+      // Write the data to the dataset.
+      try {
+          H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_INT,
+                      HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                      HDF5Constants.H5P_DEFAULT, write_dset_data);
+      }
+      catch (Exception e) {
+          e.printStackTrace();
+      }
+
+      // Read the data back.
+      try {
+          H5.H5Dread(H5did, HDF5Constants.H5T_NATIVE_INT,
+                  HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                  HDF5Constants.H5P_DEFAULT, read_dset_data);
+      }
+      catch (Exception e) {
+          e.printStackTrace();
+      }
+      assertTrue("testH5Dset_extent - H5.H5Dread: ", read_dset_data[3][6] == 12);
+
+      // Extend the dataset.
+      try {
+          H5.H5Dset_extent(H5did, H5extdims);
+      }
+      catch (Exception e) {
+          e.printStackTrace();
+      }
+
+      // Read from the extended dataset.
+      try {
+          H5.H5Dread(H5did, HDF5Constants.H5T_NATIVE_INT,
+                  HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                  HDF5Constants.H5P_DEFAULT, extend_dset_data);
+      }
+      catch (Exception e) {
+          e.printStackTrace();
+      }
+      assertTrue("testH5Dset_extent - H5.H5Dread: ", extend_dset_data[3][6] == 12);
+      assertTrue("testH5Dset_extent - H5.H5Dread: ", extend_dset_data[4][8] == 99);
+  }
+
+}
diff --git a/java/test/TestH5E.java b/java/test/TestH5E.java
new file mode 100644
index 0000000..028369d
--- /dev/null
+++ b/java/test/TestH5E.java
@@ -0,0 +1,553 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.callbacks.H5E_walk_cb;
+import hdf.hdf5lib.callbacks.H5E_walk_t;
+import hdf.hdf5lib.structs.H5E_error2_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5E {
+    @Rule public TestName testname = new TestName();
+    long hdf_java_classid = -1;
+    long current_stackid = -1;
+
+    @Before
+    public void H5Eget_stack_class() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        hdf_java_classid = -1;
+        try {
+            hdf_java_classid = H5.H5Eregister_class("HDF-Java-Error",
+                    "hdf-java", "2.5");
+            current_stackid = H5.H5Eget_current_stack();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_stack_class: " + err);
+        }
+    }
+
+    @After
+    public void H5Erestore_stack_class() {
+        try {
+            H5.H5Eunregister_class(hdf_java_classid);
+            hdf_java_classid = -1;
+            H5.H5Eclose_stack(current_stackid);
+            current_stackid = -1;
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Erestore_stack_class: " + err);
+        }
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Eget_class_name() {
+        try {
+            String class_name = H5.H5Eget_class_name(hdf_java_classid);
+            assertNotNull("H5.H5Eget_class_name: " + class_name, class_name);
+            assertEquals("H5.H5Eget_class_name: ", "HDF-Java-Error", class_name);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_class_name: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eprint2() {
+        try {
+            assertFalse(current_stackid < 0);
+            H5.H5Eprint2(current_stackid, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eprint2: " + err);
+        }
+    }
+
+    @Ignore("Tested with create_msg_major[minor]")
+    public void testH5Eclose_msg() {
+        fail("Not yet implemented");
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ecreate_msg_name_null() throws Throwable {
+        H5.H5Ecreate_msg(hdf_java_classid, HDF5Constants.H5E_MAJOR, null);
+    }
+
+    @Test
+    public void testH5Ecreate_msg_major() {
+        try {
+            long err_id = H5.H5Ecreate_msg(hdf_java_classid,
+                    HDF5Constants.H5E_MAJOR, "Error in Test");
+            assertFalse("H5.H5Ecreate_msg_major: " + err_id, err_id < 0);
+            H5.H5Eclose_msg(err_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ecreate_msg_major: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Ecreate_msg_minor() {
+        try {
+            long err_id = H5.H5Ecreate_msg(hdf_java_classid,
+                    HDF5Constants.H5E_MINOR, "Error in Test Function");
+            assertFalse("H5.H5Ecreate_msg_minor: " + err_id, err_id < 0);
+            H5.H5Eclose_msg(err_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ecreate_msg_minor: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eget_msg() {
+        int[] error_msg_type = { HDF5Constants.H5E_MINOR };
+        long err_id = -1;
+        String msg = null;
+        try {
+            err_id = H5.H5Ecreate_msg(hdf_java_classid,
+                    HDF5Constants.H5E_MAJOR, "Error in Test");
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_msg: " + err);
+        }
+        assertFalse("H5.H5Eget_msg: H5Ecreate_msg - " + err_id, err_id < 0);
+        try {
+            msg = H5.H5Eget_msg(err_id, error_msg_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_msg: " + err);
+        }
+        assertNotNull("H5.H5Eget_msg: " + msg, msg);
+        assertEquals("H5.H5Eget_msg: ", "Error in Test", msg);
+        assertEquals("H5.H5Eget_msg: ", HDF5Constants.H5E_MAJOR,
+                    error_msg_type[0]);
+        try {
+            H5.H5Eclose_msg(err_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_msg: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eget_msg_major() {
+
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (HDF5LibraryException hdferr) {
+            int[] error_msg_type = { HDF5Constants.H5E_MAJOR };
+            String msg = null;
+            try {
+                msg = H5.H5Eget_msg(hdferr.getMajorErrorNumber(),
+                        error_msg_type);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Eget_msg: " + err);
+            }
+            assertNotNull("H5.H5Eget_msg: " + msg, msg);
+            assertEquals("H5.H5Eget_msg: ", "Invalid arguments to routine",
+                        msg);
+            assertEquals("H5.H5Eget_msg: ", HDF5Constants.H5E_MAJOR,
+                        error_msg_type[0]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_msg: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eget_msg_minor() {
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (HDF5LibraryException hdferr) {
+            int[] error_msg_type = { HDF5Constants.H5E_MINOR };
+            String msg = null;
+            try {
+                msg = H5.H5Eget_msg(hdferr.getMinorErrorNumber(),
+                        error_msg_type);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Eget_msg: " + err);
+            }
+            assertNotNull("H5.H5Eget_msg: " + msg, msg);
+            assertEquals("H5.H5Eget_msg: ", "Inappropriate type", msg);
+            assertEquals("H5.H5Eget_msg: ", HDF5Constants.H5E_MINOR,
+                        error_msg_type[0]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_msg: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Ecreate_stack() {
+        long stk_id = -1;
+        try {
+            stk_id = H5.H5Ecreate_stack();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ecreate_stack: " + err);
+        }
+        assertFalse("H5.H5Ecreate_stack: " + stk_id, stk_id < 0);
+        try {
+            H5.H5Eclose_stack(stk_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ecreate_stack: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Epop() {
+        try {
+            H5.H5Eset_current_stack(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+
+        // save current stack contents
+        try {
+            current_stackid = H5.H5Eget_current_stack();
+        }
+        catch (HDF5LibraryException err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        long num_msg = -1;
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        assertTrue("H5.H5Epop #:" + num_msg, num_msg == 0);
+
+        try {
+            num_msg = H5.H5Eget_num(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        assertTrue("H5.H5Epop #:" + num_msg, num_msg == 3);
+
+        try {
+            H5.H5Epop(current_stackid, 1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        try {
+            num_msg = H5.H5Eget_num(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        assertTrue("H5.H5Epop", num_msg == 2);
+    }
+
+    @Test
+    public void testH5Epush() {
+        String      err_func = "testH5Epush";
+        String      err_msg = "Error message";
+        long        estack_id = -1;
+        long        maj_err_id = -1;
+        long        min_err_id = -1;
+        long        num_msg = -1;
+
+        try {
+            try {
+                maj_err_id = H5.H5Ecreate_msg(hdf_java_classid, HDF5Constants.H5E_MAJOR, "Error in Test");
+                assertFalse("testH5Epush: H5.H5Ecreate_msg_major: " + maj_err_id, maj_err_id < 0);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Epush: H5.H5Ecreate_msg_major: " + err);
+            }
+            try {
+                min_err_id = H5.H5Ecreate_msg(hdf_java_classid, HDF5Constants.H5E_MINOR, "Error in Test Function");
+                assertFalse("H5.H5Ecreate_msg_minor: " + min_err_id, min_err_id < 0);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Epush: H5.H5Ecreate_msg_minor: " + err);
+            }
+
+            try {
+                estack_id = H5.H5Ecreate_stack();
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Epush: H5.H5Ecreate_stack: " + err);
+            }
+            assertFalse("testH5Epush: H5.H5Ecreate_stack: " + estack_id, estack_id < 0);
+
+            try {
+                num_msg = H5.H5Eget_num(estack_id);
+                assertTrue("testH5Epush #:" + num_msg, num_msg == 0);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Epush: H5.H5Eget_num: " + err);
+            }
+
+            H5.H5Epush(estack_id, "TestH5E.java", err_func, 354, hdf_java_classid, maj_err_id, min_err_id, err_msg);
+
+            try {
+                num_msg = H5.H5Eget_num(estack_id);
+                assertTrue("testH5Epush #:" + num_msg, num_msg == 1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Epush: H5.H5Eget_num: " + err);
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Epush: " + err);
+        }
+        finally {
+            if (estack_id >= 0)
+                try {H5.H5Eclose_stack(estack_id);} catch (Exception ex) {}
+            if (maj_err_id >= 0)
+                try {H5.H5Eclose_msg(maj_err_id);} catch (Exception ex) {}
+            if (min_err_id >= 0)
+                try {H5.H5Eclose_msg(min_err_id);} catch (Exception ex) {}
+        }
+    } /* end test_create() */
+
+    @Test
+    public void testH5EprintInt() {
+        assertFalse(current_stackid < 0);
+        try {
+            H5.H5Eprint2(current_stackid, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5EprintInt: " + err);
+        }
+    }
+
+    @Test
+    public void testH5EclearInt() {
+        try {
+            H5.H5Eclear(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5EclearInt: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eclear2() {
+        try {
+            H5.H5Eclear2(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eclear2: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eauto_is_v2() {
+        boolean is_v2 = false;
+        try {
+            is_v2 = H5.H5Eauto_is_v2(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eauto_is_v2: " + err);
+        }
+        assertTrue("H5.H5Eauto_is_v2: ", is_v2);
+    }
+
+    @Test
+    public void testH5Eget_num() {
+        long num_msg = -1;
+        try {
+            num_msg = H5.H5Eget_num(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_num: " + err);
+        }
+        assertTrue("H5.H5Eget_num", num_msg == 0);
+    }
+
+    @Test
+    public void testH5Eget_num_with_msg() {
+        try {
+            H5.H5Eset_current_stack(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+
+        // save current stack contents
+        try {
+            current_stackid = H5.H5Eget_current_stack();
+        }
+        catch (HDF5LibraryException err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        long num_msg = -1;
+        try {
+            num_msg = H5.H5Eget_num(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+        assertTrue("H5.H5Eget_num_with_msg #:" + num_msg, num_msg > 0);
+    }
+
+    @Test
+    public void testH5Ewalk() {
+        class wdata {
+            public String err_desc = null;
+            public String func_name = null;
+            public int line = -1;
+            wdata(String desc, String func, int lineno) {
+                this.err_desc = new String(desc);
+                this.func_name = new String(func);
+                this.line = lineno;
+            }
+        }
+        class H5E_walk_data implements H5E_walk_t {
+            public ArrayList<wdata> walkdata = new ArrayList<wdata>();
+        }
+        H5E_walk_t walk_data = new H5E_walk_data();
+        class H5E_walk_callback implements H5E_walk_cb {
+            public int callback(int nidx, H5E_error2_t info, H5E_walk_t op_data) {
+                wdata wd = new wdata(info.desc, info.func_name, info.line);
+                ((H5E_walk_data)op_data).walkdata.add(wd);
+                return 0;
+            }
+        }
+        H5E_walk_cb walk_cb = new H5E_walk_callback();
+        long num_msg = -1;
+
+        try {
+            H5.H5Eset_current_stack(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Ewalk:H5Eset_current_stack " + err);
+        }
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+
+        // save current stack contents
+        try {
+            current_stackid = H5.H5Eget_current_stack();
+        }
+        catch (HDF5LibraryException err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+
+        try {
+            num_msg = H5.H5Eget_num(current_stackid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Ewalk:H5Eget_num " + err);
+        }
+        assertTrue("testH5Ewalk #:" + num_msg, num_msg == 3);
+
+        try {
+            H5.H5Ewalk2(current_stackid, HDF5Constants.H5E_WALK_UPWARD, walk_cb, walk_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Ewalk:H5Ewalk2 " + err);
+        }
+        assertFalse("testH5Ewalk:H5Ewalk2 ",((H5E_walk_data)walk_data).walkdata.isEmpty());
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((H5E_walk_data)walk_data).walkdata.size(),((H5E_walk_data)walk_data).walkdata.size()==3);
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).line,((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).line==3767);
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).line,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).line==5506);
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).func_name,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).func_name.compareToIgnoreCase("H5P_verify_apl_and_dxpl")==0);
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).err_desc,((wdata)((H5E_walk_data)walk_data).walkdata.get(0)).err_desc.compareToIgnoreCase("not a property list")==0);
+        assertTrue("testH5Ewalk:H5Ewalk2 "+((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).err_desc,((wdata)((H5E_walk_data)walk_data).walkdata.get(1)).err_desc.compareToIgnoreCase("not the required access property list")==0);
+    }
+
+}
diff --git a/java/test/TestH5Edefault.java b/java/test/TestH5Edefault.java
new file mode 100644
index 0000000..510aa2f
--- /dev/null
+++ b/java/test/TestH5Edefault.java
@@ -0,0 +1,564 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Edefault {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void H5Eset_default_stack() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            // Clear any active stack messages
+            H5.H5Eclear2(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (HDF5LibraryException err) {
+            err.printStackTrace();
+            fail("H5Eset_default_stack: " + err);
+        }
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eprint2_invalid_classid() throws Throwable {
+        H5.H5Eprint2(-1, null);
+    }
+
+    @Test
+    public void testH5Eprint() {
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+        try {
+            H5.H5Eprint2(HDF5Constants.H5E_DEFAULT, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eprint: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eget_current_stack() {
+        long num_msg = -1;
+        long num_msg_default = -1;
+        long stack_id = -1;
+        long stack_id_default = HDF5Constants.H5E_DEFAULT;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+            //default stack id will be different after exception
+            stack_id_default = HDF5Constants.H5E_DEFAULT;
+            //err.printStackTrace(); //This will clear the error stack
+        }
+        // Verify we have the correct number of messages
+        try {
+            num_msg_default = H5.H5Eget_num(stack_id_default);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default,
+                num_msg_default == 3);
+
+        //Save a copy of the current stack and clears the current stack
+        try {
+            stack_id = H5.H5Eget_current_stack();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertFalse("H5.H5Eget_current_stack: get_current_stack - "
+                + stack_id, stack_id < 0);
+        assertFalse("H5.H5Eget_current_stack: get_current_stack - "
+                + stack_id, stack_id == stack_id_default);
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg_default = H5.H5Eget_num(stack_id_default);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default,
+                num_msg_default == 0);
+
+        //Verify the copy has the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg,
+                num_msg == 3);
+
+        try {
+            H5.H5Eclose_stack(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eget_current_stack_pop() {
+        long num_msg = -1;
+        long num_msg_default = -1;
+        long stack_id = -1;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+            //err.printStackTrace(); //This will clear the error stack
+        }
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg_default = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default,
+                num_msg_default == 3);
+
+        //Save a copy of the current stack and clears the current stack
+        try {
+            stack_id = H5.H5Eget_current_stack();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertFalse("H5.H5Eget_current_stack: get_current_stack - "
+                + stack_id, stack_id < 0);
+        assertFalse("H5.H5Eget_current_stack: get_current_stack - "
+                + stack_id, stack_id == HDF5Constants.H5E_DEFAULT);
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg_default = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default,
+                num_msg_default == 0);
+
+        //Verify the copy has the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg,
+                num_msg == 3);
+
+        //Generate errors on default stack
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+            //err.printStackTrace(); //This will clear the error stack
+        }
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg_default = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg_default,
+                num_msg_default == 3);
+
+        //Remove one message from the current stack
+        try {
+            H5.H5Epop(HDF5Constants.H5E_DEFAULT, 1);
+            num_msg_default = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: pop #:" + num_msg_default,
+                num_msg_default == 2);
+
+        //Verify the copy still has the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eget_current_stack: get_num #:" + num_msg,
+                num_msg == 3);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eclose_stack_invalid_stackid() throws Throwable {
+        H5.H5Eclose_stack(-1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eget_class_name_invalid_classid() throws Throwable {
+        H5.H5Eget_class_name(-1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eget_class_name_invalid_classname() throws Throwable {
+        H5.H5Eget_class_name(HDF5Constants.H5E_DEFAULT);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eclose_msg_invalid_errid() throws Throwable {
+        H5.H5Eclose_msg(-1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Ecreate_msg_invalid_errid() throws Throwable {
+        H5.H5Ecreate_msg(-1, HDF5Constants.H5E_MAJOR, "null");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eget_msg_invalid_msgid() throws Throwable {
+        H5.H5Eget_msg(-1, null);
+    }
+
+    @Test
+    public void testH5Ecreate_stack() {
+        try {
+            long stack_id = H5.H5Ecreate_stack();
+            assertTrue("H5.H5Ecreate_stack", stack_id > 0);
+            H5.H5Eclose_stack(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ecreate_stack: " + err);
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eset_current_stack_invalid_stkid() throws Throwable {
+        H5.H5Eset_current_stack(-1);
+    }
+
+    @Test
+    public void testH5Eset_current_stack() {
+        long num_msg = -1;
+        long stack_id = -1;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+            //err.printStackTrace(); //This will clear the error stack
+        }
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg,
+                    num_msg == 3);
+
+        //Save a copy of the current stack
+        try {
+            stack_id = H5.H5Eget_current_stack();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertFalse("H5.H5Eset_current_stack: get_current_stack - "
+                    + stack_id, stack_id < 0);
+        assertFalse("H5.H5Eset_current_stack: get_current_stack - "
+                + stack_id, stack_id == HDF5Constants.H5E_DEFAULT);
+
+        //Verify the copy has the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg,
+                    num_msg == 3);
+
+        //Generate errors on default stack
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+            //err.printStackTrace(); //This will clear the error stack
+        }
+
+        // Verify we have the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg,
+                num_msg == 3);
+
+        //Remove one message from the current stack
+        try {
+            H5.H5Epop(HDF5Constants.H5E_DEFAULT, 1);
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: pop #:" + num_msg,
+                    num_msg == 2);
+
+        //Verify the copy still has the correct number of messages
+        try {
+            num_msg = H5.H5Eget_num(stack_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: get_num #:" + num_msg,
+                    num_msg == 3);
+
+        try {
+            H5.H5Eset_current_stack(stack_id);
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eset_current_stack: " + err);
+        }
+        assertTrue("H5.H5Eset_current_stack: get_num - " + num_msg,
+                    num_msg == 3);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Epop_invalid_stkid() throws Throwable {
+        H5.H5Epop(-1, 0);
+    }
+
+    @Test
+    public void testH5Epop() throws Throwable {
+        long num_msg = -1;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+        assertTrue("H5.H5Epop before #:" + num_msg, num_msg == 3);
+        try {
+            H5.H5Epop(HDF5Constants.H5E_DEFAULT, 1);
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Epop: " + err);
+        }
+        assertTrue("H5.H5Epop after #:" + num_msg, num_msg == 2);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Epush_invalid_stkid() throws Throwable {
+        H5.H5Epush(-1, "Invalid", "Invalid", 0, -1, -1, -1, "Invalid message");
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Epush_null_name() throws Throwable {
+        H5.H5Epush(HDF5Constants.H5E_DEFAULT, null, "Invalid", 0, HDF5Constants.H5E_DEFAULT, HDF5Constants.H5E_DEFAULT, HDF5Constants.H5E_DEFAULT, "Invalid message");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5EprintInt_invalid_classid() throws Throwable {
+        H5.H5Eprint2(-1, null);
+    }
+
+    @Test
+    public void testH5EprintInt() {
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+        try {
+            H5.H5Eprint2(HDF5Constants.H5E_DEFAULT, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5EprintInt: " + err);
+        }
+    }
+
+    @Test
+    public void testH5EclearInt() {
+        try {
+            H5.H5Eclear(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5EclearInt: " + err);
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eclear2_invalid_stkid() throws Throwable {
+        H5.H5Eclear2(-1);
+    }
+
+    @Test
+    public void testH5Eclear() {
+        try {
+            H5.H5Eclear2(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eclear2: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Eclear2_with_msg() {
+        long num_msg = -1;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eclear2_with_msg: " + err);
+        }
+        assertTrue("H5.H5Eclear2_with_msg before #:" + num_msg,
+                    num_msg == 3);
+        try {
+            H5.H5Eclear2(HDF5Constants.H5E_DEFAULT);
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eclear2_with_msg: " + err);
+        }
+            assertTrue("H5.H5Eclear2_with_msg after #:" + num_msg, num_msg == 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eauto_is_v2_invalid_stkid() throws Throwable {
+        H5.H5Eauto_is_v2(-1);
+    }
+
+    @Test
+    public void testH5Eauto_is_v2() {
+        boolean is_v2 = false;
+        try {
+            is_v2 = H5.H5Eauto_is_v2(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eauto_is_v2: " + err);
+        }
+        assertTrue("H5.H5Eauto_is_v2: ", is_v2);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eget_num_invalid_stkid() throws Throwable {
+        H5.H5Eget_num(-1);
+    }
+
+    @Test
+    public void testH5Eget_num() {
+        long num_msg = -1;
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_num: " + err);
+        }
+        assertTrue("H5.H5Eget_num #:" + num_msg, num_msg == 0);
+    }
+
+    @Test
+    public void testH5Eget_num_with_msg() {
+        long num_msg = -1;
+        try {
+            H5.H5Fopen("test", 0, 1);
+        }
+        catch (Throwable err) {
+        }
+        try {
+            num_msg = H5.H5Eget_num(HDF5Constants.H5E_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Eget_num_with_msg: " + err);
+        }
+        assertTrue("H5.H5Eget_num_with_msg #:" + num_msg, num_msg > 0);
+    }
+
+}
diff --git a/java/test/TestH5Eregister.java b/java/test/TestH5Eregister.java
new file mode 100644
index 0000000..13e0ca2
--- /dev/null
+++ b/java/test/TestH5Eregister.java
@@ -0,0 +1,78 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Eregister {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Eregister_class_cls_name_null() throws Throwable {
+        H5.H5Eregister_class(null, "libname", "version");
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Eregister_class_lib_name_null() throws Throwable {
+        H5.H5Eregister_class("clsname", null, "version");
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Eregister_class_version_null() throws Throwable {
+        H5.H5Eregister_class("clsname", "libname", null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Eunregister_class_invalid_classid() throws Throwable {
+        H5.H5Eunregister_class(-1);
+    }
+
+    @Test
+    public void testH5Eregister_class() {
+        long hdf_java_classid = -1;
+        try {
+            hdf_java_classid = H5.H5Eregister_class("HDF-Java-Error",
+                    "hdf-java", "2.5");
+        }
+        catch (Throwable err) {
+            fail("H5.H5Eregister_class: " + err);
+        }
+        try {
+            H5.H5Eunregister_class(hdf_java_classid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Eunregister_class: " + err);
+        }
+    }
+}
diff --git a/java/test/TestH5F.java b/java/test/TestH5F.java
new file mode 100644
index 0000000..3451187
--- /dev/null
+++ b/java/test/TestH5F.java
@@ -0,0 +1,332 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5F {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+
+    private static final int COUNT_OBJ_FILE = 1;
+    private static final int COUNT_OBJ_DATASET = 0;
+    private static final int COUNT_OBJ_GROUP = 0;
+    private static final int COUNT_OBJ_DATATYPE = 0;
+    private static final int COUNT_OBJ_ATTR = 0;
+    private static final int COUNT_OBJ_ALL = (COUNT_OBJ_FILE
+            + COUNT_OBJ_DATASET + COUNT_OBJ_GROUP + COUNT_OBJ_DATATYPE + COUNT_OBJ_ATTR);
+    private static final int[] OBJ_COUNTS = { COUNT_OBJ_FILE,
+            COUNT_OBJ_DATASET, COUNT_OBJ_GROUP, COUNT_OBJ_DATATYPE,
+            COUNT_OBJ_ATTR, COUNT_OBJ_ALL };
+    private static final int[] OBJ_TYPES = { HDF5Constants.H5F_OBJ_FILE,
+            HDF5Constants.H5F_OBJ_DATASET, HDF5Constants.H5F_OBJ_GROUP,
+            HDF5Constants.H5F_OBJ_DATATYPE, HDF5Constants.H5F_OBJ_ATTR,
+            HDF5Constants.H5F_OBJ_ALL };
+    long H5fid = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Fget_create_plist() {
+        long plist = -1;
+
+        try {
+            plist = H5.H5Fget_create_plist(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_create_plist: " + err);
+        }
+        assertTrue(plist > 0);
+        try {H5.H5Pclose(plist);} catch (HDF5LibraryException e) {e.printStackTrace();}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Fget_create_plist_closed() throws Throwable {
+        long fid = -1;
+
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+
+        // it should fail because the file was closed.
+        H5.H5Fget_create_plist(fid);
+    }
+
+    @Test
+    public void testH5Fget_access_plist() {
+        long plist = -1;
+
+        try {
+            plist = H5.H5Fget_access_plist(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_access_plist: " + err);
+        }
+        assertTrue(plist > 0);
+        try {H5.H5Pclose(plist);} catch (HDF5LibraryException e) {e.printStackTrace();}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Fget_access_plist_closed() throws Throwable {
+        long fid = -1;
+
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+
+        // it should fail because the file was closed.
+        H5.H5Fget_access_plist(fid);
+    }
+
+    @Test
+    public void testH5Fget_intent_rdwr() {
+        int intent = 0;
+        long fid = -1;
+
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+        try {
+            intent = H5.H5Fget_intent(fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_intent: " + err);
+        }
+        assertEquals(HDF5Constants.H5F_ACC_RDWR, intent);
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+    }
+
+    @Test
+    public void testH5Fget_intent_rdonly() {
+        int intent = 0;
+        long fid = -1;
+
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDONLY,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+        try {
+            intent = H5.H5Fget_intent(fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_intent: " + err);
+        }
+        assertEquals(HDF5Constants.H5F_ACC_RDONLY, intent);
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+    }
+
+    @Test
+    public void testH5Fget_obj_count() {
+        long count = -1;
+
+        for (int i = 0; i < OBJ_TYPES.length; i++) {
+            try {
+                count = H5.H5Fget_obj_count(H5fid, OBJ_TYPES[i]);
+            }
+            catch (Throwable err) {
+                fail("H5.H5Fget_obj_count: " + err);
+            }
+
+            assertEquals(count, OBJ_COUNTS[i]);
+        }
+    }
+
+    @Test
+    public void testH5Fget_obj_ids() {
+        long count = 0;
+        long max_objs = 100;
+        long[] obj_id_list = new long[(int)max_objs];
+        int[] open_obj_counts = new int[OBJ_TYPES.length];
+
+        for (int i = 0; i < OBJ_TYPES.length; i++)
+            open_obj_counts[i] = 0;
+
+        open_obj_counts[0] = 1;
+        for (int i = 0; i < OBJ_TYPES.length - 1; i++)
+            open_obj_counts[OBJ_TYPES.length - 1] += open_obj_counts[i];
+
+        for (int i = 0; i < OBJ_TYPES.length; i++) {
+            try {
+                count = H5.H5Fget_obj_ids(H5fid, OBJ_TYPES[i], max_objs,
+                        obj_id_list);
+            }
+            catch (Throwable err) {
+                fail("H5.H5Fget_obj_ids: " + err);
+            }
+            assertEquals(count, open_obj_counts[i]);
+        }
+    }
+    /**
+     * TODO: need to add objects to the file after H5G[D,T]create() functions
+     * are implemented.
+     */
+    //
+    // @Test
+    // public void testH5Fmount_unmount() {
+    // String file1 = "src.h5";
+    // String file2 = "dst.h5";
+    // String group1 = "/G";
+    // String group2 = "/MOUNTED";
+    //
+    // _createH5File(file1);
+    // _createH5File(file2);
+    //
+    // int fid1 = _openFile(file1, HDF5Constants.H5F_ACC_RDWR);
+    // assertTrue(fid1 > 0);
+    //
+    // int fid2 = _openFile(file2, HDF5Constants.H5F_ACC_RDWR);
+    // assertTrue(fid2 > 0);
+    //
+    // // create a group at file1
+    // int gid = _createGroup(fid1, group1);
+    // try { H5.H5Gclose(gid); } catch (Exception ex) {}
+    //
+    // // create a group at file 2
+    // gid = _createGroup(fid2, group2);
+    // try { H5.H5Gclose(gid); } catch (Exception ex) {}
+    //
+    // // before mount, "/G/MOUNTED" does not exists in file1
+    // gid = _openGroup(fid1, group1+group2);
+    // assertTrue(gid < 0);
+    //
+    // // Mount file2 under G in the file1
+    // try {
+    // H5.H5Fmount(fid1, group1, fid2, HDF5Constants.H5P_DEFAULT);
+    // }
+    // catch (Throwable err) {
+    // fail("H5.H5Fmount: "+err);
+    // }
+    //
+    // // now file1 should have group "/G/MOUNTED"
+    // gid = _openGroup(fid1, group1+group2);
+    // assertTrue(gid > 0);
+    // try { H5.H5Gclose(gid); } catch (Exception ex) {}
+    //
+    // // unmount file2 from file1
+    // try {
+    // H5.H5Funmount(fid1, group1);
+    // }
+    // catch (Throwable err) {
+    // fail("H5.H5Funmount: "+err);
+    // }
+    //
+    // // file2 was unmounted from file1, "/G/MOUNTED" does not exists in file1
+    // gid = _openGroup(fid1, group1+group2);
+    // assertTrue(gid < 0);
+    //
+    // try { H5.H5Fclose(fid1); } catch (Exception ex) {}
+    // try { H5.H5Fclose(fid2); } catch (Exception ex) {}
+    //
+    // _deleteFile(file1);
+    // _deleteFile(file2);
+    // }
+}
diff --git a/java/test/TestH5Fbasic.java b/java/test/TestH5Fbasic.java
new file mode 100644
index 0000000..c08daff
--- /dev/null
+++ b/java/test/TestH5Fbasic.java
@@ -0,0 +1,320 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Fbasic {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    private static final String TXT_FILE = "test.txt";
+    long H5fid = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file() throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Fcreate() {
+        assertTrue(H5fid > 0);
+    }
+
+    @Test
+    public void testH5Fis_hdf5() {
+        boolean isH5 = false;
+
+        try {
+            isH5 = H5.H5Fis_hdf5(H5_FILE);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fis_hdf5 failed on " + H5_FILE + ": " + err);
+        }
+        assertTrue(isH5 == true);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Fcreate_EXCL() throws Throwable {
+        H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_EXCL,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Fopen_read_only() throws Throwable {
+        long fid = -1;
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+
+        // set the file to read-only
+        File file = new File(H5_FILE);
+        if (file.setWritable(false)) {
+            // this should fail.
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+
+            try {
+                H5.H5Fclose(fid);
+            }
+            catch (Exception ex) {
+            }
+        }
+        else {
+            fail("File.setWritable(true) failed.");
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Freopen_closed() throws Throwable {
+        long fid = -1;
+        long fid2 = -1;
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+
+        // should fail because the file was closed.
+        fid2 = H5.H5Freopen(fid);
+    }
+
+    @Test
+    public void testH5Freopen() {
+        long fid = -1;
+        long fid2 = -1;
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            fid2 = H5.H5Freopen(fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Freopen: " + err);
+        }
+        assertTrue(fid2 > 0);
+
+        try {
+            H5.H5Fclose(fid2);
+        }
+        catch (Exception ex) {
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+    }
+
+    @Test
+    public void testH5Fclose() {
+        long fid = -1;
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fclose: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Fclose_twice() throws Throwable {
+        long fid = -1;
+
+        try {
+            fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDWR,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fclose: " + err);
+        }
+
+        // it should fail since the file was closed.
+        H5.H5Fclose(fid);
+    }
+
+    @Test
+    public void testH5Fget_freespace() {
+        long freeSpace = 0;
+
+        try {
+            freeSpace = H5.H5Fget_freespace(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_freespace: " + err);
+        }
+        assertEquals(freeSpace, 0);
+    }
+
+    // TODO add/and delete objects and test freespace
+
+    @Test
+    public void testH5Fget_filesize() {
+        long fileSize = 0;
+
+        try {
+            fileSize = H5.H5Fget_filesize(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_freespace: " + err);
+        }
+        assertTrue(fileSize > 0);
+    }
+
+    // TODO add/and delete objects and test freespace
+
+    @Test
+    public void testH5Fget_mdc_hit_rate() {
+        double rate;
+
+        try {
+            rate = H5.H5Fget_mdc_hit_rate(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_mdc_hit_rate: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Fget_mdc_size() {
+        int nentries = -1;
+        long cache_sizes[] = new long[3];
+
+        try {
+            nentries = H5.H5Fget_mdc_size(H5fid, cache_sizes);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_mdc_size: " + err);
+        }
+        assertTrue("H5.H5Fget_mdc_size #:" + nentries, nentries == 4);
+    }
+
+    // TODO: test more cases of different cache sizes.
+
+    @Test
+    public void testH5Freset_mdc_hit_rate_stats() {
+
+        try {
+            H5.H5Freset_mdc_hit_rate_stats(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Freset_mdc_hit_rate_stats: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Fget_name() {
+        String fname = null;
+
+        try {
+            fname = H5.H5Fget_name(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_name: " + err);
+        }
+        assertNotNull(fname);
+        assertEquals(fname, H5_FILE);
+    }
+
+    @Test
+    public void testH5Fclear_elink_file_cache() {
+
+        try {
+            H5.H5Fclear_elink_file_cache(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Freset_mdc_hit_rate_stats: " + err);
+        }
+    }
+}
diff --git a/java/test/TestH5Fparams.java b/java/test/TestH5Fparams.java
new file mode 100644
index 0000000..2d67f3d
--- /dev/null
+++ b/java/test/TestH5Fparams.java
@@ -0,0 +1,215 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.structs.H5F_info2_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Fparams {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Fcreate_null() throws Throwable {
+        H5.H5Fcreate(null, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Fopen_null() throws Throwable {
+        H5.H5Fopen(null, HDF5Constants.H5F_ACC_RDWR, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Fis_hdf5_null() throws Throwable {
+        H5.H5Fis_hdf5(null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Fmount_null() throws Throwable {
+        H5.H5Fmount(-1, null, -1, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Funmount_null() throws Throwable {
+        H5.H5Funmount(-1, null);
+    }
+
+    @Test
+    public void testH5Fis_hdf5_text() {
+        File txtFile = null;
+        boolean isH5 = false;
+
+        try {
+            txtFile = new File("test.txt");
+            if (!txtFile.exists())
+                txtFile.createNewFile();
+            isH5 = H5.H5Fis_hdf5("test.txt");
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fis_hdf5 failed on test.txt: " + err);
+        }
+
+        assertFalse(isH5);
+
+        try {
+            txtFile.delete();
+        }
+        catch (SecurityException e) {
+            ;// e.printStackTrace();
+        }
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Fclose_negative() throws Throwable {
+        // cannot close a file with negative id.
+        int fid = H5.H5Fclose(-1);
+        assertTrue(fid == 0);
+    }
+
+    @Test
+    public void testH5Fcreate() {
+        long fid = -1;
+        File file = null;
+
+        try {
+            fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            if (fid > 0) {
+                H5.H5Fclose(fid);
+            }
+            file = new File("test.h5");
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+    }
+
+    @Test
+    public void testH5Fflush_global() {
+        long fid = -1;
+
+        try {
+            fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_GLOBAL);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fflush: " + err);
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+    }
+
+    @Test
+    public void testH5Fflush_local() {
+        long fid = -1;
+
+        try {
+            fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fopen: " + err);
+        }
+
+        try {
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fflush: " + err);
+        }
+
+        try {
+            H5.H5Fclose(fid);
+        }
+        catch (Exception ex) {
+        }
+    }
+
+    @Test
+    public void testH5Fget_info() {
+        long fid = -1;
+
+        try {
+            try {
+                fid = H5.H5Fcreate("test.h5", HDF5Constants.H5F_ACC_TRUNC,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                fail("H5.H5Fopen: " + err);
+            }
+
+            try {
+                H5F_info2_t finfo = H5.H5Fget_info(fid);
+                assertEquals(finfo.super_version, 0);
+                assertEquals(finfo.free_version, 0);
+                assertEquals(finfo.sohm_version, 0);
+            }
+            catch (Throwable err) {
+                fail("H5.H5Fget_info: " + err);
+            }
+        }
+        catch (Exception e) {
+           e.printStackTrace();
+        }
+        finally {
+            try {H5.H5Fclose(fid);} catch (Exception ex) {}
+        }
+    }
+}
diff --git a/java/test/TestH5Fswmr.java b/java/test/TestH5Fswmr.java
new file mode 100644
index 0000000..21c3642
--- /dev/null
+++ b/java/test/TestH5Fswmr.java
@@ -0,0 +1,93 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Fswmr {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "testswmr.h5";
+
+    long H5fid = -1;
+    long H5fapl = -1;
+    long H5fcpl = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5fapl = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+        H5fcpl = H5.H5Pcreate(HDF5Constants.H5P_FILE_CREATE);
+        H5.H5Pset_libver_bounds(H5fapl, HDF5Constants.H5F_LIBVER_LATEST, HDF5Constants.H5F_LIBVER_LATEST);
+
+        H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC, H5fcpl, H5fapl);
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fapl > 0) {
+            try {H5.H5Pclose(H5fapl);} catch (Exception ex) {}
+            H5fapl = -1;
+        }
+        if (H5fcpl > 0) {
+            try {H5.H5Pclose(H5fcpl);} catch (Exception ex) {}
+            H5fcpl = -1;
+        }
+       if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+            H5fid = -1;
+        }
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Fstart_swmr_write() {
+        long plist = -1;
+
+        try {
+            H5.H5Fstart_swmr_write(H5fid);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fstart_swmr_write: " + err);
+        }
+    }
+}
diff --git a/java/test/TestH5G.java b/java/test/TestH5G.java
new file mode 100644
index 0000000..32329bb
--- /dev/null
+++ b/java/test/TestH5G.java
@@ -0,0 +1,505 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5G {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    private static final String H5_FILE2 = "test2.h5";
+    private static final String[] GROUPS = { "/G1", "/G1/G11", "/G1/G12",
+            "/G1/G11/G111", "/G1/G11/G112", "/G1/G11/G113", "/G1/G11/G114" };
+    private static final String[] GROUPS2 = { "/G1", "/G1/G14", "/G1/G12", "/G1/G13", "/G1/G11"};
+    long H5fid = -1;
+    long H5fid2 = -1;
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue("TestH5G._createGroup: ", gid > 0);
+
+        return gid;
+    }
+
+    private final long _createGroup2(long fid, String name) {
+        long gid = -1;
+        long gcpl = -1;
+        try {
+            gcpl = H5.H5Pcreate(HDF5Constants.H5P_GROUP_CREATE); //create gcpl
+        }
+        catch (final Exception ex) {
+            fail("H5.H5Pcreate(): " + ex);
+        }
+        assertTrue("TestH5G._createGroup2: ", gcpl >= 0);
+        try {
+            H5.H5Pset_link_creation_order(gcpl, HDF5Constants.H5P_CRT_ORDER_TRACKED
+                    + HDF5Constants.H5P_CRT_ORDER_INDEXED); // Set link creation order
+        }
+        catch (final Exception ex) {
+            try {H5.H5Pclose(gcpl);} catch (final Exception exx) {}
+            fail("H5.H5Pset_link_creation_order: " + ex);
+        }
+        try {
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                    gcpl, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        finally {
+            try {H5.H5Pclose(gcpl);} catch (final Exception ex) {}
+        }
+        assertTrue("TestH5G._createGroup2: ", gid > 0);
+
+        return gid;
+    }
+
+    private final long _openGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            gid = H5.H5Gopen(fid, name, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            gid = -1;
+            err.printStackTrace();
+            fail("H5.H5Gopen: " + err);
+        }
+        assertTrue("TestH5G._openGroup: ", gid > 0);
+
+        return gid;
+    }
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+
+            H5fid2 = H5.H5Fcreate(H5_FILE2, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.createH5file: " + err);
+        }
+        assertTrue("TestH5G.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5G.createH5file: H5.H5Fcreate: ", H5fid2 > 0);
+
+        long gid = -1;
+
+        for (int i = 0; i < GROUPS.length; i++) {
+            gid = _createGroup(H5fid, GROUPS[i]);
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+        }
+
+        for (int i = 0; i < GROUPS2.length; i++) {
+            gid = _createGroup2(H5fid2, GROUPS2[i]);
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+        }
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        H5.H5Fflush(H5fid2, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        if (H5fid2 > 0) {
+            try {H5.H5Fclose(H5fid2);} catch (Exception ex) {}
+        }
+       _deleteFile(H5_FILE);
+       _deleteFile(H5_FILE2);
+       System.out.println();
+    }
+
+    @Test
+    public void testH5Gopen() {
+        long gid = -1;
+        for (int i = 0; i < GROUPS.length; i++) {
+            try {
+                gid = H5.H5Gopen(H5fid, GROUPS[i], HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gopen: H5.H5Gopen: " + err);
+            }
+            assertTrue("TestH5G.testH5Gopen: ", gid > 0);
+            try {
+                H5.H5Gclose(gid);
+            }
+            catch (Exception ex) {
+            }
+        }
+    }
+
+    @Test
+    public void testH5Gget_create_plist() {
+        long gid = -1;
+        long pid = -1;
+
+        for (int i = 0; i < GROUPS.length; i++) {
+            try {
+                gid = H5.H5Gopen(H5fid, GROUPS[i], HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_create_plist: H5.H5Gopen: " + err);
+            }
+            assertTrue("TestH5G.testH5Gget_create_plist: ", gid > 0);
+
+            try {
+                pid = H5.H5Gget_create_plist(gid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_create_plist: H5.H5Gget_create_plist: " + err);
+            }
+            assertTrue("TestH5G.testH5Gget_create_plist: ", pid > 0);
+
+            try {
+                H5.H5Gclose(gid);
+            }
+            catch (Exception ex) {
+            }
+        }
+    }
+
+    @Test
+    public void testH5Gget_info() {
+        H5G_info_t info = null;
+
+        for (int i = 0; i < GROUPS.length; i++) {
+
+            try {
+                info = H5.H5Gget_info(H5fid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_info: H5.H5Gget_info: " + err);
+            }
+            assertNotNull("TestH5G.testH5Gget_info: ", info);
+        }
+    }
+
+    @Test
+    public void testH5Gget_info_by_name() {
+        H5G_info_t info = null;
+
+        for (int i = 0; i < GROUPS.length; i++) {
+            try {
+                info = H5.H5Gget_info_by_name(H5fid, GROUPS[i],
+                        HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_info_by_name: H5.H5Gget_info_by_name: " + err);
+            }
+            assertNotNull("TestH5G.testH5Gget_info_by_name: ", info);
+        }
+    }
+
+    @Test
+    public void testH5Gget_info_by_idx() {
+        H5G_info_t info = null;
+        for (int i = 0; i < 2; i++) {
+            try {
+                info = H5.H5Gget_info_by_idx(H5fid, "/G1",
+                        HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC,
+                        i, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_info_by_idx: H5.H5Gget_info_by_idx: " + err);
+            }
+            assertNotNull("TestH5G.testH5Gget_info_by_idx: ", info);
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_all() {
+        H5G_info_t info = null;
+
+        long gid = _openGroup(H5fid, GROUPS[0]);
+
+        try {
+            info = H5.H5Gget_info(gid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all: H5.H5Gget_info: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+        assertNotNull("TestH5G.testH5Gget_obj_info_all: ", info);
+        assertTrue("TestH5G.testH5Gget_obj_info_all: number of links is empty", info.nlinks > 0);
+        String objNames[] = new String[(int) info.nlinks];
+        int objTypes[] = new int[(int) info.nlinks];
+        int lnkTypes[] = new int[(int) info.nlinks];
+        long objRefs[] = new long[(int) info.nlinks];
+
+        int names_found = 0;
+        try {
+            names_found = H5.H5Gget_obj_info_all(H5fid, GROUPS[0], objNames,
+                    objTypes, lnkTypes, objRefs, HDF5Constants.H5_INDEX_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all: H5.H5Gget_obj_info_all: " + err);
+        }
+
+        assertTrue("number found[" + names_found + "] different than expected["
+                + objNames.length + "]", names_found == objNames.length);
+        for (int i = 0; i < objNames.length; i++) {
+            assertNotNull("name #" + i + " does not exist", objNames[i]);
+            assertTrue("TestH5G.testH5Gget_obj_info_all: ", objNames[i].length() > 0);
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_all_gid() {
+        H5G_info_t info = null;
+
+        long gid = _openGroup(H5fid, GROUPS[0]);
+
+        try {
+            info = H5.H5Gget_info(gid);
+            assertNotNull("TestH5G.testH5Gget_obj_info_all_gid: ", info);
+            assertTrue("TestH5G.testH5Gget_obj_info_all_gid: number of links is empty", info.nlinks > 0);
+            String objNames[] = new String[(int) info.nlinks];
+            long objRefs[] = new long[(int) info.nlinks];
+            int lnkTypes[] = new int[(int) info.nlinks];
+            int objTypes[] = new int[(int) info.nlinks];
+
+            int names_found = 0;
+            try {
+                names_found = H5.H5Gget_obj_info_all(gid, null, objNames, objTypes, lnkTypes,
+                        objRefs, HDF5Constants.H5_INDEX_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_obj_info_all_gid: H5.H5Gget_obj_info_all: " + err);
+            }
+
+            assertTrue("TestH5G.testH5Gget_obj_info_all_gid: number found[" + names_found + "] different than expected["
+                    + objNames.length + "]", names_found == objNames.length);
+            for (int i = 0; i < objNames.length; i++) {
+                assertNotNull("TestH5G.testH5Gget_obj_info_all_gid: name #" + i + " does not exist", objNames[i]);
+                assertTrue("TestH5G.testH5Gget_obj_info_all_gid: ", objNames[i].length() > 0);
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all_gid: H5.H5Gget_info: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_all_gid2() {
+        H5G_info_t info = null;
+
+        long gid = _openGroup(H5fid, GROUPS[1]);
+
+        try {
+            info = H5.H5Gget_info(gid);
+            assertNotNull("TestH5G.testH5Gget_obj_info_all_gid2: ", info);
+            assertTrue("TestH5G.testH5Gget_obj_info_all_gid2: number of links is empty", info.nlinks > 0);
+            String objNames[] = new String[(int) info.nlinks];
+            long objRefs[] = new long[(int) info.nlinks];
+            int lnkTypes[] = new int[(int) info.nlinks];
+            int objTypes[] = new int[(int) info.nlinks];
+
+            int names_found = 0;
+            try {
+                names_found = H5.H5Gget_obj_info_all(gid, null, objNames, objTypes, lnkTypes,
+                        objRefs, HDF5Constants.H5_INDEX_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5G.testH5Gget_obj_info_all_gid2: H5.H5Gget_obj_info_all: " + err);
+            }
+
+            assertTrue("TestH5G.testH5Gget_obj_info_all_gid2: number found[" + names_found + "] different than expected["
+                    + objNames.length + "]", names_found == objNames.length);
+            for (int i = 0; i < objNames.length; i++) {
+                assertNotNull("TestH5G.testH5Gget_obj_info_all_gid2: name #" + i + " does not exist", objNames[i]);
+                assertTrue("TestH5G.testH5Gget_obj_info_all_gid2: ", objNames[i].length() > 0);
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all_gid2: H5.H5Gget_info: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_max() {
+        long gid = _openGroup(H5fid, GROUPS[0]);
+        long groups_max_size = GROUPS.length + 1;
+        String objNames[] = new String[(int)groups_max_size];
+        int objTypes[] = new int[(int)groups_max_size];
+        int lnkTypes[] = new int[(int)groups_max_size];
+        long objRefs[] = new long[(int)groups_max_size];
+
+        int names_found = 0;
+        try {
+            names_found = H5.H5Gget_obj_info_max(gid, objNames, objTypes, lnkTypes,
+                    objRefs, groups_max_size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_max: H5.H5Gget_obj_info_max: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+
+        // expected number does not include root group
+        assertTrue("TestH5G.testH5Gget_obj_info_max: number found[" + names_found + "] different than expected["
+                + (GROUPS.length - 1) + "]", names_found == (GROUPS.length - 1));
+        for (int i = 0; i < GROUPS.length-1; i++) {
+            assertNotNull("TestH5G.testH5Gget_obj_info_max: name #"+i+" does not exist",objNames[i]);
+            assertTrue("TestH5G.testH5Gget_obj_info_max: ", objNames[i].length()>0);
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_max_limit() {
+        long gid = _openGroup(H5fid, GROUPS[0]);
+        long groups_max_size = GROUPS.length - 3;
+        String objNames[] = new String[(int)groups_max_size];
+        int objTypes[] = new int[(int)groups_max_size];
+        int lnkTypes[] = new int[(int)groups_max_size];
+        long objRefs[] = new long[(int)groups_max_size];
+
+        int names_found = 0;
+        try {
+            names_found = H5.H5Gget_obj_info_max(gid, objNames, objTypes, lnkTypes,
+                    objRefs, groups_max_size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_max_limit: H5.H5Gget_obj_info_max: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+
+        assertTrue("TestH5G.testH5Gget_obj_info_max_limit: number found[" + names_found + "] different than expected["
+                + groups_max_size + "]", names_found == groups_max_size);
+        for (int i = 0; i < objNames.length; i++) {
+            assertNotNull("TestH5G.testH5Gget_obj_info_max_limit: name #" + i + " does not exist", objNames[i]);
+            assertTrue("TestH5G.testH5Gget_obj_info_max_limit: ", objNames[i].length() > 0);
+        }
+    }
+
+    @Test
+    public void testH5Gget_obj_info_all_byIndexType() {
+        H5G_info_t info = null;
+
+        long gid = _openGroup(H5fid2, GROUPS2[0]);
+
+        try {
+            info = H5.H5Gget_info(gid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all_byIndexType: H5.H5Gget_info: " + err);
+        }
+        finally {
+            try {H5.H5Gclose(gid);} catch (Exception ex) { }
+        }
+
+        assertNotNull("TestH5G.testH5Gget_obj_info_all_byIndexType: ", info);
+        assertTrue("TestH5G.testH5Gget_obj_info_all_byIndexType: number of links is empty", info.nlinks > 0);
+        String objNames[] = new String[(int) info.nlinks];
+        int objTypes[] = new int[(int) info.nlinks];
+        int lnkTypes[] = new int[(int) info.nlinks];
+        long objRefs[] = new long[(int) info.nlinks];
+
+        try {
+            H5.H5Gget_obj_info_all(H5fid2, GROUPS2[0], objNames,
+                    objTypes, lnkTypes, objRefs, HDF5Constants.H5_INDEX_CRT_ORDER);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all_byIndexType: H5.H5Gget_obj_info_all: " + err);
+        }
+
+        assertEquals("G12",objNames[1]);
+        assertEquals("G13", objNames[2] );
+        assertEquals("G11", objNames[3] );
+
+        try {
+           H5.H5Gget_obj_info_all(H5fid2, GROUPS2[0], objNames,
+                    objTypes, lnkTypes, objRefs, HDF5Constants.H5_INDEX_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5G.testH5Gget_obj_info_all_byIndexType: H5.H5Gget_obj_info_all: " + err);
+        }
+
+        assertEquals("G12",objNames[1]);
+        assertEquals("G13", objNames[2] );
+        assertEquals("G14", objNames[3] );
+    }
+
+}
diff --git a/java/test/TestH5Gbasic.java b/java/test/TestH5Gbasic.java
new file mode 100644
index 0000000..70acef4
--- /dev/null
+++ b/java/test/TestH5Gbasic.java
@@ -0,0 +1,371 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Gbasic {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    long H5fid = -1;
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+
+        return gid;
+    }
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Gclose_invalid() throws Throwable {
+        long gid = H5.H5Gclose(-1);
+        assertTrue(gid == 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Gcreate_null() throws Throwable {
+        long gid = -1;
+
+        // it should fail because the group name is null
+        gid = H5.H5Gcreate(H5fid, null, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gcreate_invalid() throws Throwable {
+        H5.H5Gcreate(-1, "Invalid ID", HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Gcreate() {
+        long gid = -1;
+        try {
+            gid = H5.H5Gcreate(H5fid, "/testH5Gcreate",
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue(gid > 0);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Gclose() {
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {
+            H5.H5Gclose(gid);
+        }
+        catch (Throwable err) {
+            fail("H5Gclose: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gcreate_exists() throws Throwable {
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+
+        // it should failed now because the group already exists in file
+        gid = H5.H5Gcreate(H5fid, "/testH5Gcreate",
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Gcreate_anon() {
+        long gid = -1;
+        try {
+            gid = H5.H5Gcreate_anon(H5fid, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate_anon: " + err);
+        }
+        assertTrue(gid > 0);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Gopen_null() throws Throwable {
+        long gid = -1;
+
+        gid = H5.H5Gopen(H5fid, null, HDF5Constants.H5P_DEFAULT);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gopen_invalid() throws Throwable {
+        H5.H5Gopen(-1, "Invalid ID", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gopen_not_exists() throws Throwable {
+        long gid = -1;
+
+         gid = H5.H5Gopen(H5fid, "Never_created", HDF5Constants.H5P_DEFAULT);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Gopen() {
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+
+        try {
+            gid = H5.H5Gopen(H5fid, "/testH5Gcreate",
+                        HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gopen: " + err);
+        }
+        assertTrue(gid > 0);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_create_plist_invalid() throws Throwable {
+        H5.H5Gget_create_plist(-1);
+    }
+
+    @Test
+    public void testH5Gget_create_plist() {
+        long pid = -1;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {
+            pid = H5.H5Gget_create_plist(gid);
+        }
+        catch (Throwable err) {
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+            err.printStackTrace();
+            fail("H5.H5Gget_create_plist: " + err);
+        }
+        assertTrue(pid > 0);
+
+        try {H5.H5Pclose(pid);} catch (Exception ex) {}
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_info_invalid() throws Throwable {
+        H5.H5Gget_info(-1);
+    }
+
+    @Test
+    public void testH5Gget_info() {
+        H5G_info_t info = null;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {
+            info = H5.H5Gget_info(gid);
+        }
+        catch (Throwable err) {
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+            err.printStackTrace();
+            fail("H5.H5Gget_info: " + err);
+        }
+        assertNotNull(info);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Gget_info_by_name_null() throws Throwable {
+        H5.H5Gget_info_by_name(-1, null, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_info_by_name_invalid() throws Throwable {
+        H5.H5Gget_info_by_name(-1, "/testH5Gcreate", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_info_by_name_not_exists() throws Throwable {
+        H5.H5Gget_info_by_name(H5fid, "/testH5Gcreate",
+                HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Gget_info_by_name() {
+        H5G_info_t info = null;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {
+            info = H5.H5Gget_info_by_name(gid, "/testH5Gcreate",
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+            err.printStackTrace();
+            fail("H5.H5Gget_info_by_name: " + err);
+        }
+        assertNotNull(info);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Gget_info_by_name_fileid() {
+        H5G_info_t info = null;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+
+        try {
+            info = H5.H5Gget_info_by_name(H5fid, "/testH5Gcreate",
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            try {H5.H5Gclose(gid);} catch (Exception ex) {}
+            err.printStackTrace();
+            fail("H5.H5Gget_info_by_name: " + err);
+        }
+        assertNotNull(info);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Gget_info_by_idx_null() throws Throwable {
+        H5.H5Gget_info_by_idx(-1, null, HDF5Constants.H5_INDEX_NAME,
+                HDF5Constants.H5_ITER_INC, 1L, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_info_by_idx_invalid() throws Throwable {
+        H5.H5Gget_info_by_idx(-1, "/testH5Gcreate", HDF5Constants.H5_INDEX_NAME,
+                HDF5Constants.H5_ITER_INC, 1L, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Gget_info_by_idx_not_exists() throws Throwable {
+        H5.H5Gget_info_by_idx(H5fid, "/testH5Gcreate",
+                HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 1L,
+                HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Gget_info_by_idx() {
+        H5G_info_t info = null;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+
+        try {
+            info = H5.H5Gget_info_by_idx(gid, "/", HDF5Constants.H5_INDEX_NAME,
+                    HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gget_info_by_idx: " + err);
+        }
+        assertNotNull(info);
+
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Gget_info_by_idx_fileid() {
+        H5G_info_t info = null;
+        long gid = _createGroup(H5fid, "/testH5Gcreate");
+        assertTrue(gid > 0);
+        try {H5.H5Gclose(gid);} catch (Exception ex) {}
+
+        try {
+            info = H5.H5Gget_info_by_idx(H5fid, "/",
+                    HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0,
+                    HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gget_info_by_idx: " + err);
+        }
+        assertNotNull(info);
+    }
+
+}
diff --git a/java/test/TestH5Giterate.java b/java/test/TestH5Giterate.java
new file mode 100644
index 0000000..17f594e
--- /dev/null
+++ b/java/test/TestH5Giterate.java
@@ -0,0 +1,136 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5G_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Giterate {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "h5ex_g_iterate.hdf";
+    long H5fid = -1;
+
+    private final long _openGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            gid = H5.H5Gopen(fid, name, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            gid = -1;
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+
+        return gid;
+    }
+
+    @Before
+    public void openH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDONLY,
+                HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Fopen: openH5file: " + err);
+        }
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Gget_obj_info_all() {
+        H5G_info_t info = null;
+
+        long gid = _openGroup(H5fid, "/");
+
+        try {
+            info = H5.H5Gget_info(gid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gget_info: " + err);
+        }
+        try {
+            H5.H5Gclose(gid);
+        }
+        catch (Exception ex) {
+        }
+        assertNotNull(info);
+        assertTrue("number of links is empty", info.nlinks > 0);
+        String objNames[] = new String[(int) info.nlinks];
+        int objTypes[] = new int[(int) info.nlinks];
+        int lnkTypes[] = new int[(int) info.nlinks];
+        long objRefs[] = new long[(int) info.nlinks];
+
+        int names_found = 0;
+        try {
+            names_found = H5.H5Gget_obj_info_all(H5fid, "/", objNames,
+                    objTypes, lnkTypes, objRefs, HDF5Constants.H5_INDEX_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gget_obj_info_all: " + err);
+        }
+
+        assertTrue("number found[" + names_found + "] different than expected["
+                + objNames.length + "]", names_found == objNames.length);
+        for (int i = 0; i < objNames.length; i++) {
+            assertNotNull("name #" + i + " does not exist", objNames[i]);
+            assertTrue(objNames[i].length() > 0);
+            if (objTypes[i]==HDF5Constants.H5O_TYPE_GROUP) {
+                assertTrue("Group is index: "+i + " ",i==2);
+                assertTrue("Group is : "+objNames[i] + " ",objNames[i].compareToIgnoreCase("G1")==0);
+            }
+            else if (objTypes[i]==HDF5Constants.H5O_TYPE_DATASET) {
+                assertTrue("Dataset is index: "+i + " ",(i==0)||(i==3));
+                if(i==0)
+                    assertTrue("Dataset is : "+objNames[i] + " ",objNames[i].compareToIgnoreCase("DS1")==0);
+                else
+                    assertTrue("Dataset is : "+objNames[i] + " ",objNames[i].compareToIgnoreCase("L1")==0);
+            }
+            else if (objTypes[i]==HDF5Constants.H5O_TYPE_NAMED_DATATYPE) {
+                assertTrue("Datatype is index: "+i + " ",i==1);
+                assertTrue("Datatype is : "+objNames[i] + " ",objNames[i].compareToIgnoreCase("DT1")==0);
+            }
+            else {
+                fail("  Unknown at index: " + i + " " + objNames[i]);
+            }
+        }
+    }
+
+}
diff --git a/java/test/TestH5Lbasic.java b/java/test/TestH5Lbasic.java
new file mode 100644
index 0000000..c35519e
--- /dev/null
+++ b/java/test/TestH5Lbasic.java
@@ -0,0 +1,371 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5L_iterate_cb;
+import hdf.hdf5lib.callbacks.H5L_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5L_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Lbasic {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "h5ex_g_iterate.hdf";
+    long H5fid = -1;
+
+    @Before
+    public void openH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDONLY,
+                HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Fopen: openH5file: " + err);
+        }
+    }
+
+    @After
+    public void closeH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Lexists() {
+        boolean link_exists = false;
+        try {
+            link_exists = H5.H5Lexists(H5fid, "None", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+        assertFalse("H5Lexists ",link_exists);
+        try {
+            link_exists = H5.H5Lexists(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+        assertTrue("H5Lexists ",link_exists);
+        try {
+            link_exists = H5.H5Lexists(H5fid, "G1/DS2", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+        assertTrue("H5Lexists ",link_exists);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_not_exist() throws Throwable {
+        H5.H5Lget_info(H5fid, "None", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lget_info_dataset() {
+        H5L_info_t link_info = null;
+        try {
+            link_info = H5.H5Lget_info(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertFalse("H5Lget_info ",link_info==null);
+        assertTrue("H5Lget_info link type",link_info.type==HDF5Constants.H5L_TYPE_HARD);
+    }
+
+    @Test
+    public void testH5Lget_info_hardlink() {
+        H5L_info_t link_info = null;
+        try {
+            link_info = H5.H5Lget_info(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertFalse("H5Lget_info ",link_info==null);
+        assertTrue("H5Lget_info link type",link_info.type==HDF5Constants.H5L_TYPE_HARD);
+        assertTrue("Link Address ",link_info.address_val_size>0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_by_idx_name_not_exist_name() throws Throwable {
+        H5.H5Lget_info_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_by_idx_name_not_exist_create() throws Throwable {
+        H5.H5Lget_info_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_by_idx_not_exist_name() throws Throwable {
+        H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 5, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_by_idx_not_exist_create() throws Throwable {
+        H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 5, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lget_info_by_idx_n0() {
+        H5L_info_t link_info = null;
+        H5L_info_t link_info2 = null;
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("H5Lget_info_by_idx ",link_info==null);
+        assertTrue("H5Lget_info_by_idx link type",link_info.type==HDF5Constants.H5L_TYPE_HARD);
+        try {
+            link_info2 = H5.H5Lget_info(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertTrue("Link Address ",link_info.address_val_size==link_info2.address_val_size);
+    }
+
+    @Test
+    public void testH5Lget_info_by_idx_n3() {
+        H5L_info_t link_info = null;
+        H5L_info_t link_info2 = null;
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 3, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("H5Lget_info_by_idx ",link_info==null);
+        assertTrue("H5Lget_info_by_idx link type",link_info.type==HDF5Constants.H5L_TYPE_HARD);
+        try {
+            link_info2 = H5.H5Lget_info(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertTrue("Link Address ",link_info.address_val_size==link_info2.address_val_size);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_name_by_idx_not_exist() throws Throwable {
+        H5.H5Lget_name_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lget_name_by_idx_n0() {
+        String link_name = null;
+        try {
+            link_name = H5.H5Lget_name_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_name_by_idx: " + err);
+        }
+        assertFalse("H5Lget_name_by_idx ",link_name==null);
+        assertTrue("Link Name ",link_name.compareTo("DS1")==0);
+    }
+
+    @Test
+    public void testH5Lget_name_by_idx_n3() {
+        String link_name = null;
+        try {
+            link_name = H5.H5Lget_name_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 3, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_name_by_idx: " + err);
+        }
+        assertFalse("H5Lget_name_by_idx ",link_name==null);
+        assertTrue("Link Name ",link_name.compareTo("L1")==0);
+    }
+
+    @Test
+    public void testH5Lvisit() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Lvisit(H5fid, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lvisit: " + err);
+        }
+        assertFalse("H5Lvisit ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Lvisit "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==5);
+        assertTrue("H5Lvisit "+(((H5L_iter_data)iter_data).iterdata.get(0)).link_name,(((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Lvisit "+(((H5L_iter_data)iter_data).iterdata.get(1)).link_name,(((H5L_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("DT1")==0);
+        assertTrue("H5Lvisit "+(((H5L_iter_data)iter_data).iterdata.get(2)).link_name,(((H5L_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Lvisit "+(((H5L_iter_data)iter_data).iterdata.get(3)).link_name,(((H5L_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("G1/DS2")==0);
+        assertTrue("H5Lvisit "+(((H5L_iter_data)iter_data).iterdata.get(4)).link_name,(((H5L_iter_data)iter_data).iterdata.get(4)).link_name.compareToIgnoreCase("L1")==0);
+    }
+
+    @Test
+    public void testH5Lvisit_by_name() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Lvisit_by_name(H5fid, "G1", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, iter_cb, iter_data, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lvisit_by_name: " + err);
+        }
+        assertFalse("H5Lvisit_by_name ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Lvisit_by_name "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==1);
+        assertTrue("H5Lvisit_by_name "+(((H5L_iter_data)iter_data).iterdata.get(0)).link_name,(((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS2")==0);
+    }
+
+    @Test
+    public void testH5Literate() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Literate(H5fid, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0L, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Literate: " + err);
+        }
+        assertFalse("H5Literate ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Literate "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==4);
+        assertTrue("H5Literate "+(((H5L_iter_data)iter_data).iterdata.get(0)).link_name,(((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Literate "+(((H5L_iter_data)iter_data).iterdata.get(1)).link_name,(((H5L_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("DT1")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(2)).link_name,(((H5L_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("L1")==0);
+    }
+
+    @Test
+    public void testH5Literate_by_name() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Literate_by_name(H5fid, "G1", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0L, iter_cb, iter_data, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Literate_by_name: " + err);
+        }
+        assertFalse("H5Literate_by_name ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Literate_by_name "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==1);
+        assertTrue("H5Literate_by_name "+((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS2")==0);
+    }
+
+}
diff --git a/java/test/TestH5Lcreate.java b/java/test/TestH5Lcreate.java
new file mode 100644
index 0000000..2fbd9e3
--- /dev/null
+++ b/java/test/TestH5Lcreate.java
@@ -0,0 +1,819 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5L_iterate_cb;
+import hdf.hdf5lib.callbacks.H5L_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5L_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Lcreate {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_EXTFILE = "h5ex_g_iterate.hdf";
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long H5fcpl = -1;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did1 = -1;
+    long H5did2 = -1;
+    long H5gcpl = -1;
+    long H5gid = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5L._createDataset: ",did > 0);
+
+        return did;
+    }
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            H5gcpl = HDF5Constants.H5P_DEFAULT;
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                    H5gcpl, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue("TestH5L._createGroup: ",gid > 0);
+
+        return gid;
+    }
+
+    private final void _createHardLink(long fid, long cid, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_hard(cid, curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_hard: " + err);
+        }
+        assertTrue("TestH5L._createHardLink ", link_exists);
+    }
+
+    private final void _createSoftLink(long fid, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_soft(curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_soft: " + err);
+        }
+        assertTrue("TestH5L._createSoftLink ", link_exists);
+    }
+
+    private final void _createExternalLink(long fid, String ext_filename, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_external(ext_filename, curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_external: " + err);
+        }
+        assertTrue("TestH5L._createExternalLink ", link_exists);
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        try {
+            H5fcpl = H5.H5Pcreate(HDF5Constants.H5P_FILE_CREATE);
+            H5.H5Pset_link_creation_order(H5fcpl, HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    H5fcpl, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did1 = _createDataset(H5fid, H5dsid, "DS1", HDF5Constants.H5P_DEFAULT);
+            H5gid = _createGroup(H5fid, "/G1");
+            H5did2 = _createDataset(H5gid, H5dsid, "DS2", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5L.createH5file: " + err);
+        }
+        assertTrue("TestH5L.createH5file: H5.H5Fcreate: ",H5fid > 0);
+        assertTrue("TestH5L.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
+        assertTrue("TestH5L.createH5file: H5.H5Gcreate: ",H5gid > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5gid > 0)
+            try {H5.H5Gclose(H5gid);} catch (Exception ex) {}
+        if (H5gcpl > 0)
+            try {H5.H5Pclose(H5gcpl);} catch (Exception ex) {}
+        if (H5did2 > 0)
+            try {H5.H5Dclose(H5did2);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did1 > 0)
+            try {H5.H5Dclose(H5did1);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        if (H5fcpl > 0)
+            try {H5.H5Pclose(H5fcpl);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Lget_info_by_idx_n0_create() {
+        H5L_info_t link_info = null;
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx_n0_create:H5Pget_link_creation_order " + err);
+        }
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("H5Lget_info_by_idx ", link_info==null);
+        assertTrue("H5Lget_info_by_idx link type", link_info.type==HDF5Constants.H5L_TYPE_HARD);
+    }
+
+    @Test
+    public void testH5Lget_info_by_idx_n1_create() {
+        H5L_info_t link_info = null;
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx_n1_create:H5Pget_link_creation_order " + err);
+        }
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 1, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("H5Lget_info_by_idx ", link_info==null);
+        assertTrue("H5Lget_info_by_idx link type", link_info.type==HDF5Constants.H5L_TYPE_HARD);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_hard_cur_not_exists() throws Throwable {
+        H5.H5Lcreate_hard(H5fid, "None", H5fid, "DS1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lcreate_hard() {
+        try {
+            H5.H5Lcreate_hard(H5fid, "DS1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lcreate_hard:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_hard_dst_link_exists() throws Throwable {
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Lcreate_hard(H5fid, "L1", H5fid, "/G1/DS2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Ldelete_hard_link() {
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            H5.H5Ldelete(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            assertFalse("testH5Lcreate_hard:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Lcreate_soft() {
+        try {
+            H5.H5Lcreate_soft("DS1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lcreate_soft:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_soft_dst_link_exists() throws Throwable {
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Lcreate_soft("L1", H5fid, "/G1/DS2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Ldelete_soft_link() {
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            H5.H5Ldelete(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            assertFalse("testH5Lcreate_soft:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Lget_info_softlink() {
+        H5L_info_t link_info = null;
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertFalse("H5Lget_info ", link_info==null);
+        assertTrue("H5Lget_info link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        assertTrue("Link Address ", link_info.address_val_size>0);
+    }
+
+    @Test
+    public void testH5Lget_value_soft() {
+        String[] link_value = {null, null};
+        int link_type = -1;
+
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_type = H5.H5Lget_value(H5fid, "L1", link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_SOFT);
+        assertFalse("H5Lget_value ", link_value[0]==null);
+        assertTrue("Link Value ", link_value[0].compareTo("/G1/DS2")==0);
+    }
+
+    @Test
+    public void testH5Lcreate_soft_dangle() {
+        try {
+            H5.H5Lcreate_soft("DS3", H5fid, "L2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L2", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lcreate_soft:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Ldelete_soft_link_dangle() {
+        _createSoftLink(H5fid, "DS3", H5fid, "L2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            H5.H5Ldelete(H5fid, "L2", HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L2", HDF5Constants.H5P_DEFAULT);
+            assertFalse("testH5Lcreate_soft:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Lget_info_softlink_dangle() {
+        H5L_info_t link_info = null;
+        _createSoftLink(H5fid, "DS3", H5fid, "L2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info(H5fid, "L2", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertFalse("H5Lget_info ", link_info==null);
+        assertTrue("H5Lget_info link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        assertTrue("Link Address ", link_info.address_val_size>0);
+    }
+
+    @Test
+    public void testH5Lget_value_dangle() {
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        _createSoftLink(H5fid, "DS3", H5fid, "L2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_type = H5.H5Lget_value(H5fid, "L2", link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_SOFT);
+        assertFalse("H5Lget_value ", link_value[0]==null);
+        assertTrue("Link Value ", link_value[0].compareTo("DS3")==0);
+    }
+
+    @Test
+    public void testH5Lcreate_external() {
+        try {
+            H5.H5Lcreate_external(H5_EXTFILE, "DT1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lcreate_external:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lexists: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Lget_info_externallink() {
+        H5L_info_t link_info = null;
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info: " + err);
+        }
+        assertFalse("H5Lget_info ", link_info==null);
+        assertTrue("H5Lget_info link type", link_info.type==HDF5Constants.H5L_TYPE_EXTERNAL);
+        assertTrue("Link Address ", link_info.address_val_size>0);
+    }
+
+    @Test
+    public void testH5Lget_value_external(){
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_type = H5.H5Lget_value(H5fid, "L1", link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_EXTERNAL);
+        assertFalse("H5Lget_value ", link_value[0]==null);
+        assertFalse("H5Lget_value ", link_value[1]==null);
+        assertTrue("Link Value ", link_value[0].compareTo("DT1")==0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcopy_cur_not_exists() throws Throwable {
+        H5.H5Lcopy(H5fid, "None", H5fid, "DS1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lcopy() {
+        try {
+            H5.H5Lcopy(H5fid, "DS1", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "CPY1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lcopy:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Lcopy:H5Lexists: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcopy_dst_link_exists() throws Throwable {
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Lcopy(H5fid, "CPY1", H5fid, "/G1/DS2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lmove_cur_not_exists() throws Throwable {
+        H5.H5Lmove(H5fid, "None", H5fid, "DS1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lmove() {
+        try {
+            H5.H5Lmove(H5fid, "DS1", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "CPY1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Lmove:H5Lexists ", link_exists);
+            link_exists = H5.H5Lexists(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            assertFalse("testH5Lmove:H5Lexists ", link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Lmove:H5Lexists: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lmove_dst_link_exists() throws Throwable {
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Lmove(H5fid, "CPY1", H5fid, "/G1/DS2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_value_by_idx_not_exist_name() throws Throwable {
+        String[] link_value = {null,null};
+        H5.H5Lget_value_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, link_value, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_value_by_idx_not_exist_create() throws Throwable {
+        String[] link_value = {null,null};
+        H5.H5Lget_value_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, link_value, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Lget_value_by_idx_n2_name() {
+        H5L_info_t link_info = null;
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Lget_value_by_idx_n2 ",link_info==null);
+        assertTrue("testH5Lget_value_by_idx_n2 link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        try {
+            link_type = H5.H5Lget_value_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value_by_idx: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_SOFT);
+        assertFalse("testH5Lget_value_by_idx_n2 ", link_value[0]==null);
+        assertTrue("testH5Lget_value_by_idx_n2 Link Value ", link_value[0].compareTo("/G1/DS2")==0);
+    }
+
+    @Test
+    public void testH5Lget_value_by_idx_n2_create() {
+        H5L_info_t link_info = null;
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value_by_idx_n2_create: H5Pget_link_creation_order " + err);
+        }
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Lget_value_by_idx_n2 ", link_info==null);
+        assertTrue("testH5Lget_value_by_idx_n2 link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        try {
+            link_type = H5.H5Lget_value_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value_by_idx: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_SOFT);
+        assertFalse("testH5Lget_value_by_idx_n2 ", link_value[0]==null);
+        assertTrue("testH5Lget_value_by_idx_n2 Link Value ", link_value[0].compareTo("/G1/DS2")==0);
+    }
+
+    @Test
+    public void testH5Lget_value_by_idx_external_name() {
+        H5L_info_t link_info = null;
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "LE", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Lget_value_by_idx_ext ", link_info==null);
+        assertTrue("testH5Lget_value_by_idx_ext link type "+link_info.type, link_info.type==HDF5Constants.H5L_TYPE_EXTERNAL);
+        try {
+            link_type = H5.H5Lget_value_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value_by_idx: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_EXTERNAL);
+        assertFalse("testH5Lget_value_by_idx_ext ", link_value[0]==null);
+        assertFalse("testH5Lget_value_by_idx_ext ", link_value[1]==null);
+        assertTrue("testH5Lget_value_by_idx_ext Link Value ", link_value[0].compareTo("DT1")==0);
+    }
+
+    @Test
+    public void testH5Lget_value_by_idx_external_create() {
+        H5L_info_t link_info = null;
+        String[] link_value = {null,null};
+        int link_type = -1;
+
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "LE", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Lget_value_by_idx_ext ", link_info==null);
+        assertTrue("testH5Lget_value_by_idx_ext link type "+link_info.type, link_info.type==HDF5Constants.H5L_TYPE_EXTERNAL);
+        try {
+            link_type = H5.H5Lget_value_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, link_value, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_value_by_idx: " + err);
+        }
+        assertTrue("Link Type", link_type == HDF5Constants.H5L_TYPE_EXTERNAL);
+        assertFalse("testH5Lget_value_by_idx_ext ", link_value[0]==null);
+        assertFalse("testH5Lget_value_by_idx_ext ", link_value[1]==null);
+        assertTrue("testH5Lget_value_by_idx_ext Link Value ", link_value[0].compareTo("DT1")==0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ldelete_by_idx_not_exist_name() throws Throwable {
+        H5.H5Ldelete_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ldelete_by_idx_not_exist_create() throws Throwable {
+        H5.H5Ldelete_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Ldelete_by_idx_n2_name() {
+        H5L_info_t link_info = null;
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Ldelete_by_idx_n2 ", link_info==null);
+        assertTrue("testH5Ldelete_by_idx_n2 link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        try {
+            H5.H5Ldelete_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ldelete_by_idx: " + err);
+        }
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (HDF5LibraryException err) {
+            link_info = null;
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ldelete_by_idx: " + err);
+        }
+        assertTrue("testH5Ldelete_by_idx_n2 ",link_info==null);
+    }
+
+    @Test
+    public void testH5Ldelete_by_idx_n2_create() {
+        H5L_info_t link_info = null;
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Ldelete_by_idx_n2 ", link_info==null);
+        assertTrue("testH5Ldelete_by_idx_n2 link type", link_info.type==HDF5Constants.H5L_TYPE_SOFT);
+        try {
+            H5.H5Ldelete_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ldelete_by_idx: " + err);
+        }
+        try {
+            link_info = H5.H5Lget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 2, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (HDF5LibraryException err) {
+            link_info = null;
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ldelete_by_idx: " + err);
+        }
+        assertTrue("testH5Ldelete_by_idx_n2 ",link_info==null);
+    }
+
+    @Test
+    public void testH5Lvisit_create() {
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lvisit_create: H5Pget_link_creation_order " + err);
+        }
+
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "LE", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Lvisit(H5fid, HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lvisit: " + err);
+        }
+        assertFalse("H5Lvisit ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Lvisit "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==6);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(1)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(2)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("G1/DS2")==0);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("CPY1")==0);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(4)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(4)).link_name.compareToIgnoreCase("LE")==0);
+        assertTrue("H5Lvisit "+((idata)((H5L_iter_data)iter_data).iterdata.get(5)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(5)).link_name.compareToIgnoreCase("LS")==0);
+    }
+
+    @Test
+    public void testH5Literate_create() {
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Literate_create: H5Pget_link_creation_order " + err);
+        }
+
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "LE", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5L_iter_data implements H5L_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5L_iterate_t iter_data = new H5L_iter_data();
+        class H5L_iter_callback implements H5L_iterate_cb {
+            public int callback(long group, String name, H5L_info_t info, H5L_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5L_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5L_iterate_cb iter_cb = new H5L_iter_callback();
+        try {
+            H5.H5Literate(H5fid, HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Literate: " + err);
+        }
+        assertFalse("H5Literate ",((H5L_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Literate "+((H5L_iter_data)iter_data).iterdata.size(),((H5L_iter_data)iter_data).iterdata.size()==5);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(1)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(2)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("CPY1")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("LE")==0);
+        assertTrue("H5Literate "+((idata)((H5L_iter_data)iter_data).iterdata.get(4)).link_name,((idata)((H5L_iter_data)iter_data).iterdata.get(4)).link_name.compareToIgnoreCase("LS")==0);
+    }
+
+}
diff --git a/java/test/TestH5Lparams.java b/java/test/TestH5Lparams.java
new file mode 100644
index 0000000..9a2c204
--- /dev/null
+++ b/java/test/TestH5Lparams.java
@@ -0,0 +1,231 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Lparams {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_value_invalid() throws Throwable {
+        H5.H5Lget_value(-1, "Bogus", null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lget_value_null() throws Throwable {
+        H5.H5Lget_value(-1, null, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lexists_invalid() throws Throwable {
+        H5.H5Lexists(-1, "Bogus", -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lexists_null() throws Throwable {
+        H5.H5Lexists(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_invalid() throws Throwable {
+        H5.H5Lget_info(-1, "Bogus", -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lget_info_null() throws Throwable {
+        H5.H5Lget_info(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_info_by_idx_invalid() throws Throwable {
+        H5.H5Lget_info_by_idx(-1, "Bogus", -1, -1, -1L, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lget_info_by_idx_null() throws Throwable {
+        H5.H5Lget_info_by_idx(-1, null, 0, 0, 0L, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_name_by_idx_invalid() throws Throwable {
+        H5.H5Lget_name_by_idx(-1, "Bogus", -1, -1, -1L, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lget_name_by_idx_null() throws Throwable {
+        H5.H5Lget_name_by_idx(-1, null, 0, 0, 0L, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_hard_invalid() throws Throwable {
+        H5.H5Lcreate_hard(-1, "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_hard_null_current() throws Throwable {
+        H5.H5Lcreate_hard(-1, null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_hard_null_dest() throws Throwable {
+        H5.H5Lcreate_hard(-1, "Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ldelete_invalid() throws Throwable {
+        H5.H5Ldelete(-1, "Bogus", -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ldelete_null() throws Throwable {
+        H5.H5Ldelete(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_soft_invalid() throws Throwable {
+        H5.H5Lcreate_soft( "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_soft_null_current() throws Throwable {
+        H5.H5Lcreate_soft(null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_soft_null_dest() throws Throwable {
+        H5.H5Lcreate_soft("Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcreate_external_invalid() throws Throwable {
+        H5.H5Lcreate_external("PathToFile", "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_external_null_file() throws Throwable {
+        H5.H5Lcreate_external(null, "Bogus", 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_external_null_current() throws Throwable {
+        H5.H5Lcreate_external("PathToFile", null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcreate_external_null_dest() throws Throwable {
+        H5.H5Lcreate_external("PathToFile", "Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lcopy_invalid() throws Throwable {
+        H5.H5Lcopy(-1, "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcopy_null_current() throws Throwable {
+        H5.H5Lcopy(-1, null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lcopy_null_dest() throws Throwable {
+        H5.H5Lcopy(-1, "Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lmove_invalid() throws Throwable {
+        H5.H5Lmove(-1, "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lmove_null_current() throws Throwable {
+        H5.H5Lmove(-1, null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lmove_null_dest() throws Throwable {
+        H5.H5Lmove(-1, "Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Lget_value_by_idx_invalid() throws Throwable {
+        H5.H5Lget_value_by_idx(-1, "Bogus", -1, -1, -1L, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lget_value_by_idx_null() throws Throwable {
+        H5.H5Lget_value_by_idx(-1, null, 0, 0, 0L, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ldelete_by_idx_invalid() throws Throwable {
+        H5.H5Ldelete_by_idx(-1, "Bogus", -1, -1, -1L, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ldelete_by_idx_null() throws Throwable {
+        H5.H5Ldelete_by_idx(-1, null, 0, 0, 0L, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lvisit_null() throws Throwable {
+        H5.H5Lvisit(-1, -1, -1, null, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lvisit_by_name_nullname() throws Throwable {
+        H5.H5Lvisit_by_name(-1, null, -1, -1, null, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Lvisit_by_name_null() throws Throwable {
+        H5.H5Lvisit_by_name(-1, "Bogus", -1, -1, null, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Literate_null() throws Throwable {
+        H5.H5Literate(-1, -1, -1, -1, null, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Literate_by_name_nullname() throws Throwable {
+        H5.H5Literate_by_name(-1, null, -1, -1, -1, null, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Literate_by_name_null() throws Throwable {
+        H5.H5Literate_by_name(-1, "Bogus", -1, -1, -1, null, null, -1);
+    }
+
+}
diff --git a/java/test/TestH5Obasic.java b/java/test/TestH5Obasic.java
new file mode 100644
index 0000000..b564089
--- /dev/null
+++ b/java/test/TestH5Obasic.java
@@ -0,0 +1,488 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5O_iterate_cb;
+import hdf.hdf5lib.callbacks.H5O_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5O_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Obasic {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "h5ex_g_iterate.hdf";
+    private static long H5la_ds1 = -1;
+    private static long H5la_l1 = -1;
+    private static long H5la_dt1 = -1;
+    private static long H5la_g1 = -1;
+    long H5fid = -1;
+
+    @Before
+    public void openH5file()
+            throws HDF5LibraryException, NullPointerException {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fopen(H5_FILE, HDF5Constants.H5F_ACC_RDONLY,
+                HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Fopen: openH5file: " + err);
+        }
+    }
+
+    @After
+    public void closeH5file() throws HDF5LibraryException {
+        if (H5fid > 0) {
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        }
+        System.out.println();
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oopen_not_exists() throws Throwable {
+        long oid = -1;
+
+        oid = H5.H5Oopen(H5fid, "Never_created", HDF5Constants.H5P_DEFAULT);
+
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Oget_info_dataset() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+
+        try {
+            oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Oget_info_hardlink() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Oget_info_group() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "G1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_GROUP);
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+    }
+
+    @Test
+    public void testH5Oget_info_datatype() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "DT1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_NAMED_DATATYPE);
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_name_not_exist_name() throws Throwable {
+        H5.H5Oget_info_by_name(H5fid, "None", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_name_not_exists() throws Throwable {
+        H5.H5Oget_info_by_name(H5fid, "Bogus", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Oget_info_by_name_dataset() {
+        H5O_info_t obj_info = null;
+
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+    }
+
+    @Test
+    public void testH5Oget_info_by_name_hardlink() {
+        H5O_info_t obj_info = null;
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+    }
+
+    @Test
+    public void testH5Oget_info_by_name_group() {
+        H5O_info_t obj_info = null;
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "G1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_GROUP);
+    }
+
+    @Test
+    public void testH5Oget_info_by_name_datatype() {
+        H5O_info_t obj_info = null;
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "DT1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ",obj_info==null);
+        assertTrue("H5Oget_info object type",obj_info.type==HDF5Constants.H5O_TYPE_NAMED_DATATYPE);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_idx_name_not_exist_name() throws Throwable {
+        H5.H5Oget_info_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_idx_name_not_exist_create() throws Throwable {
+        H5.H5Oget_info_by_idx(H5fid, "None", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_idx_not_exist_name() throws Throwable {
+        H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 5, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_idx_not_exist_create() throws Throwable {
+        H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 5, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Oget_info_by_idx_n0() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Oget_info_by_idx_n0:H5.H5Oget_info: " + err);
+        }
+        H5la_ds1 = obj_info.addr;
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+        try {
+            obj_info = H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Oget_info_by_idx_n0:H5.H5Oget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Oget_info_by_idx_n0:H5Oget_info_by_idx ",obj_info==null);
+        assertTrue("testH5Oget_info_by_idx_n0:H5Oget_info_by_idx link type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+        assertTrue("testH5Oget_info_by_idx_n0:Link Address ",obj_info.addr==H5la_ds1);
+    }
+
+    @Test
+    public void testH5Oget_info_by_idx_n3() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Oget_info_by_idx_n3:H5.H5Oget_info: " + err);
+        }
+        H5la_l1 = obj_info.addr;
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+        try {
+            obj_info = H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 3, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Oget_info_by_idx_n3:H5.H5Oget_info_by_idx: " + err);
+        }
+        assertFalse("testH5Oget_info_by_idx_n3:H5Oget_info_by_idx ",obj_info==null);
+        assertTrue("testH5Oget_info_by_idx_n3:H5Oget_info_by_idx link type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+        assertTrue("testH5Oget_info_by_idx_n3:Link Address ",obj_info.addr==H5la_l1);
+    }
+
+    @Test
+    public void testH5Ovisit() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5O_iter_data implements H5O_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5O_iterate_t iter_data = new H5O_iter_data();
+        class H5O_iter_callback implements H5O_iterate_cb {
+            public int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5O_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5O_iterate_cb iter_cb = new H5O_iter_callback();
+        try {
+            H5.H5Ovisit(H5fid, HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ovisit: " + err);
+        }
+        assertFalse("H5Ovisit ",((H5O_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Ovisit "+((H5O_iter_data)iter_data).iterdata.size(),((H5O_iter_data)iter_data).iterdata.size()==5);
+        assertTrue("H5Ovisit "+(((H5O_iter_data)iter_data).iterdata.get(0)).link_name,(((H5O_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase(".")==0);
+        assertTrue("H5Ovisit "+(((H5O_iter_data)iter_data).iterdata.get(1)).link_name,(((H5O_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Ovisit "+(((H5O_iter_data)iter_data).iterdata.get(2)).link_name,(((H5O_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("DT1")==0);
+        assertTrue("H5Ovisit "+(((H5O_iter_data)iter_data).iterdata.get(3)).link_name,(((H5O_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Ovisit "+(((H5O_iter_data)iter_data).iterdata.get(4)).link_name,(((H5O_iter_data)iter_data).iterdata.get(4)).link_name.compareToIgnoreCase("G1/DS2")==0);
+//        assertTrue("H5Ovisit "+((idata)((H5O_iter_data)iter_data).iterdata.get(5)).link_name,((idata)((H5O_iter_data)iter_data).iterdata.get(5)).link_name.compareToIgnoreCase("L1")==0);
+    }
+
+    @Test
+    public void testH5Ovisit_by_name() {
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5O_iter_data implements H5O_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5O_iterate_t iter_data = new H5O_iter_data();
+        class H5O_iter_callback implements H5O_iterate_cb {
+            public int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5O_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5O_iterate_cb iter_cb = new H5O_iter_callback();
+        try {
+            H5.H5Ovisit_by_name(H5fid, "G1", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, iter_cb, iter_data, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ovisit_by_name: " + err);
+        }
+        assertFalse("H5Ovisit_by_name ",((H5O_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Ovisit_by_name "+((H5O_iter_data)iter_data).iterdata.size(),((H5O_iter_data)iter_data).iterdata.size()==2);
+        assertTrue("H5Ovisit_by_name "+(((H5O_iter_data)iter_data).iterdata.get(0)).link_name,(((H5O_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase(".")==0);
+        assertTrue("H5Ovisit_by_name "+(((H5O_iter_data)iter_data).iterdata.get(1)).link_name,(((H5O_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("DS2")==0);
+    }
+
+    @Test
+    public void testH5Oexists_by_name() {
+        boolean name_exists = false;
+        try {
+            name_exists = H5.H5Oexists_by_name(H5fid, "G1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oexists_by_name: " + err);
+        }
+        assertTrue("H5Oexists_by_name ", name_exists);
+        //TODO get dangling link result
+    }
+
+    @Test
+    public void testH5Oopen_by_addr() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            try {
+                oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_addr: H5.H5Oget_info: " + err);
+            }
+            H5la_ds1 = obj_info.addr;
+            try {H5.H5Oclose(oid);} catch (Exception ex) {}
+            try {
+                oid = H5.H5Oopen_by_addr(H5fid, H5la_ds1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_addr: H5.H5Oopen_by_addr: " + err);
+            }
+            try {
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_addr: H5.H5Oget_info: " + err);
+            }
+            assertFalse("testH5Oopen_by_addr: H5Oget_info ",obj_info==null);
+            assertTrue("testH5Oopen_by_addr: H5Oget_info link type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+            assertTrue("testH5Oopen_by_addr: Link Address ",obj_info.addr==H5la_ds1);
+        }
+        finally {
+            try{H5.H5Oclose(oid);} catch (Exception ex) {}
+        }
+   }
+
+    @Test
+    public void testH5Oopen_by_idx_n0() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            try {
+                oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_idx_n0: H5.H5Oget_info: " + err);
+            }
+            H5la_ds1 = obj_info.addr;
+            try {H5.H5Oclose(oid);} catch (Exception ex) {}
+            try {
+                oid = H5.H5Oopen_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_addr: H5.H5Oopen_by_addr: " + err);
+            }
+            try {
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_idx_n0: H5.H5Oget_info_by_idx: " + err);
+            }
+            assertFalse("testH5Oopen_by_idx_n0: H5Oget_info_by_idx ",obj_info==null);
+            assertTrue("testH5Oopen_by_idx_n0: H5Oget_info_by_idx link type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+            assertTrue("testH5Oopen_by_idx_n0: Link Address ",obj_info.addr==H5la_ds1);
+        }
+        finally {
+            try{H5.H5Oclose(oid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Oopen_by_idx_n3() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            try {
+                oid = H5.H5Oopen(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_idx_n3:H5.H5Oget_info: " + err);
+            }
+            H5la_l1 = obj_info.addr;
+            try {H5.H5Oclose(oid);} catch (Exception ex) {}
+            try {
+                oid = H5.H5Oopen_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_NAME, HDF5Constants.H5_ITER_INC, 3, HDF5Constants.H5P_DEFAULT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_addr: H5.H5Oopen_by_addr: " + err);
+            }
+            try {
+                obj_info = H5.H5Oget_info(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oopen_by_idx_n3:H5.H5Oget_info_by_idx: " + err);
+            }
+            assertFalse("testH5Oopen_by_idx_n3:H5Oget_info_by_idx ",obj_info==null);
+            assertTrue("testH5Oopen_by_idx_n3:H5Oget_info_by_idx link type",obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+            assertTrue("testH5Oopen_by_idx_n3:Link Address ",obj_info.addr==H5la_l1);
+        }
+        finally {
+            try{H5.H5Oclose(oid);} catch (Exception ex) {}
+        }
+    }
+}
diff --git a/java/test/TestH5Ocopy.java b/java/test/TestH5Ocopy.java
new file mode 100644
index 0000000..62dd886
--- /dev/null
+++ b/java/test/TestH5Ocopy.java
@@ -0,0 +1,365 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Ocopy {
+    @Rule public TestName testname = new TestName();
+    private static final String FILENAME = "testRefsattribute.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did1 = -1;
+    long H5did2 = -1;
+    long H5gcpl = -1;
+    long H5gid = -1;
+    long H5dsid2 = -1;
+    long[] dims = { 2 };
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5O._createDataset: ",did >= 0);
+
+        return did;
+    }
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            H5gcpl = HDF5Constants.H5P_DEFAULT;
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                    H5gcpl, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue("TestH5O._createGroup: ",gid >= 0);
+
+        return gid;
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        try {
+            H5fid = H5.H5Fcreate(FILENAME, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5dsid2 =  H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            H5did1 = _createDataset(H5fid, H5dsid2, "DS2", HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(1, dims, null);
+            H5gid = _createGroup(H5fid, "/G1");
+            H5did2 = _createDataset(H5gid, H5dsid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5O.createH5file: " + err);
+        }
+        assertTrue("TestH5O.createH5file: H5.H5Fcreate: ",H5fid >= 0);
+        assertTrue("TestH5O.createH5file: H5.H5Screate_simple: ",H5dsid >= 0);
+        assertTrue("TestH5O.createH5file: H5.H5Gcreate: ",H5gid >= 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5gid > 0)
+            try {H5.H5Gclose(H5gid);} catch (Exception ex) {}
+        if (H5did2 > 0)
+            try {H5.H5Dclose(H5did2);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5dsid2 > 0)
+            try {H5.H5Sclose(H5dsid2);} catch (Exception ex) {}
+        if (H5did1 > 0)
+            try {H5.H5Dclose(H5did1);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(FILENAME);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5OcopyRefsAttr() {
+        long ocp_plist_id = -1;
+        byte rbuf0[]=null , rbuf1[] = null;
+        byte[] dset_data = new byte[16];
+        long attribute_id = -1;
+
+
+        try {
+            rbuf0 = H5.H5Rcreate(H5fid, "/G1", HDF5Constants.H5R_OBJECT, -1);
+            rbuf1 = H5.H5Rcreate(H5fid, "DS2", HDF5Constants.H5R_OBJECT, -1);
+            //System.arraycopy(rbuf0, 0, dset_data, 0, 8);
+            System.arraycopy(rbuf1, 0, dset_data, 8, 8);
+        }
+        catch (Exception ex) {
+            fail("testH5OcopyRefsAttr: H5Rcreate failed");
+        }
+
+        try {
+            attribute_id = H5.H5Acreate(H5did2, "A1", HDF5Constants.H5T_STD_REF_OBJ, H5dsid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5OcopyRefsAttr.H5Acreate: ", attribute_id >= 0);
+            H5.H5Awrite(attribute_id, HDF5Constants.H5T_STD_REF_OBJ, dset_data);
+
+            H5.H5Aclose(attribute_id);
+        }
+        catch (Exception ex) {
+            fail("testH5OcopyRefsAttr: H5Awrite failed");
+        }
+        finally {
+            try {H5.H5Aclose(attribute_id);} catch (Exception exx) {}
+        }
+
+        try {
+            ocp_plist_id = H5.H5Pcreate(HDF5Constants.H5P_OBJECT_COPY);
+            assertTrue("testH5OcopyRefsAttr.H5Pcreate: ", ocp_plist_id >= 0);
+            H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG);
+            H5.H5Ocopy(H5fid, ".", H5fid, "CPYREF", ocp_plist_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception ex) {
+             fail("testH5OcopyRefsAttr: H5Ocopy failed");
+        }
+        finally {
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5OcopyRefsDatasettodiffFile() {
+        byte rbuf1[] = null;
+        byte[] dset_data = new byte[16];
+        long ocp_plist_id = -1;
+        long dataset_id = -1;
+        long H5fid2 = -1;
+
+        try {
+            rbuf1 = H5.H5Rcreate(H5fid, "DS2", HDF5Constants.H5R_OBJECT, -1);
+            System.arraycopy(rbuf1, 0, dset_data, 8, 8);
+
+            dataset_id = H5.H5Dcreate(H5fid, "DSREF",
+                    HDF5Constants.H5T_STD_REF_OBJ, H5dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5OcopyRefsDatasettodiffFile.H5Dcreate: ", dataset_id >= 0);
+            H5.H5Dwrite(dataset_id, HDF5Constants.H5T_STD_REF_OBJ,
+                    HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, dset_data);
+            H5.H5Dclose(dataset_id);
+        }
+        catch (Exception ex) {
+            fail("testH5OcopyRefsDatasettodiffFile: create dataset failed");
+        }
+        finally {
+            try {H5.H5Dclose(dataset_id);} catch (Exception exx) {}
+        }
+
+        try {
+            //create new file
+            H5fid2 = H5.H5Fcreate("copy.h5", HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5OcopyRefsDatasettodiffFile.H5Fcreate: ", H5fid2 >= 0);
+            H5.H5Fflush(H5fid2, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Exception ex) {
+            try {H5.H5Fclose(H5fid2);} catch (Exception exx) {}
+            fail("testH5OcopyRefsDatasettodiffFile: H5Fcreate failed");
+        }
+
+        try {
+            //create object copy property list id and set the flags.
+            ocp_plist_id = H5.H5Pcreate(HDF5Constants.H5P_OBJECT_COPY);
+            assertTrue("testH5OcopyRefsDatasettodiffFile.H5Pcreate: ", ocp_plist_id >= 0);
+            H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG);
+
+            //Perform copy function.
+            H5.H5Ocopy(H5fid, ".", H5fid2, "CPYREFD", ocp_plist_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Exception ex){
+            ex.printStackTrace();
+            fail("testH5OcopyRefsDatasettodiffFile: H5Ocopy failed");
+        }
+        finally {
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception ex) {}
+            try {H5.H5Fclose(H5fid2);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5OcopyRefsDatasettosameFile() {
+        byte rbuf0[]=null , rbuf1[] = null;
+        byte[] dset_data = new byte[16];
+        long ocp_plist_id = -1;
+        long dataset_id = -1;
+        long did = -1;
+        int obj_type = -1;
+        byte[] read_data = new byte[16];
+
+        try {
+            rbuf0 = H5.H5Rcreate(H5fid, "/G1", HDF5Constants.H5R_OBJECT, -1);
+            rbuf1 = H5.H5Rcreate(H5fid, "DS2", HDF5Constants.H5R_OBJECT, -1);
+            System.arraycopy(rbuf0, 0, dset_data, 0, 8);
+            System.arraycopy(rbuf1, 0, dset_data, 8, 8);
+
+            //Create a dataset and write object references to it.
+            dataset_id = H5.H5Dcreate(H5fid, "DSREF",
+                    HDF5Constants.H5T_STD_REF_OBJ, H5dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5OcopyRefsDatasettosameFile.H5Dcreate: ", dataset_id >= 0);
+            H5.H5Dwrite(dataset_id, HDF5Constants.H5T_STD_REF_OBJ,
+                    HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, dset_data);
+            //Close the dataset.
+            H5.H5Dclose(dataset_id);
+        }
+        catch (Exception ex) {
+            try {H5.H5Dclose(dataset_id);} catch (Exception exx) {}
+            fail("testH5OcopyRefsDatasettosameFile: create dataset failed");
+        }
+
+        try {
+            ocp_plist_id = H5.H5Pcreate(HDF5Constants.H5P_OBJECT_COPY);
+            assertTrue("testH5OcopyRefsDatasettosameFile.H5Pcreate: ", ocp_plist_id >= 0);
+            H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG);
+        }
+        catch (Exception ex) {
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception exx) {}
+            fail("testH5OcopyRefsDatasettosameFile: H5Pset_copy_object failed");
+        }
+
+        //Perform copy function.
+        try {
+            H5.H5Ocopy(H5fid, "DSREF", H5fid, "CPYREFD", ocp_plist_id, HDF5Constants.H5P_DEFAULT);
+        }
+        catch(Exception ex) {
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception exx) {}
+            fail("testH5OcopyRefsDatasettosameFile: H5Ocopy failed");
+        }
+
+        //Open the dataset that has been copied
+        try {
+            did = H5.H5Dopen(H5fid, "DSREF", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5OcopyRefsDatasettosameFile.H5Dopen: ", did >= 0);
+        }
+        catch (Exception e) {
+            try {H5.H5Dclose(did);} catch (Exception exx) {}
+            e.printStackTrace();
+            fail("testH5OcopyRefsDatasettosameFile: H5Dopen failed");
+        }
+
+        try {
+            //Read the dataset object references in the read_data buffer.
+            H5.H5Dread(did, HDF5Constants.H5T_STD_REF_OBJ, HDF5Constants.H5S_ALL,HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT, read_data);
+            System.arraycopy(read_data, 0, rbuf0, 0, 8);
+            System.arraycopy(read_data, 8, rbuf1, 0, 8);
+
+            //Get the type of object the reference points to.
+            obj_type = H5.H5Rget_obj_type(H5fid, HDF5Constants.H5R_OBJECT, rbuf1);
+            assertEquals(obj_type, HDF5Constants.H5O_TYPE_DATASET);
+
+            obj_type = H5.H5Rget_obj_type(H5fid, HDF5Constants.H5R_OBJECT, rbuf0);
+            assertEquals(obj_type, HDF5Constants.H5O_TYPE_GROUP);
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+        }
+        finally {
+            try {H5.H5Dclose(did);} catch (Exception ex) {}
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception ex) {}
+        }
+     }
+
+//    @Ignore because of JIRA HDF5-9547
+//    @Test(expected = HDF5LibraryException.class)
+//    public void testH5OcopyInvalidRef() throws Throwable {
+//        final long _pid_ = HDF5Constants.H5P_DEFAULT;
+//        long sid = -1;
+//        long did = -1;
+//        long aid = -1;
+//
+//        try {
+//            sid = H5.H5Screate_simple(1, new long[] {1}, null);
+//            assertTrue("testH5OcopyInvalidRef.H5Screate_simple: ", sid >= 0);
+//            did = H5.H5Dcreate(H5fid, "Dataset_with_invalid_Ref", HDF5Constants.H5T_NATIVE_INT, sid, _pid_, _pid_, _pid_);
+//            assertTrue("testH5OcopyInvalidRef.H5Dcreate: ", did > 0);
+//            aid = H5.H5Acreate(did, "Invalid_Ref", HDF5Constants.H5T_STD_REF_OBJ, sid, _pid_, _pid_);
+//            assertTrue("testH5OcopyInvalidRef.H5Acreate: ", aid > 0);
+//            H5.H5Awrite(aid, HDF5Constants.H5T_STD_REF_OBJ, new long[]{-1});
+//        }
+//        catch (Exception ex) {
+//            ex.printStackTrace();
+//        }
+//        finally {
+//            try {H5.H5Dclose(did);} catch (Exception exx) {}
+//            try {H5.H5Aclose(aid);} catch (Exception exx) {}
+//            try {H5.H5Sclose(sid);} catch (Exception exx) {}
+//        }
+//
+//        long ocp_plist_id = H5.H5Pcreate(HDF5Constants.H5P_OBJECT_COPY);
+//        assertTrue("testH5OcopyInvalidRef.H5Pcreate: ", ocp_plist_id >= 0);
+//        H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG);
+//        try {
+//            H5.H5Ocopy(H5fid, "/Dataset_with_invalid_Ref", H5fid, "/Dataset_with_invalid_Ref_cp", ocp_plist_id, _pid_);
+//        }
+//        finally {
+//            try {H5.H5Pclose(ocp_plist_id);} catch (Exception exx) {}
+//        }
+//    }
+
+}
diff --git a/java/test/TestH5Ocreate.java b/java/test/TestH5Ocreate.java
new file mode 100644
index 0000000..0edecba
--- /dev/null
+++ b/java/test/TestH5Ocreate.java
@@ -0,0 +1,562 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.callbacks.H5O_iterate_cb;
+import hdf.hdf5lib.callbacks.H5O_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5O_info_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Ocreate {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_EXTFILE = "h5ex_g_iterate.hdf";
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long H5fcpl = -1;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did1 = -1;
+    long H5did2 = -1;
+    long H5gcpl = -1;
+    long H5gid = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5O._createDataset: ",did > 0);
+
+        return did;
+    }
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            H5gcpl = HDF5Constants.H5P_DEFAULT;
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                    H5gcpl, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue("TestH5O._createGroup: ",gid > 0);
+
+        return gid;
+    }
+
+    private final void _createHardLink(long fid, long cid, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_hard(cid, curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_hard: " + err);
+        }
+        assertTrue("TestH5O._createHardLink ", link_exists);
+    }
+
+    private final void _createSoftLink(long fid, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_soft(curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_soft: " + err);
+        }
+        assertTrue("TestH5O._createSoftLink ", link_exists);
+    }
+
+    private final void _createExternalLink(long fid, String ext_filename, String curname, long did, String dstname, long lcpl, long lapl) {
+        boolean link_exists = false;
+        try {
+            H5.H5Lcreate_external(ext_filename, curname, did, dstname, lcpl, lapl);
+            H5.H5Fflush(fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            link_exists = H5.H5Lexists(did, dstname, lapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Lcreate_external: " + err);
+        }
+        assertTrue("TestH5O._createExternalLink ", link_exists);
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        try {
+            H5fcpl = H5.H5Pcreate(HDF5Constants.H5P_FILE_CREATE);
+            H5.H5Pset_link_creation_order(H5fcpl, HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    H5fcpl, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did1 = _createDataset(H5fid, H5dsid, "DS1", HDF5Constants.H5P_DEFAULT);
+            H5gid = _createGroup(H5fid, "/G1");
+            H5did2 = _createDataset(H5gid, H5dsid, "DS2", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5O.createH5file: " + err);
+        }
+        assertTrue("TestH5O.createH5file: H5.H5Fcreate: ",H5fid > 0);
+        assertTrue("TestH5O.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
+        assertTrue("TestH5O.createH5file: H5.H5Gcreate: ",H5gid > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5gid > 0)
+            try {H5.H5Gclose(H5gid);} catch (Exception ex) {}
+        if (H5gcpl > 0)
+            try {H5.H5Pclose(H5gcpl);} catch (Exception ex) {}
+        if (H5did2 > 0)
+            try {H5.H5Dclose(H5did2);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did1 > 0)
+            try {H5.H5Dclose(H5did1);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        if (H5fcpl > 0)
+            try {H5.H5Pclose(H5fcpl);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ocopy_cur_not_exists() throws Throwable {
+        H5.H5Ocopy(H5fid, "None", H5fid, "DS1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Ocopy() {
+        try {
+            H5.H5Ocopy(H5fid, "DS1", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+            boolean link_exists = H5.H5Lexists(H5fid, "CPY1", HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Ocopy:H5Lexists ",link_exists);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ocopy: " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ocopy_dst_link_exists() throws Throwable {
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Ocopy(H5fid, "CPY1", H5fid, "/G1/DS2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Oget_info_by_idx_n0_create() {
+        H5O_info_t obj_info = null;
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info_by_idx_n0:H5Pget_link_creation_order " + err);
+        }
+        try {
+            obj_info = H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 0, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info_by_idx: " + err);
+        }
+        assertFalse("H5Oget_info_by_idx ", obj_info==null);
+        assertTrue("H5Oget_info_by_idx link type", obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+    }
+
+    @Test
+    public void testH5Oget_info_by_idx_n1_create() {
+        H5O_info_t obj_info = null;
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info_by_idx_n1:H5Pget_link_creation_order " + err);
+        }
+        try {
+            obj_info = H5.H5Oget_info_by_idx(H5fid, "/", HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, 1, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info_by_idx: " + err);
+        }
+        assertFalse("H5Oget_info_by_idx ", obj_info==null);
+        assertTrue("H5Oget_info_by_idx link type", obj_info.type==HDF5Constants.H5O_TYPE_GROUP);
+    }
+
+    @Test
+    public void testH5Oget_info_softlink() {
+        H5O_info_t obj_info = null;
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ", obj_info==null);
+        assertTrue("H5Oget_info link type", obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+        assertTrue("Link Address ", obj_info.addr>0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_softlink_dangle() throws Throwable {
+        _createSoftLink(H5fid, "DS3", H5fid, "L2", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5.H5Oget_info_by_name(H5fid, "L2", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test
+    public void testH5Oget_info_externallink() {
+        H5O_info_t obj_info = null;
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "L1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        try {
+            obj_info = H5.H5Oget_info_by_name(H5fid, "L1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        assertFalse("H5Oget_info ", obj_info==null);
+        assertTrue("H5Oget_info link type", obj_info.type==HDF5Constants.H5O_TYPE_NAMED_DATATYPE);
+        assertTrue("Link Address ", obj_info.addr>0);
+    }
+
+    @Test
+    public void testH5Olink() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        H5O_info_t dst_obj_info = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            obj_info = H5.H5Oget_info(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info: " + err);
+        }
+        try {
+            H5.H5Olink(oid, H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Olink: " + err);
+        }
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+
+        assertFalse("H5Oget_info ", obj_info==null);
+        assertTrue("H5Oget_info object type", obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+
+        try {
+            dst_obj_info = H5.H5Oget_info_by_name(H5fid, "CPY1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_info_by_name: " + err);
+        }
+        assertFalse("H5Oget_info ", dst_obj_info==null);
+        assertTrue("H5Oget_info object type", dst_obj_info.type==HDF5Constants.H5O_TYPE_DATASET);
+    }
+
+    @Test
+    public void testH5Ovisit_create() {
+        try {
+            int order = H5.H5Pget_link_creation_order(H5fcpl);
+            assertTrue("creation order :"+order, order == HDF5Constants.H5P_CRT_ORDER_TRACKED+HDF5Constants.H5P_CRT_ORDER_INDEXED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ovisit_create:H5Pget_link_creation_order " + err);
+        }
+
+        _createHardLink(H5fid, H5fid, "/G1/DS2", H5fid, "CPY1", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createExternalLink(H5fid, H5_EXTFILE, "DT1", H5fid, "LE", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        _createSoftLink(H5fid, "/G1/DS2", H5fid, "LS", HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+        class idata {
+            public String link_name = null;
+            public int link_type = -1;
+            idata(String name, int type) {
+                this.link_name = name;
+                this.link_type = type;
+            }
+        }
+        class H5O_iter_data implements H5O_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5O_iterate_t iter_data = new H5O_iter_data();
+        class H5O_iter_callback implements H5O_iterate_cb {
+            public int callback(long group, String name, H5O_info_t info, H5O_iterate_t op_data) {
+                idata id = new idata(name, info.type);
+                ((H5O_iter_data)op_data).iterdata.add(id);
+                return 0;
+            }
+        }
+        H5O_iterate_cb iter_cb = new H5O_iter_callback();
+        try {
+            H5.H5Ovisit(H5fid, HDF5Constants.H5_INDEX_CRT_ORDER, HDF5Constants.H5_ITER_INC, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Ovisit: " + err);
+        }
+        assertFalse("H5Ovisit ", ((H5O_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Ovisit "+((H5O_iter_data)iter_data).iterdata.size(), ((H5O_iter_data)iter_data).iterdata.size()==4);
+        assertTrue("H5Ovisit "+((idata)((H5O_iter_data)iter_data).iterdata.get(0)).link_name, ((idata)((H5O_iter_data)iter_data).iterdata.get(0)).link_name.compareToIgnoreCase(".")==0);
+        assertTrue("H5Ovisit "+((idata)((H5O_iter_data)iter_data).iterdata.get(1)).link_name, ((idata)((H5O_iter_data)iter_data).iterdata.get(1)).link_name.compareToIgnoreCase("DS1")==0);
+        assertTrue("H5Ovisit "+((idata)((H5O_iter_data)iter_data).iterdata.get(2)).link_name, ((idata)((H5O_iter_data)iter_data).iterdata.get(2)).link_name.compareToIgnoreCase("G1")==0);
+        assertTrue("H5Ovisit "+((idata)((H5O_iter_data)iter_data).iterdata.get(3)).link_name, ((idata)((H5O_iter_data)iter_data).iterdata.get(3)).link_name.compareToIgnoreCase("G1/DS2")==0);
+    }
+
+    @Test
+    public void testH5Ocomment() {
+        long oid = -1;
+        String obj_comment = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            H5.H5Oset_comment(oid, "Test Comment");
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment: " + err);
+        }
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+        assertFalse("H5Oget_comment: ", obj_comment==null);
+        assertTrue("H5Oget_comment: ", obj_comment.compareTo("Test Comment")==0);
+    }
+
+    @Test
+    public void testH5Ocomment_clear() {
+        long oid = -1;
+        String obj_comment = null;
+        try {
+            oid = H5.H5Oopen(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+            H5.H5Oset_comment(oid, "Test Comment");
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment: " + err);
+        }
+        assertFalse("H5Oget_comment: ", obj_comment==null);
+        assertTrue("H5Oget_comment: ", obj_comment.compareTo("Test Comment")==0);
+        try {
+            H5.H5Oset_comment(oid, null);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment(oid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment: " + err);
+        }
+        try {H5.H5Oclose(oid);} catch (Exception ex) {}
+        assertTrue("H5Oget_comment: ", obj_comment==null);
+    }
+
+    @Test
+    public void testH5Ocomment_by_name() {
+        String obj_comment = null;
+        try {
+            H5.H5Oset_comment_by_name(H5fid, "DS1", "Test Comment", HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment_by_name: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment_by_name(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment_by_name: " + err);
+        }
+        assertFalse("H5Oget_comment_by_name: ", obj_comment==null);
+        assertTrue("H5Oget_comment_by_name: ", obj_comment.compareTo("Test Comment")==0);
+    }
+
+    @Test
+    public void testH5Ocomment_by_name_clear() {
+        String obj_comment = null;
+        try {
+            H5.H5Oset_comment_by_name(H5fid, "DS1", "Test Comment", HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment_by_name: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment_by_name(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment_by_name: " + err);
+        }
+        assertFalse("H5Oget_comment_by_name: ", obj_comment==null);
+        assertTrue("H5Oget_comment_by_name: ", obj_comment.compareTo("Test Comment")==0);
+        try {
+            H5.H5Oset_comment_by_name(H5fid, "DS1", null, HDF5Constants.H5P_DEFAULT);
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oset_comment_by_name: " + err);
+        }
+        try {
+            obj_comment = H5.H5Oget_comment_by_name(H5fid, "DS1", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Oget_comment_by_name: " + err);
+        }
+        assertTrue("H5Oget_comment_by_name: ", obj_comment==null);
+    }
+
+    @Test
+    public void testH5Oinc_dec_count() {
+        long oid = -1;
+        H5O_info_t obj_info = null;
+        try {
+            try {
+                oid = H5.H5Oopen(H5fid, "G1", HDF5Constants.H5P_DEFAULT);
+                obj_info = H5.H5Oget_info(oid);
+                assertFalse("testH5Oinc_dec_count: H5Oget_info ",obj_info==null);
+                assertTrue("testH5Oinc_dec_count: H5Oget_info reference count",obj_info.rc==1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oinc_dec_count: H5.H5Oget_info: " + err);
+            }
+            try {
+                H5.H5Oincr_refcount(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oinc_dec_count: H5.H5Oincr_refcount: " + err);
+            }
+            try {
+                obj_info = H5.H5Oget_info(oid);
+                assertFalse("testH5Oinc_dec_count: H5Oget_info ",obj_info==null);
+                assertTrue("testH5Oinc_dec_count: H5Oget_info reference count",obj_info.rc==2);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oinc_dec_count: H5.H5Oget_info: " + err);
+            }
+            try {
+                H5.H5Odecr_refcount(oid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oinc_dec_count: H5.H5Odecr_refcount: " + err);
+            }
+            try {
+                obj_info = H5.H5Oget_info(oid);
+                assertFalse("testH5Oinc_dec_count: H5Oget_info ",obj_info==null);
+                assertTrue("testH5Oinc_dec_count: H5Oget_info reference count",obj_info.rc==1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("testH5Oinc_dec_count: H5.H5Oget_info: " + err);
+            }
+        }
+        finally {
+            try{H5.H5Oclose(oid);} catch (Exception ex) {}
+        }
+    }
+
+}
diff --git a/java/test/TestH5Oparams.java b/java/test/TestH5Oparams.java
new file mode 100644
index 0000000..ced66f5
--- /dev/null
+++ b/java/test/TestH5Oparams.java
@@ -0,0 +1,154 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Oparams {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Oclose_invalid() throws Throwable {
+        long oid = H5.H5Oclose(-1);
+        assertTrue(oid == 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Oopen_null() throws Throwable {
+        H5.H5Oopen(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oopen_invalid() throws Throwable {
+        H5.H5Oopen(-1, "Bogus", 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Ocopy_invalid() throws Throwable {
+        H5.H5Ocopy(-1, "Bogus", -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ocopy_null_current() throws Throwable {
+        H5.H5Ocopy(-1, null, 0, "Bogus", 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ocopy_null_dest() throws Throwable {
+        H5.H5Ocopy(-1, "Bogus", 0, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_invalid() throws Throwable {
+        H5.H5Oget_info(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Oget_info_by_name_null() throws Throwable {
+        H5.H5Oget_info_by_name(-1, null, HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_name_invalid() throws Throwable {
+        H5.H5Oget_info_by_name(-1, "/testH5Gcreate", HDF5Constants.H5P_DEFAULT);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oget_info_by_idx_invalid() throws Throwable {
+        H5.H5Oget_info_by_idx(-1, "Bogus", -1, -1, -1L, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Oget_info_by_idx_null() throws Throwable {
+        H5.H5Oget_info_by_idx(-1, null, 0, 0, 0L, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Olink_invalid() throws Throwable {
+        H5.H5Olink(-1, -1, "Bogus", -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Olink_null_dest() throws Throwable {
+        H5.H5Olink(-1, 0, null, 0, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ovisit_null() throws Throwable {
+        H5.H5Ovisit(-1, -1, -1, null, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ovisit_by_name_nullname() throws Throwable {
+        H5.H5Ovisit_by_name(-1, null, -1, -1, null, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Ovisit_by_name_null() throws Throwable {
+        H5.H5Ovisit_by_name(-1, "Bogus", -1, -1, null, null, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oset_comment_invalid() throws Throwable {
+        H5.H5Oset_comment(-1, "Bogus");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Oget_comment_invalid() throws Throwable {
+        H5.H5Oget_comment(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Oset_comment_by_name_invalid() throws Throwable {
+        H5.H5Oset_comment_by_name(-1, "Bogus", null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Oset_comment_by_name_null() throws Throwable {
+        H5.H5Oset_comment_by_name(-1, null, null, -1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Oget_comment_by_name_invalid() throws Throwable {
+        H5.H5Oget_comment_by_name(-1, "Bogus", -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Oget_comment_by_name_null() throws Throwable {
+        H5.H5Oget_comment_by_name(-1, null, -1);
+    }
+
+}
diff --git a/java/test/TestH5P.java b/java/test/TestH5P.java
new file mode 100644
index 0000000..2a0fc34
--- /dev/null
+++ b/java/test/TestH5P.java
@@ -0,0 +1,1221 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5P {
+    @Rule public TestName testname = new TestName();
+
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long[] H5dims = { DIM_X, DIM_Y };
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long lapl_id = -1;
+    long fapl_id = -1;
+    long fcpl_id = -1;
+    long ocpl_id = -1;
+    long ocp_plist_id = -1;
+    long lcpl_id = -1;
+    long plapl_id = -1;
+    long plist_id = -1;
+    long gapl_id = -1;
+    long gcpl_id = -1;
+    long acpl_id = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name, HDF5Constants.H5T_STD_I32BE, dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5P._createDataset: ", did > 0);
+
+        return did;
+    }
+
+    private final void _createH5File(long fcpl, long fapl) {
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    fcpl, fapl);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5P.createH5file: " + err);
+        }
+        assertTrue("TestH5P.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5P.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+        assertTrue("TestH5P.createH5file: _createDataset: ", H5did > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    public void deleteH5file() throws HDF5LibraryException {
+        _deleteFile(H5_FILE);
+    }
+
+    @Before
+    public void createH5fileProperties()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            lapl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_ACCESS);
+            fapl_id = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+            fcpl_id = H5.H5Pcreate(HDF5Constants.H5P_FILE_CREATE);
+            ocpl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            ocp_plist_id = H5.H5Pcreate(HDF5Constants.H5P_OBJECT_COPY);
+            lcpl_id = H5.H5Pcreate(HDF5Constants.H5P_LINK_CREATE);
+            plapl_id = H5.H5Pcreate(HDF5Constants.H5P_LINK_ACCESS);
+            plist_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+            gapl_id = H5.H5Pcreate(HDF5Constants.H5P_GROUP_ACCESS);
+            gcpl_id = H5.H5Pcreate(HDF5Constants.H5P_GROUP_CREATE);
+            acpl_id = H5.H5Pcreate(HDF5Constants.H5P_ATTRIBUTE_CREATE);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5P.createH5file: " + err);
+        }
+        assertTrue(lapl_id > 0);
+        assertTrue(fapl_id > 0);
+        assertTrue(fcpl_id > 0);
+        assertTrue(ocpl_id > 0);
+        assertTrue(ocp_plist_id > 0);
+        assertTrue(lcpl_id > 0);
+        assertTrue(plapl_id>0);
+        assertTrue(plist_id > 0);
+        assertTrue(gapl_id > 0);
+        assertTrue(gcpl_id >0);
+        assertTrue(acpl_id >0);
+    }
+
+    @After
+    public void deleteH5fileProperties() throws HDF5LibraryException {
+        if (lapl_id >0)
+            try {H5.H5Pclose(lapl_id);} catch (Exception ex) {}
+        if (fapl_id >0)
+            try {H5.H5Pclose(fapl_id);} catch (Exception ex) {}
+        if (fcpl_id >0)
+            try {H5.H5Pclose(fcpl_id);} catch (Exception ex) {}
+        if (ocpl_id >0)
+            try {H5.H5Pclose(ocpl_id);} catch (Exception ex) {}
+        if (ocp_plist_id >0)
+            try {H5.H5Pclose(ocp_plist_id);} catch (Exception ex) {}
+        if (lcpl_id >0)
+            try {H5.H5Pclose(lcpl_id);} catch (Exception ex) {}
+        if (plapl_id >0)
+            try {H5.H5Pclose(plapl_id);} catch (Exception ex) {}
+        if (plist_id >0)
+            try {H5.H5Pclose(plist_id);} catch (Exception ex) {}
+        if (gapl_id >0)
+            try {H5.H5Pclose(gapl_id);} catch (Exception ex) {}
+        if (gcpl_id >0)
+            try {H5.H5Pclose(gcpl_id);} catch (Exception ex) {}
+        if (acpl_id >0)
+            try {H5.H5Pclose(acpl_id);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Pget_nlinks() {
+        long nlinks = -1;
+        try {
+            nlinks = (long) H5.H5Pget_nlinks(lapl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pget_nlinks: " + err);
+        }
+        assertTrue("testH5Pget_nlinks", nlinks > 0);
+        // Check the default value of nlinks.
+        assertEquals(nlinks, 16L);
+    }
+
+    @Test
+    public void testH5Pset_nlinks() {
+        long nlinks = 20;
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_nlinks(lapl_id, nlinks);
+            nlinks = (long) H5.H5Pget_nlinks(lapl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pset_nlinks: " + err);
+        }
+        assertTrue("testH5Pset_nlinks", ret_val >= 0);
+        // Check the value of nlinks retrieved from H5Pget_nlinks function.
+        assertEquals(nlinks, 20L);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_libver_bounds_invalidlow() throws Throwable {
+        H5.H5Pset_libver_bounds(fapl_id, 5, HDF5Constants.H5F_LIBVER_LATEST);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_libver_bounds_invalidhigh() throws Throwable {
+        H5.H5Pset_libver_bounds(fapl_id, HDF5Constants.H5F_LIBVER_LATEST, 5);
+    }
+
+    @Test
+    public void testH5Pget_link_creation_order() {
+        int crt_order_flags = 0;
+        try {
+            crt_order_flags = H5.H5Pget_link_creation_order(fcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_link_creation_order: " + err);
+        }
+        assertTrue("testH5Pget_link_creation_order", crt_order_flags >= 0);
+    }
+
+    @Test
+    public void testH5Pset_link_creation_order_trackedPLUSindexed() {
+        int ret_val = -1;
+        int crt_order_flags = HDF5Constants.H5P_CRT_ORDER_TRACKED + HDF5Constants.H5P_CRT_ORDER_INDEXED;
+        int crtorderflags = 0;
+
+        try {
+            ret_val = H5.H5Pset_link_creation_order(fcpl_id, crt_order_flags);
+            crtorderflags = H5.H5Pget_link_creation_order(fcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_link_creation_order: " + err);
+        }
+        assertTrue("testH5Pset_link_creation_order_trackedPLUSindexed",ret_val >= 0);
+        assertEquals(crt_order_flags, crtorderflags);
+    }
+
+    @Test
+    public void testH5Pset_link_creation_order_tracked() {
+        int ret_val = -1;
+        int crtorderflags = 0;
+
+        try {
+            ret_val = H5.H5Pset_link_creation_order(fcpl_id, HDF5Constants.H5P_CRT_ORDER_TRACKED);
+            crtorderflags = H5.H5Pget_link_creation_order(fcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_link_creation_order: " + err);
+        }
+        assertTrue("testH5Pset_link_creation_order_tracked",ret_val >= 0);
+        assertEquals(HDF5Constants.H5P_CRT_ORDER_TRACKED, crtorderflags);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_link_creation_order_invalidvalue() throws Throwable {
+        H5.H5Pset_link_creation_order(fcpl_id, HDF5Constants.H5P_CRT_ORDER_INDEXED);
+    }
+
+    @Test
+    public void testH5Pget_attr_creation_order() {
+        int crt_order_flags = 0;
+
+        try {
+            crt_order_flags = H5.H5Pget_attr_creation_order(ocpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_attr_creation_order: " + err);
+        }
+        assertTrue("testH5Pget_attr_creation_order", crt_order_flags >= 0);
+    }
+
+    @Test
+    public void testH5Pset_attr_creation_order_trackedPLUSindexed() {
+        int ret_val = -1;
+        int crt_order_flags = HDF5Constants.H5P_CRT_ORDER_TRACKED + HDF5Constants.H5P_CRT_ORDER_INDEXED;
+        int crtorderflags = 0;
+
+        try {
+            ret_val = H5.H5Pset_attr_creation_order(ocpl_id, crt_order_flags);
+            crtorderflags = H5.H5Pget_attr_creation_order(ocpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_attr_creation_order: " + err);
+        }
+        assertTrue("testH5Pset_attr_creation_order_trackedPLUSindexed", ret_val >= 0);
+        assertEquals(crt_order_flags, crtorderflags);
+    }
+
+    @Test
+    public void testH5Pset_attr_creation_order_tracked() {
+        int ret_val = -1;
+        int crtorderflags = 0;
+
+        try {
+            ret_val = H5.H5Pset_attr_creation_order(ocpl_id, HDF5Constants.H5P_CRT_ORDER_TRACKED);
+            crtorderflags = H5.H5Pget_attr_creation_order(ocpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_attr_creation_order: " + err);
+        }
+        assertTrue("testH5Pset_attr_creation_order_tracked", ret_val >= 0);
+        assertEquals(HDF5Constants.H5P_CRT_ORDER_TRACKED, crtorderflags);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_attr_creation_order_invalidvalue() throws Throwable {
+        H5.H5Pset_attr_creation_order(ocpl_id, HDF5Constants.H5P_CRT_ORDER_INDEXED);
+    }
+
+    @Test
+    public void testH5Pset_copy_object() {
+
+        int cpy_option = -1;
+
+        try {
+            H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_SHALLOW_HIERARCHY_FLAG);
+            cpy_option = H5.H5Pget_copy_object(ocp_plist_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_copy_object: " + err);
+        }
+        assertEquals(HDF5Constants.H5O_COPY_SHALLOW_HIERARCHY_FLAG, cpy_option);
+
+        try {
+            H5.H5Pset_copy_object(ocp_plist_id, HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG);
+            cpy_option = H5.H5Pget_copy_object(ocp_plist_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_copy_object: " + err);
+        }
+        assertEquals(HDF5Constants.H5O_COPY_EXPAND_REFERENCE_FLAG, cpy_option);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_copy_object_invalidobject() throws Throwable {
+        H5.H5Pset_copy_object(HDF5Constants.H5P_DEFAULT, HDF5Constants.H5O_COPY_SHALLOW_HIERARCHY_FLAG);
+    }
+
+    @Test
+    public void testH5Pset_create_intermediate_group() {
+
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_create_intermediate_group(lcpl_id, true);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_create_intermediate_group: " + err);
+        }
+        assertTrue(ret_val>=0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_create_intermediate_group_invalidobject() throws Throwable {
+        H5.H5Pset_create_intermediate_group(ocp_plist_id, true);
+    }
+
+    @Test
+    public void testH5Pget_create_intermediate_group() {
+        boolean flag = false;
+        try {
+            H5.H5Pset_create_intermediate_group(lcpl_id, true);
+            flag = H5.H5Pget_create_intermediate_group(lcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_create_intermediate_group: " + err);
+        }
+        assertEquals(true, flag);
+    }
+
+    @Test
+    public void testH5Pget_create_intermediate_group_notcreated() {
+        boolean flag = true;
+        try {
+            flag = H5.H5Pget_create_intermediate_group(lcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_create_intermediate_group_notcreated: " + err);
+        }
+        assertEquals(false, flag);
+    }
+
+    @Test
+    public void testH5Pset_data_transform() {
+
+        String expression = "(5/9.0)*(x-32)";
+        int ret_val = -1;
+
+        try {
+            ret_val= H5.H5Pset_data_transform(plist_id, expression);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_data_transform: " + err);
+        }
+        assertTrue(ret_val>=0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pset_data_transform_NullExpression() throws Throwable {
+        H5.H5Pset_data_transform(plist_id, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_data_transform_InvalidExpression1() throws Throwable {
+        H5.H5Pset_data_transform(plist_id, "");
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_data_transform_InvalidExpression2() throws Throwable {
+        H5.H5Pset_data_transform(plist_id, "hello");
+    }
+
+    @Test
+    public void testH5Pget_data_transform() {
+
+        String expression = "(5/9.0)*(x-32)";
+        String [] express = {""};
+        long express_size = 0;
+        long size = 20;
+
+        try {
+            H5.H5Pset_data_transform(plist_id, expression);
+            express_size = H5.H5Pget_data_transform(plist_id, express, size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_data_transform: " + err);
+        }
+        assertTrue(express_size>=0);
+        assertTrue("The data transform expression: ", expression.equals(express[0]));
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pget_data_transform_ExpressionNotSet() throws Throwable {
+        String [] express = {""};
+        H5.H5Pget_data_transform(plist_id, express, 20);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pget_data_transform_IllegalSize() throws Throwable {
+        String [] express = {""};
+        H5.H5Pset_data_transform(plist_id, "(5/9.0)*(x-32)");
+        H5.H5Pget_data_transform(plist_id, express, 0);
+    }
+
+    @Test
+    public void testH5Pget_elink_acc_flags() {
+
+        int get_flags = -1;
+        try {
+            get_flags = H5.H5Pget_elink_acc_flags(gapl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_elink_acc_flags: " + err);
+        }
+        assertTrue("H5Pget_elink_acc_flags", get_flags >= 0);
+        assertEquals(HDF5Constants.H5F_ACC_DEFAULT, get_flags);
+    }
+
+    @Test
+    public void testH5Pset_elink_acc_flags() {
+
+        int get_flags = -1;
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_elink_acc_flags(lapl_id, HDF5Constants.H5F_ACC_RDWR);
+            get_flags = H5.H5Pget_elink_acc_flags(lapl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_elink_acc_flags: " + err);
+        }
+        assertTrue("H5Pset_elink_acc_flags", ret_val >= 0);
+        assertEquals(HDF5Constants.H5F_ACC_RDWR, get_flags);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_elink_acc_flags_InvalidFlag1() throws Throwable {
+        H5.H5Pset_elink_acc_flags(lapl_id, HDF5Constants.H5F_ACC_TRUNC);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_elink_acc_flags_InvalidFlag2() throws Throwable {
+        H5.H5Pset_elink_acc_flags(lapl_id, -1);
+    }
+
+    @Test
+    public void testH5Pset_link_phase_change() {
+
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_link_phase_change(fcpl_id , 2, 2);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_link_phase_change: " + err);
+        }
+        assertTrue("H5Pset_link_phase_change", ret_val >= 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_link_phase_change_Highmax_Compact() throws Throwable {
+        H5.H5Pset_link_phase_change(fcpl_id , 70000000, 3);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_link_phase_change_max_compactLESSTHANmin_dense() throws Throwable {
+        H5.H5Pset_link_phase_change(fcpl_id , 5, 6);
+    }
+
+    @Test
+    public void testH5Pget_link_phase_change() {
+        int ret_val = -1;
+        int[] links = new int[2];
+
+        try {
+            ret_val = H5.H5Pget_link_phase_change(fcpl_id, links);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_link_phase_change: " + err);
+        }
+        assertTrue("testH5Pget_link_phase_change", ret_val >= 0);
+        assertEquals("Default value of maximum compact storage", 8, links[0]);
+        assertEquals("Default value of minimum dense storage", 6, links[1]);
+    }
+
+    @Test
+    public void testH5Pget_link_phase_change_EqualsSet() {
+        int[] links = new int[2];
+        try {
+            H5.H5Pset_link_phase_change(fcpl_id , 10, 7);
+            H5.H5Pget_link_phase_change(fcpl_id, links);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_link_phase_change_EqualsSet: " + err);
+        }
+        assertEquals("Value of maximum compact storage set", 10, links[0]);
+        assertEquals("Value of minimum dense storage set", 7, links[1]);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_link_phase_change_Null() throws Throwable {
+        H5.H5Pget_link_phase_change(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5Pget_attr_phase_change() {
+        int ret_val = -1;
+        int[] attributes = new int[2];
+
+        try {
+            ret_val = H5.H5Pget_attr_phase_change(ocpl_id, attributes);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_attr_phase_change: " + err);
+        }
+        assertTrue("testH5Pget_attr_phase_change", ret_val >= 0);
+        assertEquals("Default value of the max. no. of attributes stored in compact storage", 8, attributes[0]);
+        assertEquals("Default value of the min. no. of attributes stored in dense storage", 6, attributes[1]);
+        try {
+            H5.H5Pset_attr_phase_change(ocpl_id, 9, 5);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_attr_phase_change: " + err);
+        }
+        try {
+            ret_val = H5.H5Pget_attr_phase_change(ocpl_id, attributes);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_attr_phase_change: " + err);
+        }
+        assertTrue("testH5Pget_attr_phase_change", ret_val >= 0);
+        assertEquals("Default value of the max. no. of attributes stored in compact storage", 9, attributes[0]);
+        assertEquals("Default value of the min. no. of attributes stored in dense storage", 5, attributes[1]);
+    }
+
+    @Test
+    public void testH5Pget_shared_mesg_phase_change() {
+        int ret_val = -1;
+        int[] size = new int[2];
+
+        try {
+            ret_val = H5.H5Pget_shared_mesg_phase_change(fcpl_id, size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_shared_mesg_phase_change: " + err);
+        }
+        assertTrue("testH5Pget_shared_mesg_phase_change", ret_val >= 0);
+    }
+
+    @Test
+    public void testH5Pget_shared_mesg_phase_change_EqualsSET() {
+        int[] size = new int[2];
+
+        try {
+            H5.H5Pset_shared_mesg_phase_change(fcpl_id,50, 40);
+            H5.H5Pget_shared_mesg_phase_change(fcpl_id, size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_shared_mesg_phase_change_EqualsSET: " + err);
+        }
+        assertEquals("Value of maximum list set", 50, size[0]);
+        assertEquals("Value of minimum btree set", 40, size[1]);
+    }
+
+    @Test
+    public void testH5Pset_shared_mesg_phase_change() {
+
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_shared_mesg_phase_change(fcpl_id,2, 1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_shared_mesg_phase_change: " + err);
+        }
+        assertTrue("H5Pset_shared_mesg_phase_change", ret_val >= 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5PH5Pset_shared_mesg_phase_change_HighMaxlistValue() throws Throwable {
+        H5.H5Pset_shared_mesg_phase_change(fcpl_id, 5001, 4000);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5PH5Pset_shared_mesg_phase_change_HighMinbtreeValue() throws Throwable {
+        H5.H5Pset_shared_mesg_phase_change(fcpl_id, 5000, 5001);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5PH5Pset_shared_mesg_phase_change_MinbtreeGreaterThanMaxlist() throws Throwable {
+        H5.H5Pset_link_phase_change(fcpl_id , 3, 7);
+    }
+
+    @Test
+    public void testH5Pget_shared_mesg_nindexes() {
+
+        int nindexes = -1;
+        try {
+            nindexes = H5.H5Pget_shared_mesg_nindexes(fcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_shared_mesg_nindexes: " + err);
+        }
+        assertTrue("H5Pget_shared_mesg_nindexes", nindexes >= 0);
+    }
+
+    @Test
+    public void testH5Pset_shared_mesg_nindexes() {
+
+        int nindexes = -1;
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_shared_mesg_nindexes(fcpl_id, 7);
+            nindexes = H5.H5Pget_shared_mesg_nindexes(fcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_shared_mesg_nindexes: " + err);
+        }
+        assertTrue("H5Pset_shared_mesg_nindexes", ret_val >= 0);
+        assertEquals("Value of nindexes is equal to value set",7 ,nindexes);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_shared_mesg_nindexes_InvalidHIGHnindexes()throws Throwable {
+        H5.H5Pset_shared_mesg_nindexes(fcpl_id, 9);
+    }
+
+    @Test
+    public void testH5Pset_shared_mesg_index() {
+
+        int ret_val = -1;
+        try {
+            H5.H5Pset_shared_mesg_nindexes(fcpl_id, 2);
+            ret_val = H5.H5Pset_shared_mesg_index(fcpl_id, 0,HDF5Constants.H5O_SHMESG_ATTR_FLAG, 10);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_shared_mesg_index: " + err);
+        }
+        assertTrue("H5Pset_shared_mesg_index", ret_val >= 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_shared_mesg_index_Invalid_indexnum() throws Throwable {
+        H5.H5Pset_shared_mesg_index(fcpl_id, 2,HDF5Constants.H5O_SHMESG_ATTR_FLAG, 10);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_shared_mesg_index_InvalidFlag() throws Throwable {
+        H5.H5Pset_shared_mesg_nindexes(fcpl_id, 7);
+        H5.H5Pset_shared_mesg_index(fcpl_id, 2,HDF5Constants.H5O_SHMESG_ALL_FLAG + 1, 10);
+    }
+
+    @Test
+    public void testH5Pget_shared_mesg_index() {
+
+        int ret_val = -1;
+        int[] mesg_info = new int[2];
+        try {
+            H5.H5Pset_shared_mesg_nindexes(fcpl_id, 2);
+            H5.H5Pset_shared_mesg_index(fcpl_id, 0,HDF5Constants.H5O_SHMESG_ATTR_FLAG, 10);
+            ret_val = H5.H5Pget_shared_mesg_index(fcpl_id, 0, mesg_info);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_shared_mesg_index: " + err);
+        }
+        assertTrue("H5Pget_shared_mesg_index", ret_val >= 0);
+        assertEquals("Type of message", HDF5Constants.H5O_SHMESG_ATTR_FLAG, mesg_info[0]);
+        assertEquals("minimum message size", 10, mesg_info[1]);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pget_shared_mesg_index_Invalid_indexnum() throws Throwable {
+        int[] mesg_info = new int[2];
+        H5.H5Pget_shared_mesg_index(fcpl_id, 0, mesg_info);
+    }
+
+    @Test
+    public void testH5Pset_local_heap_size_hint() {
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_local_heap_size_hint(gcpl_id, 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_local_heap_size_hint: " + err);
+        }
+        assertTrue("H5Pset_local_heap_size_hint", ret_val >= 0);
+    }
+
+    @Test
+    public void testH5Pget_local_heap_size_hint() {
+        long size_hint = -1;
+        try {
+            size_hint = H5.H5Pget_local_heap_size_hint(gcpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_local_heap_size_hint: " + err);
+        }
+        assertTrue("H5Pget_local_heap_size_hint", size_hint >= 0);
+    }
+
+    @Test
+    public void testH5Pset_nbit() {
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_nbit(ocpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_nbit: " + err);
+        }
+        assertTrue("H5Pset_nbit", ret_val >= 0);
+    }
+
+    @Test
+    public void testH5Pset_scaleoffset() {
+        int ret_val = -1;
+        int scale_type = HDF5Constants.H5Z_SO_FLOAT_DSCALE;
+        int scale_factor = HDF5Constants.H5Z_SO_INT_MINBITS_DEFAULT;
+        try {
+            ret_val = H5.H5Pset_scaleoffset(ocpl_id, scale_type, scale_factor);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_scaleoffset: " + err);
+        }
+        assertTrue("H5Pset_scaleoffset", ret_val >= 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_scaleoffset_Invalidscale_type() throws Throwable {
+        H5.H5Pset_scaleoffset(ocpl_id, 3, 1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_scaleoffset_Invalidscale_factor() throws Throwable {
+        H5.H5Pset_scaleoffset(ocpl_id, HDF5Constants.H5Z_SO_INT, -1);
+    }
+
+    @Test
+    public void testH5Pset_est_link_info() {
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_est_link_info(gcpl_id, 0,10);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_est_link_info: " + err);
+        }
+        assertTrue("H5Pset_est_link_info", ret_val >= 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Pset_est_link_info_InvalidValues() throws Throwable {
+        H5.H5Pset_est_link_info(gcpl_id, 100000,10);
+    }
+
+    @Test
+    public void testH5Pget_est_link_info() {
+        int ret_val = -1;
+        int[] link_info = new int[2];
+        try {
+            ret_val = H5.H5Pget_est_link_info(gcpl_id, link_info);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_est_link_info: " + err);
+        }
+        assertTrue("H5Pget_est_link_info", ret_val >= 0);
+    }
+
+    @Test
+    public void testH5Pset_elink_prefix() {
+        int ret_val = -1;
+        String prefix = "tmp";
+        try {
+            ret_val = H5.H5Pset_elink_prefix(plapl_id, prefix);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_est_link_info: " + err);
+        }
+        assertTrue("H5Pset_elink_prefix", ret_val >= 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pset_elink_prefix_null() throws Throwable{
+        H5.H5Pset_elink_prefix(plapl_id, null);
+    }
+
+    @Test
+    public void testH5Pget_elink_prefix() {
+        String prefix = "tmp";
+        String[] pre = {""};
+        long prefix_size = 0;
+
+        try {
+            H5.H5Pset_elink_prefix(plapl_id, prefix);
+            prefix_size = H5.H5Pget_elink_prefix(plapl_id, pre);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_elink_prefix: " + err);
+        }
+        assertTrue(prefix_size>=0);
+        assertTrue("The prefix: ", prefix.equals(pre[0]));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_elink_prefix_null() throws Throwable {
+        H5.H5Pget_elink_prefix(plapl_id, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_version_null() throws Throwable {
+        H5.H5Pget_version(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5Pget_version() {
+        int[] version_info = {255,255,255,255};
+
+        try {
+            _createH5File(fcpl_id, fapl_id);
+            H5.H5Pget_version(fcpl_id, version_info);
+            deleteH5file();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_version: " + err);
+        }
+        assertTrue("super block version: "+version_info[0], version_info[0] == 0);
+        assertTrue("global freelist version: "+version_info[1], version_info[1] == 0);
+        assertTrue("symbol table version: "+version_info[2], version_info[2] == 0);
+        assertTrue("shared object header version: "+version_info[3], version_info[3] == 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_userblock_null() throws Throwable {
+        H5.H5Pget_userblock(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5P_userblock() {
+        int[] version_info = {255,255,255,255};
+        long[] size = {0};
+
+        try {
+            H5.H5Pset_userblock(fcpl_id, 1024);
+            _createH5File(fcpl_id, fapl_id);
+
+            /* Close FCPL */
+            H5.H5Pclose(fcpl_id);
+
+            /* Get the file's dataset creation property list */
+            fcpl_id =  H5.H5Fget_create_plist(H5fid);
+
+            /* Get the file's version information */
+            H5.H5Pget_version(fcpl_id, version_info);
+            H5.H5Pget_userblock(fcpl_id, size);
+            deleteH5file();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_userblock: " + err);
+        }
+        assertTrue("super block version: "+version_info[0], version_info[0] == 0);
+        assertTrue("global freelist version: "+version_info[1], version_info[1] == 0);
+        assertTrue("symbol table version: "+version_info[2], version_info[2] == 0);
+        assertTrue("shared object header version: "+version_info[3], version_info[3] == 0);
+        assertTrue("user block size: "+size[0], size[0] == 1024);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_sizes_null() throws Throwable {
+        H5.H5Pget_sizes(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5P_sizes() {
+        int[] version_info = {255,255,255,255};
+        long[] size = {0,0};
+
+        try {
+            H5.H5Pset_sizes(fcpl_id, 4, 8);
+            _createH5File(fcpl_id, fapl_id);
+
+            /* Close FCPL */
+            H5.H5Pclose(fcpl_id);
+
+            /* Get the file's dataset creation property list */
+            fcpl_id =  H5.H5Fget_create_plist(H5fid);
+
+            /* Get the file's version information */
+            H5.H5Pget_version(fcpl_id, version_info);
+            H5.H5Pget_sizes(fcpl_id, size);
+            deleteH5file();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_sizes: " + err);
+        }
+        assertTrue("super block version: "+version_info[0], version_info[0] == 0);
+        assertTrue("global freelist version: "+version_info[1], version_info[1] == 0);
+        assertTrue("symbol table version: "+version_info[2], version_info[2] == 0);
+        assertTrue("shared object header version: "+version_info[3], version_info[3] == 0);
+        assertTrue("sizeof_addr size: "+size[0], size[0] == 4);
+        assertTrue("sizeof_size size: "+size[1], size[1] == 8);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_sym_k_null() throws Throwable {
+        H5.H5Pget_sym_k(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5P_sym_k() {
+        int[] version_info = {255,255,255,255};
+        int[] size = {0,0};
+
+        try {
+            H5.H5Pset_sym_k(fcpl_id, 32, 8);
+            _createH5File(fcpl_id, fapl_id);
+
+            /* Close FCPL */
+            H5.H5Pclose(fcpl_id);
+
+            /* Get the file's dataset creation property list */
+            fcpl_id =  H5.H5Fget_create_plist(H5fid);
+
+            /* Get the file's version information */
+            H5.H5Pget_version(fcpl_id, version_info);
+            H5.H5Pget_sym_k(fcpl_id, size);
+            deleteH5file();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_sym_k: " + err);
+        }
+        assertTrue("super block version: "+version_info[0], version_info[0] == 0);
+        assertTrue("global freelist version: "+version_info[1], version_info[1] == 0);
+        assertTrue("symbol table version: "+version_info[2], version_info[2] == 0);
+        assertTrue("shared object header version: "+version_info[3], version_info[3] == 0);
+        assertTrue("symbol table tree rank: "+size[0], size[0] == 32);
+        assertTrue("symbol table node size: "+size[1], size[1] == 8);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Pget_istore_k_null() throws Throwable {
+        H5.H5Pget_istore_k(fcpl_id, null);
+    }
+
+    @Test
+    public void testH5P_istore_k() {
+        int[] version_info = {255,255,255,255};
+        int[] size = {0};
+
+        try {
+            H5.H5Pset_istore_k(fcpl_id, 64);
+            _createH5File(fcpl_id, fapl_id);
+
+            /* Close FCPL */
+            H5.H5Pclose(fcpl_id);
+
+            /* Get the file's dataset creation property list */
+            fcpl_id =  H5.H5Fget_create_plist(H5fid);
+
+            /* Get the file's version information */
+            H5.H5Pget_version(fcpl_id, version_info);
+            H5.H5Pget_istore_k(fcpl_id, size);
+            deleteH5file();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_sym_k: " + err);
+        }
+        assertTrue("super block version: "+version_info[0], version_info[0] == 1);
+        assertTrue("global freelist version: "+version_info[1], version_info[1] == 0);
+        assertTrue("symbol table version: "+version_info[2], version_info[2] == 0);
+        assertTrue("shared object header version: "+version_info[3], version_info[3] == 0);
+        assertTrue("chunked storage b-tree 1/2-rank: "+size[0], size[0] == 64);
+    }
+
+    @Test
+    public void testH5P_obj_track_times() {
+        boolean default_ret_val = false;
+        boolean ret_val = true;
+        try {
+            default_ret_val = H5.H5Pget_obj_track_times(ocpl_id);
+            H5.H5Pset_obj_track_times(ocpl_id, false);
+            ret_val = H5.H5Pget_obj_track_times(ocpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_obj_track_times: " + err);
+        }
+        assertTrue("H5Pget_obj_track_times default", default_ret_val);
+        assertFalse("H5Pget_obj_track_times", ret_val);
+    }
+
+    @Test
+    public void testH5Pget_char_encoding() {
+        int char_encoding = 0;
+
+        try {
+            char_encoding = H5.H5Pget_char_encoding(acpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_char_encoding: " + err);
+        }
+        assertTrue("testH5Pget_char_encoding", char_encoding == HDF5Constants.H5T_CSET_ASCII);
+        try {
+            H5.H5Pset_char_encoding(acpl_id, HDF5Constants.H5T_CSET_UTF8);
+            char_encoding = H5.H5Pget_char_encoding(acpl_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_char_encoding: " + err);
+        }
+        assertTrue("testH5Pget_char_encoding", char_encoding == HDF5Constants.H5T_CSET_UTF8);
+    }
+
+    @Test
+    public void testH5P_fill_time() {
+        int[] fill_time = {0};
+
+        try {
+            H5.H5Pget_fill_time(ocpl_id, fill_time);
+            assertTrue("fill_time: "+fill_time[0], fill_time[0] == HDF5Constants.H5D_FILL_TIME_IFSET);
+            H5.H5Pset_fill_time(ocpl_id, HDF5Constants.H5D_FILL_TIME_ALLOC);
+            H5.H5Pget_fill_time(ocpl_id, fill_time);
+            assertTrue("fill_time: "+fill_time[0], fill_time[0] == HDF5Constants.H5D_FILL_TIME_ALLOC);
+            H5.H5Pset_fill_time(ocpl_id, HDF5Constants.H5D_FILL_TIME_NEVER);
+            H5.H5Pget_fill_time(ocpl_id, fill_time);
+            assertTrue("fill_time: "+fill_time[0], fill_time[0] == HDF5Constants.H5D_FILL_TIME_NEVER);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fill_time: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_alloc_time() {
+        int[] alloc_time = {0};
+
+        try {
+            H5.H5Pget_alloc_time(ocpl_id, alloc_time);
+            assertTrue("alloc_time: "+alloc_time[0], alloc_time[0] == HDF5Constants.H5D_ALLOC_TIME_LATE);
+            H5.H5Pset_alloc_time(ocpl_id, HDF5Constants.H5D_ALLOC_TIME_EARLY);
+            H5.H5Pget_alloc_time(ocpl_id, alloc_time);
+            assertTrue("alloc_time: "+alloc_time[0], alloc_time[0] == HDF5Constants.H5D_ALLOC_TIME_EARLY);
+            H5.H5Pset_alloc_time(ocpl_id, HDF5Constants.H5D_ALLOC_TIME_INCR);
+            H5.H5Pget_alloc_time(ocpl_id, alloc_time);
+            assertTrue("alloc_time: "+alloc_time[0], alloc_time[0] == HDF5Constants.H5D_ALLOC_TIME_INCR);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_alloc_time: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_fill_value() {
+        int[] fill_value = {-1};
+        int[] fill_value_status = {-1};
+
+        try {
+            H5.H5Pfill_value_defined(ocpl_id, fill_value_status);
+            assertTrue("fill_value_status: "+fill_value_status[0], fill_value_status[0] == HDF5Constants.H5D_FILL_VALUE_DEFAULT);
+            H5.H5Pget_fill_value(ocpl_id, HDF5Constants.H5T_NATIVE_INT, fill_value);
+            assertTrue("fill_value: "+fill_value[0], fill_value[0] == 0);
+            fill_value[0] = 255;
+            H5.H5Pset_fill_value(ocpl_id, HDF5Constants.H5T_NATIVE_INT, fill_value);
+            H5.H5Pget_fill_value(ocpl_id, HDF5Constants.H5T_NATIVE_INT, fill_value);
+            assertTrue("fill_value: "+fill_value[0], fill_value[0] == 255);
+            H5.H5Pfill_value_defined(ocpl_id, fill_value_status);
+            assertTrue("fill_value_status: "+fill_value_status[0], fill_value_status[0] == HDF5Constants.H5D_FILL_VALUE_USER_DEFINED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fill_value: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_layout() {
+        int layout_type = -1;
+
+        try {
+            layout_type = H5.H5Pget_layout(ocpl_id);
+            assertTrue("layout: "+layout_type, layout_type == HDF5Constants.H5D_CONTIGUOUS);
+            H5.H5Pset_layout(ocpl_id, HDF5Constants.H5D_COMPACT);
+            layout_type = H5.H5Pget_layout(ocpl_id);
+            assertTrue("layout: "+layout_type, layout_type == HDF5Constants.H5D_COMPACT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_layout: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_chunk() {
+        long[] chunk_size = {0,0};
+        long[] chunk_new_size = {2,3};
+        int layout_type = -1;
+
+        try {
+            H5.H5Pset_chunk(ocpl_id, 2, chunk_new_size);
+            H5.H5Pget_chunk(ocpl_id, 2, chunk_size);
+            assertTrue("chunk: "+chunk_size[0], chunk_size[0] == chunk_new_size[0]);
+            assertTrue("chunk: "+chunk_size[1], chunk_size[1] == chunk_new_size[1]);
+            layout_type = H5.H5Pget_layout(ocpl_id);
+            assertTrue("layout: "+layout_type, layout_type == HDF5Constants.H5D_CHUNKED);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_chunk: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_file_space() {
+        long[] threshold = {0};
+        int[] strategy = {0};
+        try {
+            H5.H5Pget_file_space(fcpl_id, strategy, threshold);
+            assertTrue("strategy: "+strategy[0], strategy[0] == HDF5Constants.H5F_FILE_SPACE_ALL);
+            assertTrue("theshold: "+threshold[0], threshold[0] == 1);
+            H5.H5Pset_file_space(fcpl_id, HDF5Constants.H5F_FILE_SPACE_ALL_PERSIST, 10);
+            H5.H5Pget_file_space(fcpl_id, strategy, threshold);
+            assertTrue("strategy: "+strategy[0], strategy[0] == HDF5Constants.H5F_FILE_SPACE_ALL_PERSIST);
+            assertTrue("theshold: "+threshold[0], threshold[0] == 10);
+            H5.H5Pset_file_space(fcpl_id, HDF5Constants.H5F_FILE_SPACE_VFD, 0);
+            H5.H5Pget_file_space(fcpl_id, strategy, threshold);
+            assertTrue("strategy: "+strategy[0], strategy[0] == HDF5Constants.H5F_FILE_SPACE_VFD);
+            assertTrue("theshold: "+threshold[0], threshold[0] == 10);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5P_file_space: " + err);
+        }
+   }
+}
diff --git a/java/test/TestH5PData.java b/java/test/TestH5PData.java
new file mode 100644
index 0000000..7fc154d
--- /dev/null
+++ b/java/test/TestH5PData.java
@@ -0,0 +1,170 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5PData {
+    @Rule public TestName testname = new TestName();
+
+    private static final String H5_FILE = "test.h5";
+    private static final int DIM_X = 12;
+    private static final int DIM_Y = 18;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long plist_id = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+    double windchillF[][] =
+    {{36.0, 31.0, 25.0, 19.0, 13.0, 7.0, 1.0, -5.0, -11.0, -16.0, -22.0, -28.0, -34.0, -40.0, -46.0, -52.0, -57.0, -63.0},
+     {34.0, 27.0, 21.0, 15.0, 9.0, 3.0, -4.0, -10.0, -16.0, -22.0, -28.0, -35.0, -41.0, -47.0, -53.0, -59.0, -66.0, -72.0},
+     {32.0, 25.0, 19.0, 13.0, 6.0, 0.0, -7.0, -13.0, -19.0, -26.0, -32.0, -39.0, -45.0, -51.0, -58.0, -64.0, -71.0, -77.0},
+     {30.0, 24.0, 17.0, 11.0, 4.0, -2.0, -9.0, -15.0, -22.0, -29.0, -35.0, -42.0, -48.0, -55.0, -61.0, -68.0, -74.0, -81.0},
+     {29.0, 23.0, 16.0, 9.0, 3.0, -4.0, -11.0, -17.0, -24.0, -31.0, -37.0, -44.0, -51.0, -58.0, -64.0, -71.0, -78.0, -84.0},
+     {28.0, 22.0, 15.0, 8.0, 1.0, -5.0, -12.0, -19.0, -26.0, -33.0, -39.0, -46.0, -53.0, -60.0, -67.0, -73.0, -80.0, -87.0},
+     {28.0, 21.0, 14.0, 7.0, 0.0, -7.0, -14.0, -21.0, -27.0, -34.0, -41.0, -48.0, -55.0, -62.0, -69.0, -76.0, -82.0, -89.0},
+     {27.0, 20.0, 13.0, 6.0, -1.0, -8.0, -15.0, -22.0, -29.0, -36.0, -43.0, -50.0, -57.0, -64.0, -71.0, -78.0, -84.0, -91.0},
+     {26.0, 19.0, 12.0, 5.0, -2.0, -9.0, -16.0, -23.0, -30.0, -37.0, -44.0, -51.0, -58.0, -65.0, -72.0, -79.0, -86.0, -93.0},
+     {26.0, 19.0, 12.0, 4.0, -3.0, -10.0, -17.0, -24.0, -31.0, -38.0, -45.0, -52.0, -60.0, -67.0, -74.0, -81.0, -88.0, -95.0},
+     {25.0, 18.0, 11.0, 4.0, -3.0, -11.0, -18.0, -25.0, -32.0, -39.0, -46.0, -54.0, -61.0, -68.0, -75.0, -82.0, -89.0, -97.0},
+     {25.0, 17.0, 10.0, 3.0, -4.0, -11.0, -19.0, -26.0, -33.0, -40.0, -48.0, -55.0, -62.0, -69.0, -76.0, -84.0, -91.0, -98.0}
+    };
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final long _createFloatDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name, HDF5Constants.H5T_NATIVE_FLOAT, dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5PData._createFloatDataset: ", did > 0);
+
+        return did;
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did = _createFloatDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+            plist_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5PData.createH5file: " + err);
+        }
+        assertTrue("TestH5PData.createH5file: H5.H5Fcreate: ",H5fid > 0);
+        assertTrue("TestH5PData.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
+        assertTrue("TestH5PData.createH5file: _createFloatDataset: ",H5did > 0);
+        assertTrue(plist_id > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+
+        if (plist_id > 0)
+            try {H5.H5Pclose(plist_id);} catch (Exception ex) {}
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Pdata_transform() {
+        String f_to_c = "(5/9.0)*(x-32)";
+        double windchillFread[][] = new double[DIM_X][DIM_Y];
+        double windchillC;
+        NumberFormat formatter = new DecimalFormat("#0.000");
+
+        try {
+            H5.H5Pset_data_transform(plist_id, f_to_c);
+            H5.H5Dwrite(H5did, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    plist_id, windchillF);
+            H5.H5Dread(H5did, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, windchillFread);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pdata_transform: " + err);
+        }
+        for(int row = 0; row < DIM_X; row++)
+            for(int col = 0; col < DIM_Y; col++) {
+                windchillC = (5/9.0)*(windchillF[row][col]-32);
+                String Cstr = formatter.format(windchillC);
+                String Fread = formatter.format(windchillFread[row][col]);
+                assertTrue("H5Pdata_transform: <"+row+","+col+">"+Fread+"="+Cstr, Fread.compareTo(Cstr)==0);
+            }
+    }
+
+    @Test
+    public void testH5P_buffer() {
+        long default_size = 0;
+        long size = 0;
+
+        try {
+            default_size = H5.H5Pget_buffer_size(plist_id);
+            H5.H5Pset_buffer_size(plist_id, DIM_X*DIM_Y);
+            size = H5.H5Pget_buffer_size(plist_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_buffer fail: " + err);
+        }
+        assertTrue("H5P_buffer default: "+default_size, default_size==1024*1024);
+        assertTrue("H5P_buffer size: "+size, size==DIM_X*DIM_Y);
+    }
+}
diff --git a/java/test/TestH5PL.java b/java/test/TestH5PL.java
new file mode 100644
index 0000000..afcb88a
--- /dev/null
+++ b/java/test/TestH5PL.java
@@ -0,0 +1,61 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5PL {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test
+    public void TestH5PLplugins() {
+        try {
+            int plugin_flags = H5.H5PLget_loading_state();
+            assertTrue("H5.H5PLget_loading_state: "+plugin_flags, plugin_flags == HDF5Constants.H5PL_ALL_PLUGIN);
+            int new_setting = plugin_flags & ~HDF5Constants.H5PL_FILTER_PLUGIN;
+            H5.H5PLset_loading_state (new_setting);
+            int changed_flags = H5.H5PLget_loading_state();
+            assertTrue("H5.H5PLget_loading_state: "+changed_flags, changed_flags == new_setting);
+            H5.H5PLset_loading_state (plugin_flags);
+            changed_flags = H5.H5PLget_loading_state();
+            assertTrue("H5.H5PLget_loading_state: "+changed_flags, changed_flags == HDF5Constants.H5PL_ALL_PLUGIN);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5PLplugins " + err);
+        }
+    }
+}
diff --git a/java/test/TestH5Pfapl.java b/java/test/TestH5Pfapl.java
new file mode 100644
index 0000000..e888e20
--- /dev/null
+++ b/java/test/TestH5Pfapl.java
@@ -0,0 +1,1381 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5AC_cache_config_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Pfapl {
+    @Rule public TestName testname = new TestName();
+
+    private static final String H5_FILE = "test.h5";
+    private static final String H5_LOG_FILE = "test.log";
+    private static final String H5_FAMILY_FILE = "test%05d";
+    private static final String H5_MULTI_FILE = "testmulti";
+    private static char  MULTI_LETTERS[] = {'X','s','b','r','g','l','o'};
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    private static final int DIMF_X = 12;
+    private static final int DIMF_Y = 18;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long H5Fdsid = -1;
+    long H5Fdid = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+    long fapl_id = -1;
+    long plapl_id = -1;
+    long dapl_id = -1;
+    long plist_id = -1;
+    long btplist_id = -1;
+    long[] H5Fdims = { DIMF_X, DIMF_Y };
+    double windchillF[][] =
+    {{36.0, 31.0, 25.0, 19.0, 13.0, 7.0, 1.0, -5.0, -11.0, -16.0, -22.0, -28.0, -34.0, -40.0, -46.0, -52.0, -57.0, -63.0},
+     {34.0, 27.0, 21.0, 15.0, 9.0, 3.0, -4.0, -10.0, -16.0, -22.0, -28.0, -35.0, -41.0, -47.0, -53.0, -59.0, -66.0, -72.0},
+     {32.0, 25.0, 19.0, 13.0, 6.0, 0.0, -7.0, -13.0, -19.0, -26.0, -32.0, -39.0, -45.0, -51.0, -58.0, -64.0, -71.0, -77.0},
+     {30.0, 24.0, 17.0, 11.0, 4.0, -2.0, -9.0, -15.0, -22.0, -29.0, -35.0, -42.0, -48.0, -55.0, -61.0, -68.0, -74.0, -81.0},
+     {29.0, 23.0, 16.0, 9.0, 3.0, -4.0, -11.0, -17.0, -24.0, -31.0, -37.0, -44.0, -51.0, -58.0, -64.0, -71.0, -78.0, -84.0},
+     {28.0, 22.0, 15.0, 8.0, 1.0, -5.0, -12.0, -19.0, -26.0, -33.0, -39.0, -46.0, -53.0, -60.0, -67.0, -73.0, -80.0, -87.0},
+     {28.0, 21.0, 14.0, 7.0, 0.0, -7.0, -14.0, -21.0, -27.0, -34.0, -41.0, -48.0, -55.0, -62.0, -69.0, -76.0, -82.0, -89.0},
+     {27.0, 20.0, 13.0, 6.0, -1.0, -8.0, -15.0, -22.0, -29.0, -36.0, -43.0, -50.0, -57.0, -64.0, -71.0, -78.0, -84.0, -91.0},
+     {26.0, 19.0, 12.0, 5.0, -2.0, -9.0, -16.0, -23.0, -30.0, -37.0, -44.0, -51.0, -58.0, -65.0, -72.0, -79.0, -86.0, -93.0},
+     {26.0, 19.0, 12.0, 4.0, -3.0, -10.0, -17.0, -24.0, -31.0, -38.0, -45.0, -52.0, -60.0, -67.0, -74.0, -81.0, -88.0, -95.0},
+     {25.0, 18.0, 11.0, 4.0, -3.0, -11.0, -18.0, -25.0, -32.0, -39.0, -46.0, -54.0, -61.0, -68.0, -75.0, -82.0, -89.0, -97.0},
+     {25.0, 17.0, 10.0, 3.0, -4.0, -11.0, -19.0, -26.0, -33.0, -40.0, -48.0, -55.0, -62.0, -69.0, -76.0, -84.0, -91.0, -98.0}
+    };
+
+    private final void _deleteFile(String filename) {
+        File file = null;
+        try {
+            file = new File(filename);
+        }
+        catch (Throwable err) {}
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final void _deleteLogFile() {
+        File file = null;
+        try {
+            file = new File(H5_LOG_FILE);
+        }
+        catch (Throwable err) {}
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final void _deleteFamilyFile() {
+        File file = null;
+        for(int indx = 0; ;indx++) {
+            java.text.DecimalFormat myFormat = new java.text.DecimalFormat("00000");
+            try {
+                file = new File("test"+myFormat.format(new Integer(indx))+".h5");
+            }
+            catch (Throwable err) {}
+
+            if (file.exists()) {
+                try {file.delete();} catch (SecurityException e) {}
+            }
+            else
+                return;
+        }
+    }
+
+    private final void _deleteMultiFile() {
+        File file = null;
+        for(int indx = 1;indx<7;indx++) {
+            try {
+                file = new File(H5_MULTI_FILE+"-"+MULTI_LETTERS[indx]+".h5");
+            }
+            catch (Throwable err) {}
+
+            if (file.exists()) {
+                try {file.delete();} catch (SecurityException e) {}
+            }
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name, HDF5Constants.H5T_STD_I32BE, dsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5Pfapl._createDataset: ", did > 0);
+
+        return did;
+    }
+
+    private final void _createFloatDataset() {
+        try {
+            H5Fdsid = H5.H5Screate_simple(2, H5Fdims, null);
+            H5Fdid = H5.H5Dcreate(H5fid, "dsfloat", HDF5Constants.H5T_NATIVE_FLOAT, H5Fdsid,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5Pfapl._createFloatDataset: ", H5Fdid > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    private final void _createH5multiFileDS() {
+        try {
+            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createH5file: " + err);
+        }
+        assertTrue("TestH5Pfapl.createH5file: _createDataset: ", H5did > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    private final void _createH5File(long fapl) {
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, fapl);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createH5file: " + err);
+        }
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+        assertTrue("TestH5Pfapl.createH5file: _createDataset: ", H5did > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    private final void _createH5familyFile(long fapl) {
+        try {
+            H5fid = H5.H5Fcreate(H5_FAMILY_FILE+".h5", HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, fapl);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createH5file: " + err);
+        }
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+        assertTrue("TestH5Pfapl.createH5file: _createDataset: ", H5did > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    private final void _createH5multiFile(long fapl) {
+        try {
+            H5fid = H5.H5Fcreate(H5_MULTI_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, fapl);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createH5file: " + err);
+        }
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5Pfapl.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    public void deleteH5file() {
+        _deleteFile(H5_FILE);
+    }
+
+    public void deleteH5familyfile() {
+        _deleteFamilyFile();
+    }
+
+    public void deleteH5multifile() {
+        _deleteMultiFile();
+    }
+
+    @Before
+    public void createFileAccess()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            fapl_id = H5.H5Pcreate(HDF5Constants.H5P_FILE_ACCESS);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createFileAccess: " + err);
+        }
+        assertTrue(fapl_id > 0);
+        try {
+            plapl_id = H5.H5Pcreate(HDF5Constants.H5P_LINK_ACCESS);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createFileAccess: " + err);
+        }
+        assertTrue(plapl_id > 0);
+        try {
+            plist_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+            btplist_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_XFER);
+            dapl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_ACCESS);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pfapl.createFileAccess: " + err);
+        }
+        assertTrue(plist_id > 0);
+        assertTrue(btplist_id > 0);
+        assertTrue(dapl_id > 0);
+    }
+
+    @After
+    public void deleteFileAccess() throws HDF5LibraryException {
+        if (fapl_id > 0)
+            try {H5.H5Pclose(fapl_id);} catch (Exception ex) {}
+        if (plapl_id > 0)
+            try {H5.H5Pclose(plapl_id);} catch (Exception ex) {}
+        if (dapl_id > 0)
+            try {H5.H5Pclose(dapl_id);} catch (Exception ex) {}
+        if (plist_id > 0)
+            try {H5.H5Pclose(plist_id);} catch (Exception ex) {}
+        if (btplist_id > 0)
+            try {H5.H5Pclose(btplist_id);} catch (Exception ex) {}
+
+        if (H5Fdsid > 0)
+            try {H5.H5Sclose(H5Fdsid);} catch (Exception ex) {}
+        if (H5Fdid > 0)
+            try {H5.H5Dclose(H5Fdid);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Pget_libver_bounds() {
+        int ret_val = -1;
+        int[] libver = new int[2];
+
+        try {
+            ret_val = H5.H5Pget_libver_bounds(fapl_id, libver);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_libver_bounds: " + err);
+        }
+        assertTrue("testH5Pget_libver_bounds", ret_val >= 0);
+        // Check the Earliest Version if the library
+        assertEquals(HDF5Constants.H5F_LIBVER_EARLIEST, libver[0]);
+        // Check the Latest Version if the library
+        assertEquals(HDF5Constants.H5F_LIBVER_LATEST, libver[1]);
+    }
+
+    @Test
+    public void testH5Pset_libver_bounds() {
+
+        int ret_val = -1;
+        int low = HDF5Constants.H5F_LIBVER_EARLIEST;
+        int high = HDF5Constants.H5F_LIBVER_LATEST;
+        int[] libver = new int[2];
+
+        try {
+            ret_val = H5.H5Pset_libver_bounds(fapl_id, low, high);
+            H5.H5Pget_libver_bounds(fapl_id, libver);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_libver_bounds: " + err);
+        }
+        assertTrue("testH5Pset_libver_bounds", ret_val >= 0);
+        // Check the Earliest Version if the library
+        assertEquals(HDF5Constants.H5F_LIBVER_EARLIEST, libver[0]);
+        // Check the Latest Version if the library
+        assertEquals(HDF5Constants.H5F_LIBVER_LATEST, libver[1]);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Pset_elink_fapl_NegativeID() throws Throwable {
+        H5.H5Pset_elink_fapl(-1, fapl_id );
+    }
+
+    @Test
+    public void testH5Pset_elink_fapl() {
+        int ret_val = -1;
+        try {
+            ret_val = H5.H5Pset_elink_fapl(plapl_id, fapl_id );
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_elink_fapl: " + err);
+        }
+        assertTrue("H5Pset_elink_fapl", ret_val >= 0);
+    }
+
+    @Test
+    public void testH5Pget_elink_fapl() {
+        long ret_val_id = -1;
+        try {
+            ret_val_id = H5.H5Pget_elink_fapl(plapl_id);
+            assertTrue("H5Pget_elink_fapl", ret_val_id >= 0);
+            assertEquals(HDF5Constants.H5P_DEFAULT, ret_val_id );
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_elink_fapl: " + err);
+        }
+        finally {
+            if (ret_val_id > 0)
+                try {H5.H5Pclose(ret_val_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5P_elink_fapl() {
+        long ret_val_id = -1;
+        try {
+            H5.H5Pset_elink_fapl(plapl_id, fapl_id );
+            ret_val_id = H5.H5Pget_elink_fapl(plapl_id);
+            assertTrue("H5P_elink_fapl", ret_val_id >= 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_elink_fapl: " + err);
+        }
+        finally {
+            if (ret_val_id > 0)
+                try {H5.H5Pclose(ret_val_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5P_elink_file_cache_size() {
+        long elink_fapl_id = -1;
+        int efc_size = 0;
+        try {
+            H5.H5Pset_elink_fapl(plapl_id, fapl_id );
+            elink_fapl_id = H5.H5Pget_elink_fapl(plapl_id);
+            assertTrue("H5P_elink_file_cache_size", elink_fapl_id >= 0);
+            try {
+                efc_size = H5.H5Pget_elink_file_cache_size(elink_fapl_id);
+                assertTrue("H5P_elink_file_cache_size default", efc_size == 0);
+            }
+            catch (UnsupportedOperationException err) {
+                System.out.println(err.getMessage());
+            }
+            try {
+                efc_size = 8;
+                H5.H5Pset_elink_file_cache_size(elink_fapl_id, efc_size);
+                efc_size = H5.H5Pget_elink_file_cache_size(elink_fapl_id);
+                assertTrue("H5P_elink_file_cache_size 8", efc_size == 8);
+            }
+            catch (UnsupportedOperationException err) {
+                System.out.println(err.getMessage());
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_elink_file_cache_size: " + err);
+        }
+        finally {
+            if (elink_fapl_id > 0)
+                try {H5.H5Pclose(elink_fapl_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5P_btree_ratios() {
+        double[] left = {0.1};
+        double[] middle = {0.5};
+        double[] right = {0.7};
+        try {
+            H5.H5Pset_btree_ratios(plist_id, left[0], middle[0], right[0]);
+            H5.H5Pget_btree_ratios(plist_id, left, middle, right);
+            assertTrue("H5P_btree_ratios", left[0] == 0.1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_btree_ratios: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_edc_check() {
+        int ret_val_id = -1;
+        try {
+            ret_val_id = H5.H5Pget_edc_check(plist_id);
+            assertTrue("H5P_edc_check", ret_val_id == HDF5Constants.H5Z_ENABLE_EDC);
+            H5.H5Pset_edc_check(plist_id, HDF5Constants.H5Z_DISABLE_EDC);
+            ret_val_id = H5.H5Pget_edc_check(plist_id);
+            assertTrue("H5P_edc_check", ret_val_id == HDF5Constants.H5Z_DISABLE_EDC);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_edc_check: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_fclose_degree() {
+        int ret_val_id = -1;
+        try {
+            ret_val_id = H5.H5Pget_fclose_degree(fapl_id);
+            assertTrue("H5Pget_fclose_degree default", ret_val_id == HDF5Constants.H5F_CLOSE_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_fclose_degree: default " + err);
+        }
+        try {
+            H5.H5Pset_fclose_degree(fapl_id, HDF5Constants.H5F_CLOSE_STRONG);
+            ret_val_id = H5.H5Pget_fclose_degree(fapl_id);
+            assertTrue("H5Pget_fclose_degree", ret_val_id == HDF5Constants.H5F_CLOSE_STRONG);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_fclose_degree: H5F_CLOSE_STRONG " + err);
+        }
+        try {
+            H5.H5Pset_fclose_degree(fapl_id, HDF5Constants.H5F_CLOSE_SEMI);
+            ret_val_id = H5.H5Pget_fclose_degree(fapl_id);
+            assertTrue("H5Pget_fclose_degree", ret_val_id == HDF5Constants.H5F_CLOSE_SEMI);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_fclose_degree: H5F_CLOSE_SEMI " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_alignment() {
+        long[] align = {0,0};
+        try {
+            H5.H5Pget_alignment(fapl_id, align);
+            assertTrue("H5P_alignment threshold default", align[0] == 1);
+            assertTrue("H5P_alignment alignment default", align[1] == 1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_alignment: default " + err);
+        }
+        try {
+            align[0] = 1024;
+            align[1] = 2048;
+            H5.H5Pset_alignment(fapl_id, align[0], align[1]);
+            H5.H5Pget_alignment(fapl_id, align);
+            assertTrue("H5P_alignment threshold", align[0] == 1024);
+            assertTrue("H5P_alignment alignment", align[1] == 2048);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_alignment: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_meta_block_size() {
+        long meta_size = 0;
+        try {
+            meta_size = H5.H5Pget_meta_block_size(fapl_id);
+            assertTrue("H5P_meta_block_size default", meta_size == 2048);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_meta_block_size: default " + err);
+        }
+        try {
+            meta_size = 4096;
+            H5.H5Pset_meta_block_size(fapl_id, meta_size);
+            meta_size = H5.H5Pget_meta_block_size(fapl_id);
+            assertTrue("H5P_meta_block_size 4096", meta_size == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_meta_block_size: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_small_data_block_size() {
+        long align = 0;
+        try {
+            align = H5.H5Pget_small_data_block_size(fapl_id);
+            assertTrue("H5P_small_data_block_size default", align == 2048);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_small_data_block_size: default " + err);
+        }
+        try {
+            align = 4096;
+            H5.H5Pset_small_data_block_size(fapl_id, align);
+            align = H5.H5Pget_small_data_block_size(fapl_id);
+            assertTrue("H5P_small_data_block_size 4096", align == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_small_data_block_size: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_hyper_vector_size() {
+        long[] align = {0};
+        try {
+            H5.H5Pget_hyper_vector_size(plist_id, align);
+            assertTrue("H5P_hyper_vector_size default", align[0] == 1024);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_hyper_vector_size: default " + err);
+        }
+        try {
+            align[0] = 4096;
+            H5.H5Pset_hyper_vector_size(plist_id, align[0]);
+            H5.H5Pget_hyper_vector_size(plist_id, align);
+            assertTrue("H5P_hyper_vector_size 4096", align[0] == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_hyper_vector_size: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_cache() {
+        long[] rdcc_nelmts = {0};
+        long[] rdcc_nbytes = {0};
+        double[] rdcc_w0 = {0};
+        try {
+            H5.H5Pget_cache(fapl_id, null, rdcc_nelmts, rdcc_nbytes, rdcc_w0);
+            assertTrue("H5P_cache default", rdcc_nelmts[0] == 521);
+            assertTrue("H5P_cache default", rdcc_nbytes[0] == (1024*1024));
+            assertTrue("H5P_cache default", rdcc_w0[0] == 0.75);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_cache: default " + err);
+        }
+        try {
+            rdcc_nelmts[0] = 4096;
+            H5.H5Pset_cache(fapl_id, 0, rdcc_nelmts[0], rdcc_nbytes[0], rdcc_w0[0]);
+            H5.H5Pget_cache(fapl_id, null, rdcc_nelmts, rdcc_nbytes, rdcc_w0);
+            assertTrue("H5P_cache 4096", rdcc_nelmts[0] == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_cache: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_chunk_cache() {
+        long[] rdcc_nslots = {0};
+        long[] rdcc_nbytes = {0};
+        double[] rdcc_w0 = {0};
+        try {
+            H5.H5Pget_chunk_cache(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0);
+            assertTrue("H5P_chunk_cache default", rdcc_nslots[0] == 521);
+            assertTrue("H5P_chunk_cache default", rdcc_nbytes[0] == (1024*1024));
+            assertTrue("H5P_chunk_cache default", rdcc_w0[0] == 0.75);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_chunk_cache: default " + err);
+        }
+        try {
+            rdcc_nslots[0] = 4096;
+            H5.H5Pset_chunk_cache(dapl_id, rdcc_nslots[0], rdcc_nbytes[0], rdcc_w0[0]);
+            H5.H5Pget_chunk_cache(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0);
+            assertTrue("H5P_chunk_cache 4096", rdcc_nslots[0] == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_chunk_cache: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_sieve_buf_size() {
+        long buf_size = 0;
+        try {
+            buf_size = H5.H5Pget_sieve_buf_size(fapl_id);
+            assertTrue("H5P_sieve_buf_size default", buf_size == (64*1024));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_sieve_buf_size: default " + err);
+        }
+        try {
+            buf_size = 4096;
+            H5.H5Pset_sieve_buf_size(fapl_id, buf_size);
+            buf_size = H5.H5Pget_sieve_buf_size(fapl_id);
+            assertTrue("H5P_sieve_buf_size 4096", buf_size == 4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_sieve_buf_size: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_gc_references() {
+        boolean ret_val_id = false;
+        try {
+            H5.H5Pset_gc_references(fapl_id, true);
+            ret_val_id = H5.H5Pget_gc_references(fapl_id);
+            assertTrue("H5P_gc_references", ret_val_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5P_gc_references: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Pget_mdc_config() {
+        H5AC_cache_config_t cache_config = null;
+        try {
+            cache_config = H5.H5Pget_mdc_config(fapl_id);
+            assertTrue("H5Pget_mdc_config", cache_config.version==HDF5Constants.H5AC_CURR_CACHE_CONFIG_VERSION);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_mdc_config: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Pset_mdc_config() {
+        H5AC_cache_config_t cache_config = null;
+        try {
+            cache_config = H5.H5Pget_mdc_config(fapl_id);
+            assertTrue("H5Pset_mdc_config", cache_config.version==HDF5Constants.H5AC_CURR_CACHE_CONFIG_VERSION);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_mdc_config: " + err);
+        }
+        try {
+            cache_config.decr_mode = HDF5Constants.H5C_decr_off;
+            H5.H5Pset_mdc_config(fapl_id, cache_config);
+            cache_config = H5.H5Pget_mdc_config(fapl_id);
+            assertTrue("H5Pset_mdc_config", cache_config.version==HDF5Constants.H5AC_CURR_CACHE_CONFIG_VERSION);
+            assertTrue("H5Pset_mdc_config", cache_config.decr_mode==HDF5Constants.H5C_decr_off);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_mdc_config: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_fapl_core() {
+        if (HDF5Constants.H5FD_CORE < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_core(fapl_id, 4096, false);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: core = "+ driver_type, HDF5Constants.H5FD_CORE==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_core: " + err);
+        }
+        try {
+            long[] increment = {-1};
+            boolean[] backingstore = {true};
+            H5.H5Pget_fapl_core(fapl_id, increment, backingstore);
+            assertTrue("H5Pget_fapl_core: increment="+increment[0], increment[0]==4096);
+            assertTrue("H5Pget_fapl_core: backingstore="+backingstore[0], !backingstore[0]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_core: " + err);
+        }
+    }
+
+    @Test
+    public void testH5P_fapl_family() {
+        if (HDF5Constants.H5FD_FAMILY < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_family(fapl_id, 1024, HDF5Constants.H5P_DEFAULT);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: family = "+ driver_type, HDF5Constants.H5FD_FAMILY==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_family: " + err);
+        }
+        try {
+            long[] member_size = {0};
+            long[] member_fapl = {-1};
+            H5.H5Pget_fapl_family(fapl_id, member_size, member_fapl);
+            assertTrue("H5Pget_fapl_family: member_size="+member_size[0], member_size[0]==1024);
+            assertTrue("H5Pget_fapl_family: member_fapl ", H5.H5P_equal(member_fapl[0], HDF5Constants.H5P_FILE_ACCESS_DEFAULT));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_family: " + err);
+        }
+        _createH5familyFile(fapl_id);
+        deleteH5familyfile();
+    }
+
+    @Test
+    public void testH5P_family_offset() {
+        if (HDF5Constants.H5FD_FAMILY < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_family(fapl_id, 1024, HDF5Constants.H5P_DEFAULT);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: family = "+ driver_type, HDF5Constants.H5FD_FAMILY==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_family: " + err);
+        }
+        _createH5familyFile(fapl_id);
+        long family_offset = 512;
+        try {
+            H5.H5Pset_family_offset(fapl_id, family_offset);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_family: " + err);
+        }
+        try {
+            long offset = H5.H5Pget_family_offset(fapl_id);
+            assertTrue("H5Pget_fapl_family: offset="+offset, offset==family_offset);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_family: " + err);
+        }
+        deleteH5familyfile();
+    }
+
+    @Test
+    public void testH5Pset_fapl_sec2() {
+        if (HDF5Constants.H5FD_SEC2 < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_sec2(fapl_id);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: sec2 = "+ driver_type, HDF5Constants.H5FD_SEC2==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_sec2: " + err);
+        }
+        _createH5File(fapl_id);
+        deleteH5file();
+    }
+
+    @Test
+    public void testH5Pset_fapl_stdio() {
+        if (HDF5Constants.H5FD_STDIO < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_stdio(fapl_id);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: stdio = "+ driver_type, HDF5Constants.H5FD_STDIO==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_stdio: " + err);
+        }
+        _createH5File(fapl_id);
+        deleteH5file();
+    }
+
+    @Test
+    public void testH5Pset_fapl_log() {
+        if (HDF5Constants.H5FD_LOG < 0)
+            return;
+        try {
+            long log_flags = HDF5Constants.H5FD_LOG_LOC_IO;
+            H5.H5Pset_fapl_log(fapl_id, H5_LOG_FILE, log_flags, 1024);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: log = "+ driver_type, HDF5Constants.H5FD_LOG==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_log: " + err);
+        }
+        _createH5File(fapl_id);
+        deleteH5file();
+        _deleteLogFile();
+    }
+
+    @Test
+    public void testH5P_fapl_muti_nulls() {
+        if (HDF5Constants.H5FD_MULTI < 0)
+            return;
+
+        int[] member_map = null;
+        long[] member_fapl = null;
+        String[] member_name = null;
+        long[] member_addr = null;
+
+        try {
+            H5.H5Pset_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr, true);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: muti = "+ driver_type, HDF5Constants.H5FD_MULTI==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_muti: " + err);
+        }
+        try {
+            boolean relax = H5.H5Pget_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr);
+            assertTrue("H5Pget_fapl_muti: relax ", relax);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_muti: " + err);
+        }
+        _createH5multiFile(fapl_id);
+        deleteH5multifile();
+    }
+
+    @Test
+    public void testH5P_fapl_muti_defaults() {
+        if (HDF5Constants.H5FD_MULTI < 0)
+            return;
+        int H5FD_MEM_NTYPES = HDF5Constants.H5FD_MEM_NTYPES; // 7
+
+        long sH5FD_MEM_DEFAULT_HADDR = HDF5Constants.H5FD_DEFAULT_HADDR_SIZE;
+        long sH5FD_MEM_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_SIZE;
+        long sH5FD_MEM_SUPER_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_SUPER_SIZE;
+        long sH5FD_MEM_BTREE_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_BTREE_SIZE;
+        long sH5FD_MEM_DRAW_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_DRAW_SIZE;
+        long sH5FD_MEM_GHEAP_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_GHEAP_SIZE;
+        long sH5FD_MEM_LHEAP_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_LHEAP_SIZE;
+        long sH5FD_MEM_OHDR_HADDR = HDF5Constants.H5FD_MEM_DEFAULT_OHDR_SIZE;
+        int[] member_map = null;
+        long[] member_fapl = null;
+        String[] member_name = null;
+        long[] member_addr = null;
+
+        try {
+            H5.H5Pset_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr, true);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: muti = "+ driver_type, HDF5Constants.H5FD_MULTI==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_muti: " + err);
+        }
+        try {
+            member_map = new int[HDF5Constants.H5FD_MEM_NTYPES];
+            member_fapl = new long[HDF5Constants.H5FD_MEM_NTYPES];
+            member_name = new String[HDF5Constants.H5FD_MEM_NTYPES];
+            member_addr = new long[HDF5Constants.H5FD_MEM_NTYPES];
+            boolean relax = H5.H5Pget_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr);
+            assertTrue("H5Pget_fapl_muti: relax ", relax);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_DEFAULT], member_map[HDF5Constants.H5FD_MEM_DEFAULT] == HDF5Constants.H5FD_MEM_DEFAULT);
+            assertTrue("H5Pget_fapl_muti: member_fapl ", H5.H5P_equal(member_fapl[HDF5Constants.H5FD_MEM_DEFAULT], HDF5Constants.H5P_FILE_ACCESS_DEFAULT));
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_DEFAULT], member_name[HDF5Constants.H5FD_MEM_DEFAULT].compareTo("%s-X.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_SUPER], member_name[HDF5Constants.H5FD_MEM_SUPER].compareTo("%s-s.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_BTREE], member_name[HDF5Constants.H5FD_MEM_BTREE].compareTo("%s-b.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_DRAW], member_name[HDF5Constants.H5FD_MEM_DRAW].compareTo("%s-r.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DEFAULT], member_addr[HDF5Constants.H5FD_MEM_DEFAULT] == sH5FD_MEM_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_SUPER], member_addr[HDF5Constants.H5FD_MEM_SUPER] == sH5FD_MEM_SUPER_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_BTREE], member_addr[HDF5Constants.H5FD_MEM_BTREE] == sH5FD_MEM_BTREE_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DRAW], member_addr[HDF5Constants.H5FD_MEM_DRAW] == sH5FD_MEM_DRAW_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_GHEAP], member_addr[HDF5Constants.H5FD_MEM_GHEAP] == sH5FD_MEM_GHEAP_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_LHEAP], member_addr[HDF5Constants.H5FD_MEM_LHEAP] == sH5FD_MEM_LHEAP_HADDR);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_OHDR], member_addr[HDF5Constants.H5FD_MEM_OHDR] == sH5FD_MEM_OHDR_HADDR);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_muti: " + err);
+        }
+        _createH5multiFile(fapl_id);
+        _createH5multiFileDS();
+        deleteH5multifile();
+    }
+
+    @Test
+    public void testH5P_fapl_muti() {
+        if (HDF5Constants.H5FD_MULTI < 0)
+            return;
+        long HADDR_DEFAULT_SIZE = HDF5Constants.H5FD_DEFAULT_HADDR_SIZE;
+        int[] member_map = new int[HDF5Constants.H5FD_MEM_NTYPES];
+        long[] member_fapl = new long[HDF5Constants.H5FD_MEM_NTYPES];
+        String[] member_name = new String[HDF5Constants.H5FD_MEM_NTYPES];
+        long[] member_addr = new long[HDF5Constants.H5FD_MEM_NTYPES];
+
+        for(int mt=HDF5Constants.H5FD_MEM_DEFAULT; mt<HDF5Constants.H5FD_MEM_NTYPES; mt++) {
+            member_fapl[mt] = HDF5Constants.H5P_DEFAULT;
+            member_map[mt] = HDF5Constants.H5FD_MEM_SUPER;
+        }
+        member_map[HDF5Constants.H5FD_MEM_DRAW] = HDF5Constants.H5FD_MEM_DRAW;
+        member_map[HDF5Constants.H5FD_MEM_BTREE] = HDF5Constants.H5FD_MEM_BTREE;
+        member_map[HDF5Constants.H5FD_MEM_GHEAP] = HDF5Constants.H5FD_MEM_GHEAP;
+
+        member_name[HDF5Constants.H5FD_MEM_SUPER] = new String("%s-super.h5");
+        member_addr[HDF5Constants.H5FD_MEM_SUPER] = 0;
+
+        member_name[HDF5Constants.H5FD_MEM_BTREE] = new String("%s-btree.h5");
+        member_addr[HDF5Constants.H5FD_MEM_BTREE] = HADDR_DEFAULT_SIZE/4;
+
+        member_name[HDF5Constants.H5FD_MEM_DRAW] = new String("%s-draw.h5");
+        member_addr[HDF5Constants.H5FD_MEM_DRAW] = HADDR_DEFAULT_SIZE/2;
+
+        member_name[HDF5Constants.H5FD_MEM_GHEAP] = new String("%s-gheap.h5");
+        member_addr[HDF5Constants.H5FD_MEM_GHEAP] = (HADDR_DEFAULT_SIZE/4)*3;
+
+        try {
+            H5.H5Pset_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr, true);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: muti = "+ driver_type, HDF5Constants.H5FD_MULTI==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_muti: " + err);
+        }
+        try {
+            boolean relax = H5.H5Pget_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr);
+            assertTrue("H5Pget_fapl_muti: relax ", relax);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_DEFAULT], member_map[HDF5Constants.H5FD_MEM_DEFAULT] == HDF5Constants.H5FD_MEM_SUPER);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_DRAW], member_map[HDF5Constants.H5FD_MEM_DRAW] == HDF5Constants.H5FD_MEM_DRAW);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_BTREE], member_map[HDF5Constants.H5FD_MEM_BTREE] == HDF5Constants.H5FD_MEM_BTREE);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_GHEAP], member_map[HDF5Constants.H5FD_MEM_GHEAP] == HDF5Constants.H5FD_MEM_GHEAP);
+
+            assertTrue("H5Pget_fapl_muti: member_fapl ", H5.H5P_equal(member_fapl[HDF5Constants.H5FD_MEM_DEFAULT], HDF5Constants.H5P_FILE_ACCESS_DEFAULT));
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DEFAULT], member_addr[HDF5Constants.H5FD_MEM_DEFAULT] == 0);
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_SUPER], member_name[HDF5Constants.H5FD_MEM_SUPER].compareTo("%s-super.h5")==0);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_BTREE], member_name[HDF5Constants.H5FD_MEM_BTREE].compareTo("%s-btree.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_BTREE], member_addr[HDF5Constants.H5FD_MEM_BTREE] == HADDR_DEFAULT_SIZE/4);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_DRAW], member_name[HDF5Constants.H5FD_MEM_DRAW].compareTo("%s-draw.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DRAW], member_addr[HDF5Constants.H5FD_MEM_DRAW] == HADDR_DEFAULT_SIZE/2);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_GHEAP], member_name[HDF5Constants.H5FD_MEM_GHEAP].compareTo("%s-gheap.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_GHEAP], member_addr[HDF5Constants.H5FD_MEM_GHEAP] == (HADDR_DEFAULT_SIZE/4)*3);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_muti: " + err);
+        }
+        _createH5multiFile(fapl_id);
+        try {
+            long file_size = H5.H5Fget_filesize(H5fid);
+            assertTrue("H5Pget_fapl_muti: file_size ", file_size >= HADDR_DEFAULT_SIZE/4 || file_size <= HADDR_DEFAULT_SIZE/2);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_muti:H5Fget_filesize " + err);
+        }
+        _createH5multiFileDS();
+        deleteH5multifile();
+        File file = new File(H5_MULTI_FILE+"-super.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-btree.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-draw.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-gheap.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+    }
+
+    @Test
+    public void testH5P_fapl_split() {
+        if (HDF5Constants.H5FD_MULTI < 0)
+            return;
+
+        try {
+            H5.H5Pset_fapl_split(fapl_id, "-meta.h5", HDF5Constants.H5P_DEFAULT, "-raw.h5", HDF5Constants.H5P_DEFAULT);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: split = "+ driver_type, HDF5Constants.H5FD_MULTI==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_split: " + err);
+        }
+        try {
+            int[] member_map = new int[HDF5Constants.H5FD_MEM_NTYPES];
+            long[] member_fapl = new long[HDF5Constants.H5FD_MEM_NTYPES];
+            String[] member_name = new String[HDF5Constants.H5FD_MEM_NTYPES];
+            long[] member_addr = new long[HDF5Constants.H5FD_MEM_NTYPES];
+            boolean relax = H5.H5Pget_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr);
+            assertTrue("H5Pget_fapl_multi: relax ", relax);
+            assertTrue("H5Pget_fapl_multi: member_name="+member_name[HDF5Constants.H5FD_MEM_SUPER], member_name[HDF5Constants.H5FD_MEM_SUPER].compareTo("%s-meta.h5")==0);
+            assertTrue("H5Pget_fapl_multi: member_name="+member_name[HDF5Constants.H5FD_MEM_DRAW], member_name[HDF5Constants.H5FD_MEM_DRAW].compareTo("%s-raw.h5")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_split: " + err);
+        }
+        _createH5multiFile(fapl_id);
+        deleteH5multifile();
+        File file = new File(H5_MULTI_FILE+"-meta.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-raw.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+    }
+
+    @Test
+    public void testH5P_fapl_direct() {
+        if (HDF5Constants.H5FD_DIRECT < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_direct(fapl_id, 1024, 4096, 8*4096);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: direct = "+ driver_type, HDF5Constants.H5FD_DIRECT==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_direct: " + err);
+        }
+        try {
+            long[] params = {-1, -1, -1};
+            H5.H5Pget_fapl_direct(fapl_id, params);
+            assertTrue("H5Pget_fapl_direct: alignment="+params[0], params[0]==1024);
+            assertTrue("H5Pget_fapl_direct: block_size="+params[1], params[1]==4096);
+            assertTrue("H5Pget_fapl_direct: cbuf_size="+params[2], params[2]==8*4096);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_direct: " + err);
+        }
+        _createH5File(fapl_id);
+        deleteH5file();
+    }
+
+    @Test
+    public void testH5Pset_fapl_windows() {
+        if (HDF5Constants.H5FD_WINDOWS < 0)
+            return;
+        try {
+            H5.H5Pset_fapl_windows(fapl_id);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: windows = "+ driver_type, HDF5Constants.H5FD_WINDOWS==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_windows: " + err);
+        }
+        _createH5File(fapl_id);
+        deleteH5file();
+    }
+
+    @Test
+    public void testH5Pmulti_transform() {
+        if (HDF5Constants.H5FD_MULTI < 0)
+            return;
+        String f_to_c = "(5/9.0)*(x-32)";
+        double windchillFread[][] = new double[DIMF_X][DIMF_Y];
+        double windchillC;
+        NumberFormat formatter = new DecimalFormat("#0.000");
+        long HADDRMAX = HDF5Constants.H5FD_DEFAULT_HADDR_SIZE;
+
+        int[] member_map = new int[HDF5Constants.H5FD_MEM_NTYPES];
+        long[] member_fapl = new long[HDF5Constants.H5FD_MEM_NTYPES];
+        String[] member_name = new String[HDF5Constants.H5FD_MEM_NTYPES];
+        long[] member_addr = new long[HDF5Constants.H5FD_MEM_NTYPES];
+
+        try {
+            H5.H5Pset_data_transform(plist_id, f_to_c);
+            H5.H5Pset_btree_ratios(btplist_id, 0.1, 0.5, 0.7);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pdata_transform: " + err);
+        }
+
+        for(int mt=HDF5Constants.H5FD_MEM_DEFAULT; mt<HDF5Constants.H5FD_MEM_NTYPES; mt++) {
+            member_fapl[mt] = HDF5Constants.H5P_DEFAULT;
+            member_map[mt] = HDF5Constants.H5FD_MEM_SUPER;
+        }
+        member_map[HDF5Constants.H5FD_MEM_DRAW] = HDF5Constants.H5FD_MEM_DRAW;
+        member_map[HDF5Constants.H5FD_MEM_BTREE] = HDF5Constants.H5FD_MEM_BTREE;
+        member_map[HDF5Constants.H5FD_MEM_GHEAP] = HDF5Constants.H5FD_MEM_GHEAP;
+
+        member_name[HDF5Constants.H5FD_MEM_SUPER] = new String("%s-super.h5");
+        member_addr[HDF5Constants.H5FD_MEM_SUPER] = 0;
+
+        member_name[HDF5Constants.H5FD_MEM_BTREE] = new String("%s-btree.h5");
+        member_addr[HDF5Constants.H5FD_MEM_BTREE] = HADDRMAX/4;
+
+        member_name[HDF5Constants.H5FD_MEM_DRAW] = new String("%s-draw.h5");
+        member_addr[HDF5Constants.H5FD_MEM_DRAW] = HADDRMAX/2;
+
+        member_name[HDF5Constants.H5FD_MEM_GHEAP] = new String("%s-gheap.h5");
+        member_addr[HDF5Constants.H5FD_MEM_GHEAP] = (HADDRMAX/4)*3;
+
+        try {
+            H5.H5Pset_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr, true);
+            long driver_type = H5.H5Pget_driver(fapl_id);
+            assertTrue("H5Pget_driver: muti = "+ driver_type, HDF5Constants.H5FD_MULTI==driver_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_fapl_muti: " + err);
+        }
+        try {
+            boolean relax = H5.H5Pget_fapl_multi(fapl_id, member_map, member_fapl, member_name, member_addr);
+            assertTrue("H5Pget_fapl_muti: relax ", relax);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_DEFAULT], member_map[HDF5Constants.H5FD_MEM_DEFAULT] == HDF5Constants.H5FD_MEM_SUPER);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_DRAW], member_map[HDF5Constants.H5FD_MEM_DRAW] == HDF5Constants.H5FD_MEM_DRAW);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_BTREE], member_map[HDF5Constants.H5FD_MEM_BTREE] == HDF5Constants.H5FD_MEM_BTREE);
+            assertTrue("H5Pget_fapl_muti: member_map="+member_map[HDF5Constants.H5FD_MEM_GHEAP], member_map[HDF5Constants.H5FD_MEM_GHEAP] == HDF5Constants.H5FD_MEM_GHEAP);
+
+            assertTrue("H5Pget_fapl_muti: member_fapl ", H5.H5P_equal(member_fapl[HDF5Constants.H5FD_MEM_DEFAULT], HDF5Constants.H5P_FILE_ACCESS_DEFAULT));
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DEFAULT], member_addr[HDF5Constants.H5FD_MEM_DEFAULT] == 0);
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_SUPER], member_name[HDF5Constants.H5FD_MEM_SUPER].compareTo("%s-super.h5")==0);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_BTREE], member_name[HDF5Constants.H5FD_MEM_BTREE].compareTo("%s-btree.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_BTREE], member_addr[HDF5Constants.H5FD_MEM_BTREE] == HADDRMAX/4);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_DRAW], member_name[HDF5Constants.H5FD_MEM_DRAW].compareTo("%s-draw.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_DRAW], member_addr[HDF5Constants.H5FD_MEM_DRAW] == HADDRMAX/2);
+
+            assertTrue("H5Pget_fapl_muti: member_name="+member_name[HDF5Constants.H5FD_MEM_GHEAP], member_name[HDF5Constants.H5FD_MEM_GHEAP].compareTo("%s-gheap.h5")==0);
+            assertTrue("H5Pget_fapl_muti: member_addr="+member_addr[HDF5Constants.H5FD_MEM_GHEAP], member_addr[HDF5Constants.H5FD_MEM_GHEAP] == (HADDRMAX/4)*3);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_fapl_muti: " + err);
+        }
+        try {
+            _createH5multiFile(fapl_id);
+            long file_size = H5.H5Fget_filesize(H5fid);
+            assertTrue("H5Pget_fapl_muti: file_size ", file_size >= HADDRMAX/4 || file_size <= HADDRMAX/2);
+            _createH5multiFileDS();
+            _createFloatDataset();
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pdata_transform: " + err);
+        }
+        try {
+            H5.H5Dwrite(H5Fdid, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    plist_id, windchillF);
+            H5.H5Dread(H5Fdid, HDF5Constants.H5T_NATIVE_DOUBLE, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+                    HDF5Constants.H5P_DEFAULT, windchillFread);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pdata_transform: " + err);
+        }
+        for(int row = 0; row < DIMF_X; row++) {
+            for(int col = 0; col < DIMF_Y; col++) {
+                windchillC = (5/9.0)*(windchillF[row][col]-32);
+                String Cstr = formatter.format(windchillC);
+                String Fread = formatter.format(windchillFread[row][col]);
+                assertTrue("H5Pdata_transform: <"+row+","+col+">"+Fread+"="+Cstr, Fread.compareTo(Cstr)==0);
+            }
+        }
+        deleteH5multifile();
+        File file = new File(H5_MULTI_FILE+"-super.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-btree.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-draw.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+        file = new File(H5_MULTI_FILE+"-gheap.h5");
+        if (file.exists()) {
+            try {
+                file.delete();
+            }
+            catch (SecurityException e) {
+                ;// e.printStackTrace();
+            }
+        }
+    }
+
+    @Test
+    public void testH5Fmdc_logging() {
+        boolean[] mdc_logging_status = {false, false};
+        boolean[] mdc_log_options = {false, false};
+
+        try {
+            boolean is_enabled = true;
+            boolean start_on_access = false;
+            H5.H5Pset_mdc_log_options(fapl_id, is_enabled, H5_LOG_FILE, start_on_access);
+
+            String location = H5.H5Pget_mdc_log_options(fapl_id, mdc_log_options);
+            assertTrue("H5.H5Pget_mdc_log_options: is_enabled", mdc_log_options[0]);
+            assertFalse("H5.H5Pget_mdc_log_options: start_on_access_out", mdc_log_options[1]);
+
+            H5.H5Pset_libver_bounds(fapl_id, HDF5Constants.H5F_LIBVER_LATEST, HDF5Constants.H5F_LIBVER_LATEST);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("mdc_log_option: " + err);
+        }
+        _createH5File(fapl_id);
+
+        try {
+            H5.H5Fget_mdc_logging_status(H5fid, mdc_logging_status);
+        }
+        catch (Throwable err) {
+            fail("H5.H5Fget_mdc_logging_status: " + err);
+        }
+        assertTrue("initial: is_enabled", mdc_logging_status[0]);
+        assertFalse("initial: is_currently_logging", mdc_logging_status[1]);
+
+        try {
+            H5.H5Fstart_mdc_logging(H5fid);
+            H5.H5Fget_mdc_logging_status(H5fid, mdc_logging_status);
+        }
+        catch (Throwable err) {
+            fail("start H5.H5Fget_mdc_logging_status: " + err);
+        }
+        assertTrue("start: is_enabled", mdc_logging_status[0]);
+        assertTrue("start: is_currently_logging", mdc_logging_status[1]);
+
+        try {
+            H5.H5Fstop_mdc_logging(H5fid);
+            H5.H5Fget_mdc_logging_status(H5fid, mdc_logging_status);
+        }
+        catch (Throwable err) {
+            fail("stop H5.H5Fget_mdc_logging_status: " + err);
+        }
+//        assertFalse("stop: is_enabled", mdc_logging_status[0]);
+        assertFalse("stop: is_currently_logging", mdc_logging_status[1]);
+
+        deleteH5file();
+        _deleteLogFile();
+    }
+}
diff --git a/java/test/TestH5Plist.java b/java/test/TestH5Plist.java
new file mode 100644
index 0000000..024237a
--- /dev/null
+++ b/java/test/TestH5Plist.java
@@ -0,0 +1,1013 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.ArrayList;
+import java.io.File;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.nio.charset.StandardCharsets;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.HDFNativeData;
+import hdf.hdf5lib.callbacks.H5P_cls_close_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_close_func_t;
+import hdf.hdf5lib.callbacks.H5P_cls_copy_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_copy_func_t;
+import hdf.hdf5lib.callbacks.H5P_cls_create_func_cb;
+import hdf.hdf5lib.callbacks.H5P_cls_create_func_t;
+import hdf.hdf5lib.callbacks.H5P_prp_set_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_get_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_delete_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_copy_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_compare_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_close_func_cb;
+import hdf.hdf5lib.callbacks.H5P_prp_create_func_cb;
+import hdf.hdf5lib.callbacks.H5P_iterate_cb;
+import hdf.hdf5lib.callbacks.H5P_iterate_t;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+import hdf.hdf5lib.structs.H5AC_cache_config_t;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Plist {
+    @Rule public TestName testname = new TestName();
+
+    // Property definitions
+    private static final String CLASS1_NAME = "Class 1";
+    private static final String CLASS1_PATH = "root/Class 1";
+
+    private static final String CLASS2_NAME = "Class 2";
+    private static final String CLASS2_PATH = "root/Class 1/Class 2";
+
+    // Property definitions
+    private static final String PROP1_NAME = "Property 1";
+    private static final int    prop1_def = 10;   // Property 1 default value
+    private static final int    PROP1_SIZE = 2;
+
+    private static final String PROP2_NAME = "Property 2";
+    private static final float  prop2_def = 3.14F;   // Property 2 default value
+    private static final int    PROP2_SIZE = 8;
+
+    private static final String PROP3_NAME  = "Property 3";
+    private static final char[] prop3_def = {'T','e','n',' ','c','h','a','r','s',' '};   // Property 3 default value
+    private static final int    PROP3_SIZE = 10;
+
+    private static final String PROP4_NAME  = "Property 4";
+    private static final double prop4_def = 1.41F;   // Property 4 default value
+    private static final int    PROP4_SIZE = 8;
+
+    private static final String [] pnames = { // Names of properties for iterator
+            PROP1_NAME,
+            PROP2_NAME,
+            PROP3_NAME,
+            PROP4_NAME};
+
+    long plist_class_id = -1;
+
+    @Before
+    public void createPropClass()throws NullPointerException, HDF5Exception
+    {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        // Create a new generic class, derived from the root of the class hierarchy
+        try {
+            plist_class_id = H5.H5Pcreate_class_nocb(HDF5Constants.H5P_ROOT, CLASS1_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Plist.H5Pcreate_class: " + err);
+        }
+        assertTrue(plist_class_id > 0);
+    }
+
+    @After
+    public void deleteFileAccess() throws HDF5LibraryException {
+        if (plist_class_id > 0)
+            try {H5.H5Pclose(plist_class_id);} catch (Exception ex) {}
+        System.out.println();
+    }
+
+    // Test basic generic property list code. Tests creating new generic classes.
+    @Test
+    public void testH5P_genprop_basic_class() {
+        int         status = -1;
+        long        cid1 = -1;        // Generic Property class ID
+        long        cid2 = -1;        // Generic Property class ID
+        long        cid3 = -1;        // Generic Property class ID
+        String      name = null;       // Name of class
+
+        try {
+            // Check class name
+            try {
+                name = H5.H5Pget_class_name(plist_class_id);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_class_name plist_class_id: " + err);
+            }
+            assertTrue("Class names don't match!, "+name+"="+CLASS1_NAME+"\n", name.compareTo(CLASS1_NAME)==0);
+
+            // Check class parent
+            try {
+                cid2 = H5.H5Pget_class_parent(plist_class_id);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_class_parent cid2: " + err);
+            }
+
+            // Verify class parent correct
+            try {
+                status = H5.H5Pequal(cid2, HDF5Constants.H5P_ROOT);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pequal cid2: " + err);
+            }
+            assertTrue("H5Pequal cid2", status >= 0);
+
+            // Make certain false postives aren't being returned
+            try {
+                status = H5.H5Pequal(cid2, HDF5Constants.H5P_FILE_CREATE);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pequal cid2: " + err);
+            }
+            assertTrue("H5Pequal cid2", status >= 0);
+
+            // Close parent class
+            try {
+                H5.H5Pclose_class(cid2);
+                cid2 = -1;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pclose_class cid2: " + err);
+            }
+
+            // Close class
+            try {
+                H5.H5Pclose_class(plist_class_id);
+                plist_class_id = -1;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pclose_class plist_class_id: " + err);
+            }
+
+            // Create another new generic class, derived from file creation class
+            try {
+                cid1 = H5.H5Pcreate_class_nocb(HDF5Constants.H5P_FILE_CREATE, CLASS2_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pcreate_class cid1: " + err);
+            }
+            assertTrue("H5Pcreate_class cid1", cid1 >= 0);
+
+            // Check class name
+            try {
+                name = H5.H5Pget_class_name(cid1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_class_name cid1: " + err);
+            }
+            assertTrue("Class names don't match!, "+name+"="+CLASS2_NAME+"\n", name.compareTo(CLASS2_NAME)==0);
+
+            // Check class parent
+            try {
+                cid2 = H5.H5Pget_class_parent(cid1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_class_parent cid2: " + err);
+            }
+            assertTrue("H5Pget_class_parent cid2 ", cid2 >= 0);
+
+            // Verify class parent correct
+            try {
+                status = H5.H5Pequal(cid2, HDF5Constants.H5P_FILE_CREATE);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pequal cid2: " + err);
+            }
+            assertTrue("H5Pequal cid2 ", status >= 0);
+
+            // Check class parent's parent
+            try {
+                cid3 = H5.H5Pget_class_parent(cid2);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_class_parent cid3: " + err);
+            }
+            assertTrue("H5Pget_class_parent cid3", cid3 >= 0);
+
+            // Verify class parent's parent correct
+            try {
+                status = H5.H5Pequal(cid3, HDF5Constants.H5P_GROUP_CREATE);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pequal cid3: " + err);
+            }
+            assertTrue("H5Pequal cid3 ", status >= 0);
+
+            // Close parent class's parent
+            try {
+                H5.H5Pclose_class(cid3);
+                cid3 = -1;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pclose_class cid3: " + err);
+            }
+
+            // Close parent class's parent
+            try {
+                H5.H5Pclose_class(cid2);
+                cid2 = -1;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pclose_class cid2: " + err);
+            }
+
+            // Close parent class's parent
+            try {
+                H5.H5Pclose_class(cid1);
+                cid1 = -1;
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pclose_class cid1: " + err);
+            }
+        }
+        finally {
+            if (cid3 > 0)
+                try {H5.H5Pclose_class(cid3);} catch (Throwable err) {}
+            if (cid2 > 0)
+                try {H5.H5Pclose_class(cid2);} catch (Throwable err) {}
+            if (cid1 > 0)
+                try {H5.H5Pclose_class(cid1);} catch (Throwable err) {}
+        }
+    }
+
+    // Test basic generic property list code. Tests adding properties to generic classes.
+    @Test
+    public void testH5P_genprop_basic_class_prop() {
+        boolean     status = false;
+        long        size = -1;        // Generic Property size
+        long        nprops = -1;      // Generic Property class number
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==0);
+
+        // Check the existance of the first property (should fail)
+        try {
+            status = H5.H5Pexist(plist_class_id, PROP1_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pexist plist_class_id: " + err);
+        }
+        assertFalse("H5Pexist plist_class_id "+PROP1_NAME, status);
+
+        // Insert first property into class (with no callbacks)
+        try {
+            byte[] prop_value = HDFNativeData.intToByte(prop1_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP1_NAME, PROP1_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP1_NAME + err);
+        }
+
+        // Try to insert the first property again (should fail)
+        try {
+            byte[] prop_value = HDFNativeData.intToByte(prop1_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP1_NAME, PROP1_SIZE, prop_value);
+            fail("H5Pregister2 plist_class_id: "+PROP1_NAME);
+        }
+        catch (Throwable err) {
+        }
+
+        // Check the existance of the first property
+        try {
+            status = H5.H5Pexist(plist_class_id, PROP1_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pexist plist_class_id: " + err);
+        }
+        assertTrue("H5Pexist plist_class_id "+PROP1_NAME, status);
+
+        // Check the size of the first property
+        try {
+            size = H5.H5Pget_size(plist_class_id, PROP1_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_size PROP1_NAME: " + err);
+        }
+        assertTrue("H5Pget_size "+PROP1_NAME +" size: "+size, size == PROP1_SIZE);
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==1);
+
+        // Insert second property into class (with no callbacks)
+        try {
+            byte[] prop_value = HDFNativeData.floatToByte(prop2_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP2_NAME, PROP2_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP2_NAME + err);
+        }
+
+        // Try to insert the second property again (should fail)
+        try {
+            byte[] prop_value = HDFNativeData.floatToByte(prop2_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP2_NAME, PROP2_SIZE, prop_value);
+            fail("H5Pregister2 plist_class_id: "+PROP2_NAME);
+        }
+        catch (Throwable err) {
+        }
+
+        // Check the existance of the second property
+        try {
+            status = H5.H5Pexist(plist_class_id, PROP2_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pexist plist_class_id: " + err);
+        }
+        assertTrue("H5Pexist plist_class_id "+PROP2_NAME, status);
+
+        // Check the size of the second property
+        try {
+            size = H5.H5Pget_size(plist_class_id, PROP2_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_size PROP2_NAME: " + err);
+        }
+        assertTrue("H5Pget_size "+PROP2_NAME +" size: "+size, size == PROP2_SIZE);
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==2);
+
+        // Insert third property into class (with no callbacks)
+        try {
+            byte[] prop_value = new String(prop3_def).getBytes(StandardCharsets.UTF_8);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP3_NAME, PROP3_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP3_NAME + err);
+        }
+
+        // Check the existance of the third property
+        try {
+            status = H5.H5Pexist(plist_class_id, PROP3_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pexist plist_class_id: " + err);
+        }
+        assertTrue("H5Pexist plist_class_id "+PROP3_NAME, status);
+
+        // Check the size of the third property
+        try {
+            size = H5.H5Pget_size(plist_class_id, PROP3_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_size PROP3_NAME: " + err);
+        }
+        assertTrue("H5Pget_size "+PROP3_NAME +" size: "+size, size == PROP3_SIZE);
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==3);
+
+        // Unregister first property
+        try {
+            H5.H5Punregister(plist_class_id, PROP1_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Punregister plist_class_id: "+PROP1_NAME + err);
+        }
+
+        // Try to check the size of the first property (should fail)
+        try {
+            size = H5.H5Pget_size(plist_class_id, PROP1_NAME);
+            fail("H5Pget_size PROP1_NAME");
+        }
+        catch (Throwable err) {
+        }
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==2);
+
+        // Unregister second property
+        try {
+            H5.H5Punregister(plist_class_id, PROP2_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Punregister plist_class_id: "+PROP2_NAME + err);
+        }
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==1);
+
+        // Unregister third property
+        try {
+            H5.H5Punregister(plist_class_id, PROP3_NAME);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Punregister plist_class_id: "+PROP3_NAME + err);
+        }
+
+        // Check the number of properties in class
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==0);
+    }
+
+    // Test basic generic property list code. Tests iterating over properties in a generic class.
+    @Test
+    public void testH5P_genprop_class_iter() {
+        class idata {
+            public String[] iter_names= null;
+            public int iter_count = -1;
+            idata(String[] names, int count) {
+                this.iter_names = names;
+                this.iter_count = count;
+            }
+        }
+        class H5P_iter_data implements H5P_iterate_t {
+            public ArrayList<idata> iterdata = new ArrayList<idata>();
+        }
+        H5P_iterate_t iter_data = new H5P_iter_data();
+
+        class H5P_iter_callback implements H5P_iterate_cb {
+            public int callback(long list_id, String name, H5P_iterate_t op_data) {
+                idata id = ((H5P_iter_data)op_data).iterdata.get(0);
+                return name.compareTo(id.iter_names[id.iter_count++]);
+            }
+        }
+        H5P_iterate_cb iter_cb = new H5P_iter_callback();
+
+        long        size = -1;        // Generic Property size
+        long        nprops = -1;      // Generic Property class number
+        int[]       idx = {0};        // Index to start iteration at
+
+        // Insert first property into class (with no callbacks) */
+        try {
+            byte[] prop_value = HDFNativeData.intToByte(prop1_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP1_NAME, PROP1_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP1_NAME + err);
+        }
+
+        // Insert second property into class (with no callbacks) */
+        try {
+            byte[] prop_value = HDFNativeData.floatToByte(prop2_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP2_NAME, PROP2_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP2_NAME + err);
+        }
+
+        // Insert third property into class (with no callbacks) */
+        try {
+            byte[] prop_value = new String(prop3_def).getBytes(StandardCharsets.UTF_8);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP3_NAME, PROP3_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP3_NAME + err);
+        }
+
+        // Insert fourth property into class (with no callbacks) */
+        try {
+            byte[] prop_value = HDFNativeData.doubleToByte(prop4_def);
+
+            H5.H5Pregister2_nocb(plist_class_id, PROP4_NAME, PROP4_SIZE, prop_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pregister2 plist_class_id: "+PROP4_NAME + err);
+        }
+
+        // Check the number of properties in class */
+        try {
+            nprops = H5.H5Pget_nprops(plist_class_id);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pget_nprops plist_class_id: " + err);
+        }
+        assertTrue("H5Pget_nprops: "+nprops, nprops==4);
+
+        // Iterate over all properties in class */
+        idata id = new idata(pnames, 0);
+        ((H5P_iter_data)iter_data).iterdata.add(id);
+        try {
+            H5.H5Piterate(plist_class_id, null, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Piterate: " + err);
+        }
+        assertFalse("H5Piterate ",((H5P_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Piterate "+((H5P_iter_data)iter_data).iterdata.size(),((H5P_iter_data)iter_data).iterdata.size()==1);
+        assertTrue("H5Piterate "+(((H5P_iter_data)iter_data).iterdata.get(0)).iter_count,((idata)((H5P_iter_data)iter_data).iterdata.get(0)).iter_count==4);
+
+        // Iterate over last three properties in class */
+        idx[0] = 1;
+        ((H5P_iter_data)iter_data).iterdata.get(0).iter_count = 1;
+        try {
+            H5.H5Piterate(plist_class_id, idx, iter_cb, iter_data);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Piterate: " + err);
+        }
+        assertFalse("H5Piterate ",((H5P_iter_data)iter_data).iterdata.isEmpty());
+        assertTrue("H5Piterate "+((H5P_iter_data)iter_data).iterdata.size(),((H5P_iter_data)iter_data).iterdata.size()==1);
+        assertTrue("H5Piterate "+(((H5P_iter_data)iter_data).iterdata.get(0)).iter_count,((idata)((H5P_iter_data)iter_data).iterdata.get(0)).iter_count==4);
+
+        assertTrue("H5Piterate: "+nprops+"="+idx[0], nprops == idx[0]);
+    }
+
+    // Test basic generic property list code.
+    //      Tests creating new generic property lists and adding and
+    //      removing properties from them.
+    @Test
+    public void testH5P_genprop_basic_list_prop() {
+        boolean     status = false;
+        long        lid1 = -1;        // Generic Property list ID
+        long        nprops = -1;      // Number of properties in class
+
+        try {
+            // Add several properties (several w/default values)
+
+            // Insert first property into class (with no callbacks)
+            try {
+                byte[] prop_value = HDFNativeData.intToByte(prop1_def);
+
+                H5.H5Pregister2_nocb(plist_class_id, PROP1_NAME, PROP1_SIZE, prop_value);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pregister2 plist_class_id: "+PROP1_NAME + err);
+            }
+
+            // Insert second property into class (with no callbacks)
+            try {
+                byte[] prop_value = HDFNativeData.floatToByte(prop2_def);
+
+                H5.H5Pregister2_nocb(plist_class_id, PROP2_NAME, PROP2_SIZE, prop_value);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pregister2 plist_class_id: "+PROP2_NAME + err);
+            }
+
+            // Create a property list from the class
+            try {
+                lid1 = H5.H5Pcreate(plist_class_id);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pcreate lid1: " + err);
+            }
+
+            // Check the number of properties in class
+            try {
+                nprops = H5.H5Pget_nprops(lid1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_nprops lid1: " + err);
+            }
+            assertTrue("H5Pget_nprops: "+nprops, nprops==2);
+
+            // Add temporary properties
+
+            // Insert first temporary property into list (with no callbacks)
+            try {
+                byte[] prop_value = new String(prop3_def).getBytes(StandardCharsets.UTF_8);
+
+                H5.H5Pinsert2_nocb(lid1, PROP3_NAME, PROP3_SIZE, prop_value);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pinsertr2 lid1: "+PROP3_NAME + err);
+            }
+
+            // Insert second temporary property into list (with no callbacks)
+            try {
+                byte[] prop_value = HDFNativeData.doubleToByte(prop4_def);
+
+                H5.H5Pinsert2_nocb(lid1, PROP4_NAME, PROP4_SIZE, prop_value);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pinsert2 lid1: "+PROP4_NAME + err);
+            }
+
+            // Check the number of properties in class
+            try {
+                nprops = H5.H5Pget_nprops(lid1);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pget_nprops lid1: " + err);
+            }
+            assertTrue("H5Pget_nprops: "+nprops, nprops==4);
+
+            // Check existence of all properties
+            try {
+                status = H5.H5Pexist(lid1, PROP1_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pexist plist_class_id: " + err);
+            }
+            assertTrue("H5Pexist lid1 "+PROP1_NAME, status);
+            try {
+                status = H5.H5Pexist(lid1, PROP2_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pexist plist_class_id: " + err);
+            }
+            assertTrue("H5Pexist lid1 "+PROP2_NAME, status);
+            try {
+                status = H5.H5Pexist(lid1, PROP3_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pexist plist_class_id: " + err);
+            }
+            assertTrue("H5Pexist lid1 "+PROP3_NAME, status);
+            try {
+                status = H5.H5Pexist(lid1, PROP4_NAME);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5Pexist plist_class_id: " + err);
+            }
+            assertTrue("H5Pexist lid1 "+PROP4_NAME, status);
+
+        }
+        finally {
+            if (lid1 > 0)
+                try {H5.H5Pclose(lid1);} catch (Throwable err) {}
+        }
+    }
+
+//    // Test basic generic property list code. Tests callbacks for property lists in a generic class.
+//    @Test
+//    public void testH5P_genprop_class_callback() {
+//        class cdata {
+//            public long cls_id = -1;
+//            public int cls_count = -1;
+//            cdata(long id, int count) {
+//                this.cls_id = id;
+//                this.cls_count = count;
+//            }
+//        }
+//        class H5P_cls_create_data implements H5P_cls_create_func_t {
+//            public ArrayList<cdata> clsdata = new ArrayList<cdata>();
+//        }
+//        H5P_cls_create_func_t cls_create_data = new H5P_cls_create_data();
+//
+//        class H5P_cls_create_callback implements H5P_cls_create_func_cb {
+//            public int callback(long list_id, H5P_cls_create_func_t cls_data) {
+//                System.err.println("H5P_cls_create_callback enter");
+//                cdata cd = ((H5P_cls_create_data)cls_create_data).clsdata.get(0);
+//                cd.cls_count++;
+//                cd.cls_id = list_id;
+//                return 0;
+//            }
+//        }
+//        H5P_cls_create_func_cb cls_create_cb = new H5P_cls_create_callback();
+//
+//        class H5P_cls_copy_data implements H5P_cls_copy_func_t {
+//            public ArrayList<cdata> clsdata = new ArrayList<cdata>();
+//        }
+//        H5P_cls_copy_func_t cls_copy_data = new H5P_cls_copy_data();
+//
+//        class H5P_cls_copy_callback implements H5P_cls_copy_func_cb {
+//            public int callback(long list_id1, long list_id2, H5P_cls_copy_func_t cls_data) {
+//                cdata cd = ((H5P_cls_copy_data)cls_copy_data).clsdata.get(0);
+//                cd.cls_count++;
+//                cd.cls_id = list_id1;
+//                return 0;
+//            }
+//        }
+//        H5P_cls_copy_func_cb cls_copy_cb = new H5P_cls_copy_callback();
+//
+//        class H5P_cls_close_data implements H5P_cls_close_func_t {
+//            public ArrayList<cdata> clsdata = new ArrayList<cdata>();
+//        }
+//        H5P_cls_close_func_t cls_close_data = new H5P_cls_close_data();
+//
+//        class H5P_cls_close_callback implements H5P_cls_close_func_cb {
+//            public int callback(long list_id, H5P_cls_close_func_t cls_data) {
+//                cdata cd = ((H5P_cls_close_data)cls_close_data).clsdata.get(0);
+//                cd.cls_count++;
+//                cd.cls_id = list_id;
+//                return 0;
+//            }
+//        }
+//        H5P_cls_close_func_cb cls_close_cb = new H5P_cls_close_callback();
+//
+//        long    cid1 = -1;        // Generic Property class ID
+//        long    cid2 = -1;        // Generic Property class ID
+//        long    lid1 = -1;        // Generic Property list ID
+//        long    lid2 = -1;        // Generic Property list ID
+//        long    lid3 = -1;        // Generic Property list ID
+//        long    nprops = -1;    // Number of properties in class
+//
+//        try {
+//            // Create a new generic class, derived from the root of the class hierarchy
+//            try {
+//                cid1 = H5.H5Pcreate_class(HDF5Constants.H5P_ROOT, CLASS1_NAME, cls_create_cb, cls_create_data, cls_copy_cb, cls_copy_data, cls_close_cb, cls_close_data);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pcreate_class cid1: " + err);
+//            }
+//            assertTrue("H5Pcreate_class cid1", cid1 >= 0);
+//
+//            // Insert first property into class (with no callbacks)
+//            try {
+//                byte[] prop_value = HDFNativeData.intToByte(prop1_def);
+//
+//                H5.H5Pregister2(cid1, PROP1_NAME, PROP1_SIZE, prop_value, null, null, null, null, null, null, null);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pregister2 cid1: "+PROP1_NAME + err);
+//            }
+//
+//            // Insert second property into class (with no callbacks)
+//            try {
+//                byte[] prop_value = HDFNativeData.floatToByte(prop2_def);
+//
+//                H5.H5Pregister2(cid1, PROP2_NAME, PROP2_SIZE, prop_value, null, null, null, null, null, null, null);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pregister2 cid1: "+PROP2_NAME + err);
+//            }
+//
+//            // Insert third property into class (with no callbacks)
+//            try {
+//                byte[] prop_value = new String(prop3_def).getBytes(StandardCharsets.UTF_8);
+//
+//                H5.H5Pregister2(cid1, PROP3_NAME, PROP3_SIZE, prop_value, null, null, null, null, null, null, null);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pregister2 cid1: "+PROP3_NAME + err);
+//            }
+//
+//            // Check the number of properties in class
+//            try {
+//                nprops = H5.H5Pget_nprops(cid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pget_nprops cid1: " + err);
+//            }
+//            assertTrue("H5Pget_nprops: "+nprops, nprops==3);
+//
+//            // Initialize class callback structs
+//            cdata create_id = new cdata(-1, 0);
+//            cdata copy_id = new cdata(-1, 0);
+//            cdata close_id = new cdata(-1, 0);
+//            ((H5P_cls_create_data)cls_create_data).clsdata.add(create_id);
+//            ((H5P_cls_copy_data)cls_copy_data).clsdata.add(copy_id);
+//            ((H5P_cls_close_data)cls_close_data).clsdata.add(close_id);
+//
+//            // Create a property list from the class
+//            try {
+//                lid1 = H5.H5Pcreate(cid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pcreate lid1: " + err);
+//            }
+//
+//            // Verify that the creation callback occurred
+//            assertFalse("H5Pcreate ",((H5P_cls_create_data)cls_create_data).clsdata.isEmpty());
+//            assertTrue("H5Pcreate "+((H5P_cls_create_data)cls_create_data).clsdata.get(0).cls_id ,((H5P_cls_create_data)cls_create_data).clsdata.get(0).cls_id == lid1);
+//            assertTrue("H5Pcreate "+(((H5P_cls_create_data)cls_create_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_create_data)cls_create_data).clsdata.get(0)).cls_count==1);
+//
+//            // Check the number of properties in list
+//            try {
+//                nprops = H5.H5Pget_nprops(lid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pget_nprops lid1: " + err);
+//            }
+//            assertTrue("H5Pget_nprops: "+nprops, nprops==3);
+//
+//            // Create another property list from the class
+//            try {
+//                lid2 = H5.H5Pcreate(cid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pcreate lid2: " + err);
+//            }
+//
+//            /* Verify that the creation callback occurred */
+//            assertFalse("H5Pcreate ",((H5P_cls_create_data)cls_create_data).clsdata.isEmpty());
+//            assertTrue("H5Pcreate "+((H5P_cls_create_data)cls_create_data).clsdata.get(0).cls_id ,((H5P_cls_create_data)cls_create_data).clsdata.get(0).cls_id == lid2);
+//            assertTrue("H5Pcreate "+(((H5P_cls_create_data)cls_create_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_create_data)cls_create_data).clsdata.get(0)).cls_count==2);
+//
+//            // Check the number of properties in list
+//            try {
+//                nprops = H5.H5Pget_nprops(lid2);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pget_nprops lid2: " + err);
+//            }
+//            assertTrue("H5Pget_nprops: "+nprops, nprops==3);
+//
+//            // Create another property list by copying an existing list
+//            try {
+//                lid3= H5.H5Pcopy(lid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pcopy lid3: " + err);
+//            }
+//
+//            // Verify that the copy callback occurred
+//            assertFalse("H5Pcopy ",((H5P_cls_copy_data)cls_copy_data).clsdata.isEmpty());
+//            assertTrue("H5Pcopy "+((H5P_cls_copy_data)cls_copy_data).clsdata.get(0).cls_id ,((H5P_cls_copy_data)cls_copy_data).clsdata.get(0).cls_id == lid3);
+//            assertTrue("H5Pcopy "+(((H5P_cls_copy_data)cls_copy_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_copy_data)cls_copy_data).clsdata.get(0)).cls_count==1);
+//
+//            // Check the number of properties in list
+//            try {
+//                nprops = H5.H5Pget_nprops(lid3);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pget_nprops lid3: " + err);
+//            }
+//            assertTrue("H5Pget_nprops: "+nprops, nprops==3);
+//
+//            // Close first list
+//            try {
+//                H5.H5Pclose(lid1);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pclose lid1: " + err);
+//            }
+//
+//            /* Verify that the close callback occurred */
+//            assertFalse("H5Pclose ",((H5P_cls_close_data)cls_close_data).clsdata.isEmpty());
+//            assertTrue("H5Pclose "+((H5P_cls_close_data)cls_close_data).clsdata.get(0).cls_id ,((H5P_cls_close_data)cls_copy_data).clsdata.get(0).cls_id == lid1);
+//            assertTrue("H5Pclose "+(((H5P_cls_close_data)cls_close_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_close_data)cls_copy_data).clsdata.get(0)).cls_count==1);
+//
+//            // Close second list
+//            try {
+//                H5.H5Pclose(lid2);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pclose lid2: " + err);
+//            }
+//
+//            // Verify that the close callback occurred
+//            assertTrue("H5Pclose "+((H5P_cls_close_data)cls_close_data).clsdata.get(0).cls_id ,((H5P_cls_close_data)cls_close_data).clsdata.get(0).cls_id == lid2);
+//            assertTrue("H5Pclose "+(((H5P_cls_close_data)cls_close_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_close_data)cls_close_data).clsdata.get(0)).cls_count==2);
+//
+//            // Close third list
+//            try {
+//                H5.H5Pclose(lid3);
+//            }
+//            catch (Throwable err) {
+//                err.printStackTrace();
+//                fail("H5Pclose lid3: " + err);
+//            }
+//
+//            // Verify that the close callback occurred
+//            assertTrue("H5Pclose "+((H5P_cls_close_data)cls_close_data).clsdata.get(0).cls_id ,((H5P_cls_close_data)cls_close_data).clsdata.get(0).cls_id == lid3);
+//            assertTrue("H5Pclose "+(((H5P_cls_close_data)cls_close_data).clsdata.get(0)).cls_count,((cdata)((H5P_cls_close_data)cls_close_data).clsdata.get(0)).cls_count==3);
+//        }
+//        finally {
+//            if (lid3 > 0)
+//                try {H5.H5Pclose(lid3);} catch (Throwable err) {}
+//            if (lid2 > 0)
+//                try {H5.H5Pclose(lid2);} catch (Throwable err) {}
+//            if (lid1 > 0)
+//                try {H5.H5Pclose(lid1);} catch (Throwable err) {}
+//            if (cid2 > 0)
+//                try {H5.H5Pclose_class(cid2);} catch (Throwable err) {}
+//            if (cid1 > 0)
+//                try {H5.H5Pclose_class(cid1);} catch (Throwable err) {}
+//        }
+//    }
+
+}
diff --git a/java/test/TestH5Pvirtual.java b/java/test/TestH5Pvirtual.java
new file mode 100644
index 0000000..9372ae1
--- /dev/null
+++ b/java/test/TestH5Pvirtual.java
@@ -0,0 +1,433 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Pvirtual {
+    @Rule public TestName testname = new TestName();
+
+    private static final String H5_FILE = "vds.h5";
+    private static final String SRC_FILE[] = {
+            "v-0.h5",
+            "v-1.h5",
+            "v-2.h5"
+        };
+    private static final String SRC_DATASET[] = {
+            "A",
+            "B",
+            "C"
+        };
+    private static final int DIM_Y = 6;
+    private static final int VDSDIM_X = 4;
+    private static final int VDSDIM_Y = 6;
+    private static final int fill_value = -1;
+    long[] H5dims = { DIM_Y };
+    long[] VDSH5dims = { VDSDIM_X, VDSDIM_Y };
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5dssid = -1;
+    long H5dvsid = -1;
+    long H5did = -1;
+    long H5dcplid = -1;
+    long H5dapl_id = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = new File(filename);
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dcpl, long dapl) {
+        long did = -1;
+        long space_id = -1;
+        long[] start = {0, 0};
+        long[] stride = null;
+        long[] count = {1, 1};
+        long[] block = {1, VDSDIM_Y};
+
+        try {
+            H5dssid = H5.H5Screate_simple(1, H5dims, null);
+            for (int i = 0; i < 3; i++) {
+                start[0] = i;
+                /* Select i-th row in the virtual dataset; selection in the source datasets is the same. */
+                H5.H5Sselect_hyperslab(dsid, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+                H5.H5Pset_virtual(dcpl, dsid, SRC_FILE[i], SRC_DATASET[i], H5dssid);
+            }
+            did = H5.H5Dcreate(fid, name, HDF5Constants.H5T_NATIVE_INT, dsid,
+                    HDF5Constants.H5P_DEFAULT, dcpl, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5Pvirtual._createDataset: ", did > 0);
+
+        return did;
+    }
+
+    private final void _createH5File(long fcpl, long fapl) {
+        int[] dset_data = new int[DIM_Y];
+        // Create source files and datasets
+        for (int i=0; i < 3; i++) {
+            long space_id = -1;
+            long dset_id = -1;
+            long file_id = -1;
+            for (int j = 0; j < DIM_Y; j++) dset_data[j] = i+1;
+
+            try {
+                file_id = H5.H5Fcreate(SRC_FILE[i], HDF5Constants.H5F_ACC_TRUNC,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                space_id = H5.H5Screate_simple(1, H5dims, null);
+                dset_id = H5.H5Dcreate(file_id, SRC_DATASET[i], HDF5Constants.H5T_NATIVE_INT, space_id,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+                H5.H5Dwrite (dset_id, HDF5Constants.H5T_NATIVE_INT, HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, HDF5Constants.H5P_DEFAULT,
+                        dset_data);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("TestH5Pvirtual.createH5file: " + err);
+            }
+            finally {
+                if (dset_id > 0)
+                    try {H5.H5Dclose(dset_id);} catch (Exception ex) {}
+                if (space_id > 0)
+                    try {H5.H5Sclose(space_id);} catch (Exception ex) {}
+                if (file_id > 0)
+                    try {H5.H5Fclose(file_id);} catch (Exception ex) {}
+            }
+        }
+
+        try {
+            int[] fill_value = {-1};
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(2, VDSH5dims, null);
+            H5dcplid = H5.H5Pcreate(HDF5Constants.H5P_DATASET_CREATE);
+            H5.H5Pset_fill_value(H5dcplid, HDF5Constants.H5T_NATIVE_INT, fill_value);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Pvirtual.createH5file: " + err);
+        }
+        assertTrue("TestH5Pvirtual.createH5file: H5.H5Fcreate: ", H5fid > 0);
+        assertTrue("TestH5Pvirtual.createH5file: H5.H5Screate_simple: ", H5dsid > 0);
+        assertTrue("TestH5Pvirtual.createH5file: H5.H5Pcreate: ", H5dcplid > 0);
+
+        try {
+            H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+        }
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+        _createH5File(HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        H5dapl_id = H5.H5Pcreate(HDF5Constants.H5P_DATASET_ACCESS);
+        assertTrue("TestH5Pvirtual.createH5file: H5.H5Pcreate: ", H5dapl_id > 0);
+  }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dapl_id > 0)
+            try {H5.H5Pclose(H5dapl_id);} catch (Exception ex) {}
+        if (H5dcplid > 0)
+            try {H5.H5Pclose(H5dcplid);} catch (Exception ex) {}
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        for (int i = 0; i < 3; i++) {
+            _deleteFile(SRC_FILE[i]);
+        }
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Pvirtual_storage() {
+        int layout = -1;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            layout = H5.H5Pget_layout (H5dcplid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pget_layout: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+        assertTrue("testH5Pvirtual_storage", HDF5Constants.H5D_VIRTUAL == layout);
+    }
+
+    @Test
+    public void testH5Pget_virtual_count() {
+        long num_map = -1;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            num_map = H5.H5Pget_virtual_count(H5dcplid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pget_virtual_count: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+        assertTrue("testH5Pget_virtual_count: "+num_map, num_map >= 0);
+    }
+
+    @Test
+    public void testH5Pget_source_filename() throws Throwable {
+        String filename = null;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            filename = (H5.H5Pget_virtual_filename (H5dcplid, 2));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pget_virtual_filename: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+        assertTrue("testH5Pget_source_filename: "+filename, filename.compareTo("v-2.h5") == 0);
+    }
+
+    @Test
+    public void testH5Pget_source_datasetname() throws Throwable {
+        String datasetname = null;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            datasetname = H5.H5Pget_virtual_dsetname (H5dcplid, 1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Pget_virtual_dsetname: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+        assertTrue("testH5Pget_source_datasetname: "+datasetname, datasetname.compareTo("B") == 0);
+    }
+
+    @Test
+    public void testH5Pget_selection_source_dataset() throws Throwable {
+        long src_space = -1;
+        long src_selection = -1;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            src_space = H5.H5Pget_virtual_srcspace (H5dcplid, 0);
+            src_selection = H5.H5Sget_select_type(src_space);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Pget_selection_source_dataset: " + err);
+        }
+        finally {
+            if (src_space > 0)
+                try {H5.H5Sclose(src_space);} catch (Exception ex) {}
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+        assertTrue("testH5Pget_selection_source_dataset", src_selection == HDF5Constants.H5S_SEL_ALL);
+    }
+
+    @Test
+    public void testH5Pget_mapping_parameters() {
+        long num_map = -1;
+
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            try {
+                num_map = H5.H5Pget_virtual_count(H5dcplid);
+            }
+            catch (Throwable err) {
+                err.printStackTrace();
+                fail("H5.H5Pget_virtual_count: " + err);
+            }
+            for (int i = 0; i < num_map; i++) {
+                int vselection = -1;
+                long vspace = -1;
+                long nblocks;   // Number of hyperslab blocks
+                long blocks[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};    // List of blocks
+                long[] start = {i, 0};
+                long[] stride = {1, 1};
+                long[] count = {1, 1};
+                long[] block = {1, VDSDIM_Y};
+                long q_start[] = new long[2];
+                long q_stride[] = new long[2];
+                long q_count[] = new long[2];
+                long q_block[] = new long[2];
+                boolean is_regular = false;
+
+                try {
+                    try {
+                        vspace = H5.H5Pget_virtual_vspace (H5dcplid, i);
+                    }
+                    catch (Throwable err) {
+                        err.printStackTrace();
+                        fail("H5.H5Pget_virtual_vspace: " + err);
+                    }
+                    try {
+                        vselection = H5.H5Sget_select_type(vspace);
+                    }
+                    catch (Throwable err) {
+                        err.printStackTrace();
+                        fail("H5.H5Sget_select_type: " + err);
+                    }
+                    assertTrue("testH5Pget_mapping_parameters["+i+"]", vselection == HDF5Constants.H5S_SEL_HYPERSLABS);
+
+                    // Verify that there is only one block
+                    nblocks = H5.H5Sget_select_hyper_nblocks(vspace);
+                    assertTrue("H5Sget_select_hyper_nblocks", nblocks == 1);
+
+                    // Retrieve the block defined
+                    H5.H5Sget_select_hyper_blocklist(vspace, 0, nblocks, blocks);
+
+                    // Verify that the correct block is defined
+                    assertTrue("H5.H5Sget_select_hyper_blocklist["+i+"] [0]: "+blocks[0], start[0] == blocks[0]);
+                    assertTrue("H5.H5Sget_select_hyper_blocklist["+i+"] [1]: "+blocks[1], start[1] == blocks[1]);
+                    assertTrue("H5.H5Sget_select_hyper_blocklist["+i+"] [2]: "+blocks[2], (block[0]-1+i) == blocks[2]);
+                    assertTrue("H5.H5Sget_select_hyper_blocklist["+i+"] [3]: "+blocks[3], (block[1]-1) == blocks[3]);
+                    // We also can use new APIs to get start, stride, count and block
+                    is_regular = H5.H5Sis_regular_hyperslab(vspace);
+                    assertTrue("H5.H5Sis_regular_hyperslab", is_regular);
+                    H5.H5Sget_regular_hyperslab (vspace, q_start, q_stride, q_count, q_block);
+
+                    // Verify the hyperslab parameters
+                    for(int u = 0; u < 2; u++) {
+                        assertTrue("H5Sget_regular_hyperslab, start", start[u] == q_start[u]);
+                        assertTrue("H5Sget_regular_hyperslab, stride", stride[u] == q_stride[u]);
+                        assertTrue("H5Sget_regular_hyperslab, count", count[u] == q_count[u]);
+                        assertTrue("H5Sget_regular_hyperslab, block", block[u] == q_block[u]);
+                    }
+               }
+                catch (Throwable err) {
+                    err.printStackTrace();
+                    fail("H5.testH5Pget_mapping_parameters: " + err);
+                }
+                finally {
+                    if (vspace > 0)
+                        try {H5.H5Sclose(vspace);} catch (Exception ex) {}
+                }
+            }
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Pget_mapping_parameters: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Pset_get_virtual_view() {
+        int ret_val = -1;
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            ret_val = H5.H5Pget_virtual_view(H5dapl_id);
+            assertTrue("H5Pget_virtual_view", ret_val >= 0);
+            assertEquals(HDF5Constants.H5D_VDS_LAST_AVAILABLE, ret_val);
+            H5.H5Pset_virtual_view(H5dapl_id, HDF5Constants.H5D_VDS_FIRST_MISSING);
+            ret_val = H5.H5Pget_virtual_view(H5dapl_id);
+            assertTrue("H5Pget_virtual_view", ret_val >= 0);
+            assertEquals(HDF5Constants.H5D_VDS_FIRST_MISSING, ret_val);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Pset_get_virtual_view: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+    }
+
+    @Ignore
+    public void  testH5Pset_get_virtual_printf_gap() {
+        long ret_val = -1;
+        H5did = _createDataset(H5fid, H5dsid, "VDS", H5dcplid, H5dapl_id);
+        try {
+            ret_val = H5.H5Pget_virtual_printf_gap(H5dapl_id);
+            assertTrue("H5Pget_virtual_printf_gap", ret_val >= 0);
+            assertEquals(0, ret_val);
+            H5.H5Pset_virtual_printf_gap(H5dapl_id, 2);
+            ret_val = H5.H5Pget_virtual_view(H5dapl_id);
+            assertTrue("H5Pget_virtual_printf_gap", ret_val >= 0);
+            assertEquals(2, ret_val);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5Pset_get_virtual_printf_gap: " + err);
+        }
+        finally {
+            if (H5dssid > 0)
+                try {H5.H5Sclose(H5dssid);} catch (Exception ex) {}
+            if (H5did > 0)
+                try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        }
+    }
+}
diff --git a/java/test/TestH5R.java b/java/test/TestH5R.java
new file mode 100644
index 0000000..72e0bfb
--- /dev/null
+++ b/java/test/TestH5R.java
@@ -0,0 +1,335 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5R {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "testH5R.h5";
+    private static final int DIM_X = 4;
+    private static final int DIM_Y = 6;
+    long H5fid = -1;
+    long H5dsid = -1;
+    long H5did = -1;
+    long H5gid = -1;
+    long H5did2 = -1;
+    long[] H5dims = { DIM_X, DIM_Y };
+
+    private final void _deleteFile(String filename) {
+        File file = null;
+        try {
+            file = new File(filename);
+        }
+        catch (Throwable err) {}
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    private final long _createDataset(long fid, long dsid, String name, long dapl) {
+        long did = -1;
+        try {
+            did = H5.H5Dcreate(fid, name,
+                        HDF5Constants.H5T_STD_I32BE, dsid,
+                        HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, dapl);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Dcreate: " + err);
+        }
+        assertTrue("TestH5R._createDataset: ",did > 0);
+
+        return did;
+    }
+
+    private final long _createGroup(long fid, String name) {
+        long gid = -1;
+        try {
+            gid = H5.H5Gcreate(fid, name, HDF5Constants.H5P_DEFAULT,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Gcreate: " + err);
+        }
+        assertTrue("TestH5R._createGroup: ",gid > 0);
+
+        return gid;
+    }
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        try {
+            H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                    HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+            H5dsid = H5.H5Screate_simple(2, H5dims, null);
+            H5gid = _createGroup(H5fid, "Group1");
+            H5did2 = _createDataset(H5gid, H5dsid, "dset2", HDF5Constants.H5P_DEFAULT);
+            H5did = _createDataset(H5fid, H5dsid, "dset", HDF5Constants.H5P_DEFAULT);
+
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5R.createH5file: " + err);
+        }
+        assertTrue("TestH5R.createH5file: H5.H5Fcreate: ",H5fid > 0);
+        assertTrue("TestH5R.createH5file: H5.H5Screate_simple: ",H5dsid > 0);
+        assertTrue("TestH5R.createH5file: _createDataset: ",H5did > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5dsid > 0)
+            try {H5.H5Sclose(H5dsid);} catch (Exception ex) {}
+        if (H5did > 0)
+            try {H5.H5Dclose(H5did);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+        if (H5gid > 0)
+            try {H5.H5Gclose(H5gid);} catch (Exception ex) {}
+        if (H5did2 > 0)
+            try {H5.H5Dclose(H5did2);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Rget_name() {
+        long loc_id=H5fid;
+        int ref_type=HDF5Constants.H5R_OBJECT;
+        long ret_val=-1;
+        byte[] ref=null;
+        String[] name= {""};
+        String objName = "/dset";
+
+        try {
+            ref = H5.H5Rcreate(H5fid, objName, ref_type, -1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Rget_name:H5Rcreate " + err);
+        }
+
+        try {
+            ret_val = H5.H5Rget_name(loc_id, ref_type, ref, name, 16);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Rget_name: " + err);
+        }
+
+        assertTrue("testH5Rget_name: H5Rget_name", ret_val>0);
+        assertTrue("The name of the object: ", objName.equals(name[0]));
+    }
+
+    @Test
+    public void testH5Rget_obj_type2() {
+        int  ref_type=HDF5Constants.H5R_OBJECT;
+        byte[] ref=null;
+
+        String objName = "/dset";
+        int obj_type = -1;;
+
+        try {
+            ref = H5.H5Rcreate(H5fid, objName, ref_type, -1);
+        }
+        catch(Throwable err) {
+            err.printStackTrace();
+        }
+
+        try {
+            obj_type = H5.H5Rget_obj_type(H5fid, HDF5Constants.H5R_OBJECT, ref);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Rget_obj_type2: " + err);
+        }
+        assertEquals(obj_type, HDF5Constants.H5O_TYPE_DATASET);
+    }
+
+    @Test
+    public void testH5Rcreate_refobj() {
+        byte[] ref = null;
+
+        try {
+            ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, -1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Rcreate: " + err);
+        }
+        assertNotNull(ref);
+    }
+
+    @Test
+    public void testH5Rcreate_regionrefobj() {
+        byte[] ref = null;
+        try {
+            ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Rcreate: " + err);
+        }
+        assertNotNull(ref);
+    }
+
+    @Test
+    public void testH5Rdereference() {
+        byte[] ref1 = null;
+        byte[] ref2 = null;
+        long dataset_id = -1;
+        long group_id = -1;
+        try {
+            //Create reference on dataset
+            ref1 = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid);
+            dataset_id= H5.H5Rdereference(H5fid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_DATASET_REGION, ref1);
+
+            //Create reference on group
+            ref2 = H5.H5Rcreate(H5gid, "/Group1", HDF5Constants.H5R_OBJECT, -1);
+            group_id= H5.H5Rdereference(H5gid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref2);
+            assertNotNull(ref1);
+            assertNotNull(ref2);
+            assertTrue(dataset_id>=0);
+            assertTrue(group_id>=0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Rdereference " + err);
+        }
+        finally {
+            try {H5.H5Dclose(dataset_id);} catch (Exception ex) {}
+            try {H5.H5Gclose(group_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Rget_region() {
+        byte[] ref = null;
+        long dsid = -1;
+        try {
+            ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid);
+            dsid = H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
+            assertNotNull(ref);
+            assertTrue(dsid>=0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("TestH5Rget_region: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(dsid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Rget_name_Invalidreftype() throws Throwable {
+        byte[] ref = null;
+        String[] name= {""};
+        ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, -1);
+        H5.H5Rget_name(H5fid, HDF5Constants.H5R_DATASET_REGION, ref, name, 16);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Rget_name_NULLreference() throws Throwable {
+        byte[] ref = null;
+        String[] name= {""};
+        H5.H5Rget_name(H5fid, HDF5Constants.H5R_OBJECT, ref, name, 16);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Rget_obj_type2_Invalidreftype() throws Throwable {
+        byte[] ref = null;
+        ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, -1);
+        H5.H5Rget_obj_type(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Rcreate_InvalidObjectName() throws Throwable {
+         H5.H5Rcreate(H5fid, "/GROUPS", HDF5Constants.H5R_OBJECT, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Rcreate_Invalidspace_id() throws Throwable {
+         H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, -1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Rcreate_Invalidreftype() throws Throwable {
+        H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_BADTYPE, -1);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Rgetregion_Invalidreftype() throws Throwable {
+        byte[] ref = null;
+        ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, H5dsid);
+        H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Rgetregion_Badreferencetype() throws Throwable {
+        byte[] ref = null;
+        ref = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_OBJECT, H5dsid);
+        H5.H5Rget_region(H5fid, HDF5Constants.H5R_OBJECT, ref);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Rgetregion_Nullreference() throws Throwable {
+        byte[] ref = null;
+        H5.H5Rget_region(H5fid, HDF5Constants.H5R_DATASET_REGION, ref);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Rdereference_Nullreference() throws Throwable {
+        byte[] ref = null;
+        H5.H5Rdereference(H5did2, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Rdereference_Invalidreference() throws Throwable {
+        byte[] ref1 = null;
+        byte[] ref2 = null;
+        ref1 = H5.H5Rcreate(H5fid, "/dset", HDF5Constants.H5R_DATASET_REGION, H5dsid);
+        ref2 = H5.H5Rcreate(H5gid, "/Group1", HDF5Constants.H5R_OBJECT, -1);
+        H5.H5Rdereference(H5gid, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, ref1);
+    }
+
+}
diff --git a/java/test/TestH5S.java b/java/test/TestH5S.java
new file mode 100644
index 0000000..909ab02
--- /dev/null
+++ b/java/test/TestH5S.java
@@ -0,0 +1,590 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5S {
+    @Rule public TestName testname = new TestName();
+    long H5sid = -1;
+    int H5rank = 2;
+    long H5dims[] = {5, 5};
+    long H5maxdims[] = {10, 10};
+
+    @Before
+    public void createH5file()
+            throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0", H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5sid = H5.H5Screate_simple(H5rank, H5dims, H5maxdims);
+        assertTrue("H5.H5Screate_simple_extent", H5sid > 0);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5sid > 0) {
+            try {H5.H5Sclose(H5sid);} catch (Exception ex) {}
+        }
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Sget_simple_extent_ndims() {
+        int read_rank = -1;
+        try {
+            read_rank = H5.H5Sget_simple_extent_ndims(H5sid);
+            assertTrue("H5.H5Sget_simple_extent_ndims", H5rank == read_rank);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_simple_extent_ndims: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_simple_extent_dims_null() {
+        int read_rank = -1;
+
+        try {
+            read_rank = H5.H5Sget_simple_extent_dims(H5sid, null, null);
+            assertTrue("H5.H5Sget_simple_extent_dims", H5rank == read_rank);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_simple_extent_dims: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_simple_extent_dims() {
+        int read_rank = -1;
+        long dims[] = {5, 5};
+        long maxdims[] = {10, 10};
+
+        try {
+            read_rank = H5.H5Sget_simple_extent_dims(H5sid, dims, maxdims);
+            assertTrue("H5.H5Sget_simple_extent_dims", H5rank == read_rank);
+            assertTrue("H5.H5Sget_simple_extent_dims:dims", H5dims[0] == dims[0]);
+            assertTrue("H5.H5Sget_simple_extent_dims:maxdims", H5maxdims[0] == maxdims[0]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_simple_extent_dims: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_simple_extent_npoints() {
+        long num_elements = -1;
+        try {
+            num_elements = H5.H5Sget_simple_extent_npoints(H5sid);
+            assertTrue("H5.H5Sget_simple_extent_npoints", (H5dims[0]*H5dims[1]) == num_elements);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_simple_extent_npoints: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_simple_extent_type() {
+        int read_type = -1;
+        try {
+            read_type = H5.H5Sget_simple_extent_type(H5sid);
+            assertTrue("H5.H5Sget_simple_extent_type", HDF5Constants.H5S_SIMPLE == read_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_simple_extent_type: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sis_simple() {
+        boolean result = false;
+
+        try {
+            result = H5.H5Sis_simple(H5sid);
+            assertTrue("H5.H5Sis_simple", result);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sis_simple: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sset_extent_simple() {
+        long num_elements = -1;
+        try {
+            H5.H5Sset_extent_simple(H5sid, H5rank, H5maxdims, H5maxdims);
+            num_elements = H5.H5Sget_simple_extent_npoints(H5sid);
+            assertTrue("H5.H5Sget_simple_extent_npoints", (H5maxdims[0]*H5maxdims[1]) == num_elements);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sset_extent_simple: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_select_type() {
+        int read_type = -1;
+        try {
+            read_type = H5.H5Sget_select_type(H5sid);
+            assertTrue("H5.H5Sget_select_type", HDF5Constants.H5S_SEL_ALL == read_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sset_extent_none: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sset_extent_none() {
+        int read_type = -1;
+        try {
+            H5.H5Sset_extent_none(H5sid);
+            read_type = H5.H5Sget_simple_extent_type(H5sid);
+            assertTrue("H5.H5Sget_simple_extent_type: "+read_type, HDF5Constants.H5S_NO_CLASS == read_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sset_extent_none: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Scopy() {
+        long sid = -1;
+        int read_rank = -1;
+
+        try {
+            sid = H5.H5Scopy(H5sid);
+            assertTrue("H5.H5Sis_simple", sid > 0);
+            read_rank = H5.H5Sget_simple_extent_ndims(sid);
+            assertTrue("H5.H5Screate_simple_extent_ndims", H5rank == read_rank);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Scopy: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sextent_copy() {
+        long sid = -1;
+        int class_type = -1;
+
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_NULL);
+            assertTrue("H5.H5Screate_null", sid > 0);
+            H5.H5Sextent_copy(sid, H5sid);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_null: type", class_type == HDF5Constants.H5S_SIMPLE);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sextent_copy: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sextent_equal() {
+        long sid = -1;
+        boolean result = false;
+
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_NULL);
+            assertTrue("H5.H5Screate_null",sid > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: null " + err);
+        }
+
+        try {
+            result = H5.H5Sextent_equal(sid, H5sid);
+            assertFalse("H5.testH5Sextent_equal",result);
+            H5.H5Sextent_copy(sid, H5sid);
+            result = H5.H5Sextent_equal(sid, H5sid);
+            assertTrue("H5.testH5Sextent_equal", result);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sextent_copy " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sencode_decode_null_dataspace() {
+        long sid = -1;
+        long decoded_sid = -1;
+        byte[] null_sbuf = null;
+        boolean result = false;
+
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_NULL);
+            assertTrue("H5.H5Screate_null", sid > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: null " + err);
+        }
+
+        try {
+            null_sbuf = H5.H5Sencode(sid);
+            assertFalse("H5.testH5Sencode", null_sbuf==null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sencode " + err);
+        }
+        finally {
+            if(null_sbuf == null) {
+                try {H5.H5Sclose(sid);} catch (Exception ex) {}
+            }
+        }
+
+        try {
+            decoded_sid = H5.H5Sdecode(null_sbuf);
+            assertTrue("H5.testH5Sdecode", decoded_sid>0);
+
+            result = H5.H5Sextent_equal(sid, decoded_sid);
+            assertTrue("H5.testH5Sextent_equal", result);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sdecode " + err);
+        }
+        finally {
+            try {H5.H5Sclose(decoded_sid);} catch (Exception ex) {}
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sencode_decode_scalar_dataspace() {
+        long sid = -1;
+        long decoded_sid = -1;
+        byte[] scalar_sbuf = null;
+        boolean result = false;
+        int iresult = -1;
+        long lresult = -1;
+
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            assertTrue("H5.H5Screate_null", sid > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: null " + err);
+        }
+
+        try {
+            scalar_sbuf = H5.H5Sencode(sid);
+            assertFalse("H5.testH5Sencode", scalar_sbuf==null);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sencode " + err);
+        }
+        finally {
+            if(scalar_sbuf == null) {
+                try {H5.H5Sclose(sid);} catch (Exception ex) {}
+            }
+        }
+
+        try {
+            decoded_sid = H5.H5Sdecode(scalar_sbuf);
+            assertTrue("H5.testH5Sdecode", decoded_sid>0);
+
+            result = H5.H5Sextent_equal(sid, decoded_sid);
+            assertTrue("H5.testH5Sextent_equal", result);
+
+            /* Verify decoded dataspace */
+            lresult = H5.H5Sget_simple_extent_npoints(decoded_sid);
+            assertTrue("H5.testH5Sget_simple_extent_npoints", lresult==1);
+
+            iresult = H5.H5Sget_simple_extent_ndims(decoded_sid);
+            assertTrue("H5.testH5Sget_simple_extent_ndims", iresult==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sdecode " + err);
+        }
+        finally {
+            try {H5.H5Sclose(decoded_sid);} catch (Exception ex) {}
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sselect_none() {
+        int read_type = -1;
+        try {
+            H5.H5Sselect_none(H5sid);
+            read_type = H5.H5Sget_select_type(H5sid);
+            assertTrue("H5.H5Sget_select_type: "+read_type, HDF5Constants.H5S_SEL_NONE == read_type);
+            H5.H5Sselect_all(H5sid);
+            read_type = H5.H5Sget_select_type(H5sid);
+            assertTrue("H5.H5Sget_select_type: "+read_type, HDF5Constants.H5S_SEL_ALL == read_type);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sset_extent_none: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_select_npoints() {
+        long coord[][] = {{0,1},{2,4},{5,6}}; /* Coordinates for point selection */
+        long num_elements = -1;
+        try {
+            H5.H5Sselect_elements(H5sid, HDF5Constants.H5S_SELECT_SET, 3, coord);
+            num_elements = H5.H5Sget_select_npoints(H5sid);
+            assertTrue("H5.H5Sget_select_npoints: "+num_elements, 3 == num_elements);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_npoints: " + err);
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Sget_select_elem_pointlist_invalid() throws Throwable {
+        long coord[][] = {{0,1},{2,4},{5,6}}; /* Coordinates for point selection */
+        long getcoord[] = {-1,-1}; /* Coordinates for get point selection */
+        try {
+            H5.H5Sselect_elements(H5sid, HDF5Constants.H5S_SELECT_SET, 3, coord);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_elem_pointlist: " + err);
+        }
+        H5.H5Sget_select_elem_pointlist(H5sid, 0, 3, getcoord);
+    }
+
+    @Test
+    public void testH5Sget_select_elem_pointlist() {
+        long coord[][] = {{0,1},{2,3},{4,5}}; /* Coordinates for point selection */
+        long getcoord[] = {-1,-1,-1,-1,-1,-1}; /* Coordinates for get point selection */
+        try {
+            H5.H5Sselect_elements(H5sid, HDF5Constants.H5S_SELECT_SET, 3, coord);
+            H5.H5Sget_select_elem_pointlist(H5sid, 0, 3, getcoord);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[0][0] == getcoord[0]);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[0][1] == getcoord[1]);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[1][0] == getcoord[2]);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[1][1] == getcoord[3]);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[2][0] == getcoord[4]);
+            assertTrue("H5.H5Sget_select_elem_pointlist", coord[2][1] == getcoord[5]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_elem_pointlist: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_select_bounds() {
+        long lowbounds[] = {-1,-1};
+        long hibounds[] = {-1,-1};
+        try {
+            H5.H5Sget_select_bounds(H5sid, lowbounds, hibounds);
+            assertTrue("H5.H5Sget_select_bounds", 0 == lowbounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", 0 == lowbounds[1]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[0]-1) == hibounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[1]-1) == hibounds[1]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_bounds: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Soffset_simple() {
+        long coord[][] = {{2,2},{2,4},{4,2},{4,4}}; /* Coordinates for point selection */
+        long lowbounds[] = {-1,-1};
+        long hibounds[] = {-1,-1};
+        try {
+            H5.H5Sselect_elements(H5sid, HDF5Constants.H5S_SELECT_SET, 4, coord);
+            H5.H5Sget_select_bounds(H5sid, lowbounds, hibounds);
+            assertTrue("H5.H5Sget_select_bounds", 2 == lowbounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", 2 == lowbounds[1]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[0]-1) == hibounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[1]-1) == hibounds[1]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_bounds: " + err);
+        }
+        try {
+            long offset[] = {-1,-1};
+            H5.H5Soffset_simple(H5sid, offset);
+            H5.H5Sget_select_bounds(H5sid, lowbounds, hibounds);
+            assertTrue("H5.H5Sget_select_bounds", 1 == lowbounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", 1 == lowbounds[1]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[0]-2) == hibounds[0]);
+            assertTrue("H5.H5Sget_select_bounds", (H5dims[1]-2) == hibounds[1]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Soffset_simple: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Sget_select_hyper() {
+        long space1 = -1;
+        long start[] = {0,0};
+        long stride[] = {1,1};
+        long count[] = {1,1};
+        long block[] = {4,4};
+        long nblocks;   // Number of hyperslab blocks
+        long blocks[] = {-1, -1, -1, -1, -1, -1, -1, -1};    // List of blocks
+        try {
+            // Copy "all" selection & space
+            space1 = H5.H5Scopy(H5sid);
+            assertTrue("H5.H5Scopy", H5sid > 0);
+            // 'AND' "all" selection with another hyperslab
+            H5.H5Sselect_hyperslab(space1, HDF5Constants.H5S_SELECT_AND, start, stride, count, block);
+
+            // Verify that there is only one block
+            nblocks = H5.H5Sget_select_hyper_nblocks(space1);
+            assertTrue("H5Sget_select_hyper_nblocks", nblocks == 1);
+
+            // Retrieve the block defined
+            H5.H5Sget_select_hyper_blocklist(space1, 0, nblocks, blocks);
+
+            // Verify that the correct block is defined
+            assertTrue("H5.H5Sget_select_hyper_blocklist", start[0] == blocks[0]);
+            assertTrue("H5.H5Sget_select_hyper_blocklist", start[1] == blocks[1]);
+            assertTrue("H5.H5Sget_select_hyper_blocklist", (block[0]-1) == blocks[2]);
+            assertTrue("H5.H5Sget_select_hyper_blocklist", (block[1]-1) == blocks[3]);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Sget_select_bounds: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(space1);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Sget_select_valid() {
+        long space1 = -1;
+        long start[] = {1,0};
+        long stride[] = {1,1};
+        long count[] = {2,3};
+        long block[] = {1,1};
+        long offset[] = {0,0};    // Offset of selection
+
+        try {
+            // Copy "all" selection & space
+            space1 = H5.H5Scopy(H5sid);
+            assertTrue("H5.H5Scopy", H5sid > 0);
+            // 'AND' "all" selection with another hyperslab
+            H5.H5Sselect_hyperslab(space1, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+
+            // Check a valid offset
+            offset[0]=-1;
+            offset[1]=0;
+            H5.H5Soffset_simple(space1, offset);
+            assertTrue("H5Sselect_valid", H5.H5Sselect_valid(space1));
+
+            // Check an invalid offset
+            offset[0]=10;
+            offset[1]=0;
+            H5.H5Soffset_simple(space1, offset);
+            assertFalse("H5Sselect_valid", H5.H5Sselect_valid(space1));
+
+            /* Reset offset */
+            offset[0]=0;
+            offset[1]=0;
+            H5.H5Soffset_simple(space1, offset);
+            assertTrue("H5Sselect_valid", H5.H5Sselect_valid(space1));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Sget_select_valid: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(space1);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Shyper_regular() {
+        long start[] = {1,0};
+        long stride[] = {1,1};
+        long count[] = {2,3};
+        long block[] = {1,1};
+        long q_start[] = new long[2];
+        long q_stride[] = new long[2];
+        long q_count[] = new long[2];
+        long q_block[] = new long[2];
+        boolean is_regular = false;
+
+        try {
+            // Set "regular" hyperslab selection
+            H5.H5Sselect_hyperslab(H5sid, HDF5Constants.H5S_SELECT_SET, start, stride, count, block);
+
+            // Query if 'hyperslab' selection is regular hyperslab (should be TRUE)
+            is_regular = H5.H5Sis_regular_hyperslab(H5sid);
+            assertTrue("H5.H5Sis_regular_hyperslab", is_regular);
+
+            // Retrieve the hyperslab parameters
+            H5.H5Sget_regular_hyperslab(H5sid, q_start, q_stride, q_count, q_block);
+
+            /* Verify the hyperslab parameters */
+            for(int u = 0; u < H5rank; u++) {
+                assertTrue("H5Sget_regular_hyperslab, start", start[u] == q_start[u]);
+                assertTrue("H5Sget_regular_hyperslab, stride", stride[u] == q_stride[u]);
+                assertTrue("H5Sget_regular_hyperslab, count", count[u] == q_count[u]);
+                assertTrue("H5Sget_regular_hyperslab, block", block[u] == q_block[u]);
+            } /* end for */
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Sget_select_valid: " + err);
+        }
+    }
+}
diff --git a/java/test/TestH5Sbasic.java b/java/test/TestH5Sbasic.java
new file mode 100644
index 0000000..2731a06
--- /dev/null
+++ b/java/test/TestH5Sbasic.java
@@ -0,0 +1,247 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Sbasic {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Sclose_invalid() throws Throwable {
+        long sid = H5.H5Sclose(-1);
+        assertTrue(sid == 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Screate_invalid() throws Throwable {
+        H5.H5Screate(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Sget_simple_extent_type_invalid() throws Throwable {
+        H5.H5Sget_simple_extent_type(-1);
+    }
+
+    @Test
+    public void testH5Screate_scalar() {
+        long sid = -1;
+        int class_type = -1;
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_SCALAR);
+            assertTrue("H5.H5Screate_scalar",sid > 0);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_scalar: type",class_type == HDF5Constants.H5S_SCALAR);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Screate_null() {
+        long sid = -1;
+        int class_type = -1;
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_NULL);
+            assertTrue("H5.H5Screate_null", sid > 0);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_null: type", class_type == HDF5Constants.H5S_NULL);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Screate_simple_dims_null() throws Throwable {
+        H5.H5Screate_simple(2, (long[])null, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Screate_simple_rank_invalid() throws Throwable {
+        long dims[] = {5, 5};
+        H5.H5Screate_simple(-1, dims, null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Screate_simple_dims_invalid() throws Throwable {
+        long dims[] = {2, 2};
+        H5.H5Screate_simple(5, dims, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Screate_simple_dims_exceed() throws Throwable {
+        long dims[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
+                21,22,23,24,25,26,27,28,29,30,31,32,33,35};
+        H5.H5Screate_simple(35, dims, null);
+    }
+
+//H5Screate_simple was changed to allow a dim of 0
+//    @Ignore(expected = HDF5LibraryException.class)
+//    public void testH5Screate_simple_dims_zero() {
+//        long dims[] = {0, 0};
+//        H5.H5Screate_simple(2, dims, null);
+//    }
+
+    @Test
+    public void testH5Screate_simple() {
+        long sid = -1;
+        int class_type = -1;
+        int rank = 2;
+        long dims[] = {5, 5};
+        long maxdims[] = {10, 10};
+
+        try {
+            sid = H5.H5Screate_simple(rank, dims, maxdims);
+            assertTrue("H5.H5Screate_simple", sid > 0);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_simple: type", class_type == HDF5Constants.H5S_SIMPLE);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate_simple: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Screate_simple_unlimted() {
+        long sid = -1;
+        int class_type = -1;
+        int rank = 2;
+        long dims[] = {5, 5};
+        long maxdims[] = {HDF5Constants.H5S_UNLIMITED, HDF5Constants.H5S_UNLIMITED};
+
+        try {
+            sid = H5.H5Screate_simple(rank, dims, maxdims);
+            assertTrue("H5.H5Screate_simple", sid > 0);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_simple: type", class_type == HDF5Constants.H5S_SIMPLE);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate_simple: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Screate_simple_unlimted_1d() {
+        long sid = -1;
+        int class_type = -1;
+        int rank = 1;
+        long dims[] = {5};
+        long maxdims[] = {HDF5Constants.H5S_UNLIMITED};
+
+        try {
+            sid = H5.H5Screate_simple(rank, dims, maxdims);
+            assertTrue("H5.H5Screate_simple", sid > 0);
+            class_type = H5.H5Sget_simple_extent_type(sid);
+            assertTrue("H5.H5Screate_simple: type", class_type == HDF5Constants.H5S_SIMPLE);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate_simple: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Screate_simple_max_default() {
+        long sid = -1;
+        int rank = 2;
+        long dims[] = {5, 5};
+
+        try {
+            sid = H5.H5Screate_simple(rank, dims, null);
+            assertTrue("H5.H5Screate_simple_max_default", sid > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate_simple: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Screate_simple_extent() {
+        long sid = -1;
+        int rank = 2;
+        long dims[] = {5, 5};
+        long maxdims[] = {10, 10};
+
+        try {
+            sid = H5.H5Screate(HDF5Constants.H5S_SIMPLE);
+            assertTrue("H5.H5Screate_simple_extent",sid > 0);
+            H5.H5Sset_extent_simple(sid, rank, dims, maxdims);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Screate: " + err);
+        }
+        finally {
+            try {H5.H5Sclose(sid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Sencode_invalid() throws Throwable {
+        H5.H5Sencode(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Sdecode_null() throws Throwable {
+        H5.H5Sdecode(null);
+    }
+
+}
diff --git a/java/test/TestH5T.java b/java/test/TestH5T.java
new file mode 100644
index 0000000..e03b97f
--- /dev/null
+++ b/java/test/TestH5T.java
@@ -0,0 +1,459 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5Exception;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5T {
+    @Rule public TestName testname = new TestName();
+    private static final String H5_FILE = "test.h5";
+    long H5fid = -1;
+    long H5strdid = -1;
+
+    private final void _deleteFile(String filename) {
+        File file = null;
+        try {
+            file = new File(filename);
+        }
+        catch (Throwable err) {}
+
+        if (file.exists()) {
+            try {file.delete();} catch (SecurityException e) {}
+        }
+    }
+
+    @Before
+    public void createH5file() throws NullPointerException, HDF5Exception {
+        assertTrue("H5 open ids is 0", H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+
+        H5fid = H5.H5Fcreate(H5_FILE, HDF5Constants.H5F_ACC_TRUNC,
+                HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+        assertTrue("H5.H5Fcreate", H5fid > 0);
+        H5strdid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+        assertTrue("H5.H5Tcopy", H5strdid > 0);
+
+        H5.H5Fflush(H5fid, HDF5Constants.H5F_SCOPE_LOCAL);
+    }
+
+    @After
+    public void deleteH5file() throws HDF5LibraryException {
+        if (H5strdid >= 0)
+            try {H5.H5Tclose(H5strdid);} catch (Exception ex) {}
+        if (H5fid > 0)
+            try {H5.H5Fclose(H5fid);} catch (Exception ex) {}
+
+        _deleteFile(H5_FILE);
+        System.out.println();
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tequal_type_error() throws Throwable {
+        H5.H5Tequal(HDF5Constants.H5T_INTEGER, H5strdid);
+    }
+
+    @Test
+    public void testH5Tget_class() {
+        try {
+            int result = H5.H5Tget_class(H5strdid);
+            assertTrue("H5.H5Tget_class", result > 0);
+            String class_name = H5.H5Tget_class_name(result);
+            assertTrue("H5.H5Tget_class", class_name.compareTo("H5T_STRING")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tget_class: " + err);
+        }
+    }
+
+    @Test
+    public void testH5Tget_size() {
+        long dt_size = -1;
+
+        try {
+            dt_size = H5.H5Tget_size(H5strdid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tget_size:H5.H5Tget_size " + err);
+        }
+        assertTrue("testH5Tget_size", dt_size > 0);
+    }
+
+    @Test
+    public void testH5Tset_size() {
+        long dt_size = 5;
+
+        try {
+            H5.H5Tset_size(H5strdid, dt_size);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tset_size:H5.H5Tset_size " + err);
+        }
+        try {
+            dt_size = H5.H5Tget_size(H5strdid);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tget_size:H5.H5Tget_size " + err);
+        }
+        assertTrue("testH5Tget_size", dt_size == 5);
+    }
+
+    @Test
+    public void testH5Tarray_create() {
+       long filetype_id = -1;
+       long[] adims = { 3, 5 };
+
+       try {
+           filetype_id = H5.H5Tarray_create(HDF5Constants.H5T_STD_I64LE, 2, adims);
+           assertTrue("testH5Tarray_create", filetype_id >= 0);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tarray_create.H5Tarray_create " + err);
+       }
+       finally {
+           if (filetype_id >= 0)
+               try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+       }
+    }
+
+    @Test
+    public void testH5Tget_array_ndims() {
+       long filetype_id = -1;
+       int ndims = 0;
+       long[] adims = { 3, 5 };
+
+       try {
+           filetype_id = H5.H5Tarray_create(HDF5Constants.H5T_STD_I64LE, 2, adims);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tarray_create.H5Tarray_create " + err);
+       }
+       assertTrue("testH5Tget_array_ndims:H5Tarray_create", filetype_id >= 0);
+       try {
+           ndims = H5.H5Tget_array_ndims(filetype_id);
+           assertTrue("testH5Tget_array_ndims", ndims == 2);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tget_array_ndims.H5Tget_array_ndims " + err);
+       }
+       finally {
+           if (filetype_id >= 0)
+               try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+       }
+    }
+
+    @Test
+    public void testH5Tget_array_dims() {
+       long filetype_id = -1;
+       int ndims = 0;
+       long[] adims = { 3, 5 };
+       long[] rdims = new long[2];
+
+       try {
+           filetype_id = H5.H5Tarray_create(HDF5Constants.H5T_STD_I64LE, 2, adims);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tarray_create.H5Tarray_create " + err);
+       }
+       assertTrue("testH5Tget_array_dims:H5Tarray_create", filetype_id >= 0);
+       try {
+           ndims = H5.H5Tget_array_dims(filetype_id, rdims);
+           assertTrue("testH5Tget_array_dims", ndims == 2);
+           assertTrue("testH5Tget_array_dims", adims[0] == rdims[0]);
+           assertTrue("testH5Tget_array_dims", adims[1] == rdims[1]);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tget_array_dims.H5Tget_array_dims " + err);
+       }
+       finally {
+           if (filetype_id >= 0)
+               try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+       }
+    }
+
+    @Test
+    public void testH5Tenum_functions() {
+        long       filetype_id =-1;
+        String    enum_type ="Enum_type";
+        byte[]    enum_val = new byte[1];
+        String    enum_name = null;
+
+        // Create a enumerate datatype
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_ENUM, (long)1);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tenum_functions:H5Tcreate " + err);
+        }
+        assertTrue("testH5Tenum_functions:H5Tcreate", filetype_id >= 0);
+        try {
+            enum_val[0]=10;
+            H5.H5Tenum_insert(filetype_id, "RED", enum_val);
+            enum_val[0]=11;
+            H5.H5Tenum_insert(filetype_id, "GREEN", enum_val);
+            enum_val[0]=12;
+            H5.H5Tenum_insert(filetype_id, "BLUE", enum_val);
+            enum_val[0]=13;
+            H5.H5Tenum_insert(filetype_id, "ORANGE", enum_val);
+            enum_val[0]=14;
+            H5.H5Tenum_insert(filetype_id, "YELLOW", enum_val);
+
+            // Query member number and member index by member name, for enumeration type.
+            assertTrue("Can't get member number", H5.H5Tget_nmembers(filetype_id) == 5);
+            assertTrue("Can't get correct index number", H5.H5Tget_member_index(filetype_id, "ORANGE") == 3);
+
+            // Commit enumeration datatype and close it */
+            H5.H5Tcommit(H5fid, enum_type, filetype_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5P_DEFAULT);
+
+            H5.H5Tclose(filetype_id);
+
+            // Open the dataytpe for query
+            filetype_id = H5.H5Topen(H5fid, enum_type, HDF5Constants.H5P_DEFAULT);
+            assertTrue("testH5Tenum_functions:H5Tcreate", filetype_id >= 0);
+
+            // Query member number and member index by member name, for enumeration type
+            assertTrue("Can't get member number", H5.H5Tget_nmembers(filetype_id) == 5);
+            assertTrue("Can't get correct index number", H5.H5Tget_member_index(filetype_id, "ORANGE") == 3);
+
+            // Query member value by member name, for enumeration type
+            H5.H5Tenum_valueof (filetype_id, "ORANGE", enum_val);
+            assertTrue("Incorrect value for enum member", enum_val[0]==13);
+
+            // Query member value by member index, for enumeration type
+            H5.H5Tget_member_value (filetype_id, 2, enum_val);
+            assertTrue("Incorrect value for enum member", enum_val[0]==12);
+
+            // Query member name by member value, for enumeration type
+            enum_val[0] = 14;
+            enum_name = H5.H5Tenum_nameof(filetype_id, enum_val, 16);
+            assertTrue("Incorrect name for enum member", enum_name.compareTo("YELLOW")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tenum_functions:query " + err);
+        }
+        finally {
+            if (filetype_id >= 0)
+                try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Tenum_create_functions() {
+        long      filetype_id = -1;
+        byte[]    enum_val = new byte[1];
+
+        // Create a enumerate datatype
+        try {
+            filetype_id = H5.H5Tenum_create(HDF5Constants.H5T_NATIVE_INT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tenum_create_functions:H5Tcreate " + err);
+        }
+        assertTrue("testH5Tenum_create_functions:H5Tcreate", filetype_id >= 0);
+        try {
+            enum_val[0]=10;
+            H5.H5Tenum_insert(filetype_id, "RED", enum_val);
+            enum_val[0]=11;
+            H5.H5Tenum_insert(filetype_id, "GREEN", enum_val);
+            enum_val[0]=12;
+            H5.H5Tenum_insert(filetype_id, "BLUE", enum_val);
+            enum_val[0]=13;
+            H5.H5Tenum_insert(filetype_id, "ORANGE", enum_val);
+            enum_val[0]=14;
+            H5.H5Tenum_insert(filetype_id, "YELLOW", enum_val);
+
+            // Query member number and member index by member name, for enumeration type.
+            assertTrue("Can't get member number", H5.H5Tget_nmembers(filetype_id) == 5);
+            assertTrue("Can't get correct index number", H5.H5Tget_member_index(filetype_id, "ORANGE") == 3);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tenum_create_functions:H5Tget_nmembers " + err);
+        }
+        finally {
+            if (filetype_id >= 0)
+                try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Topaque_functions() {
+        long       filetype_id = -1;
+        String    opaque_name = null;
+
+        // Create a opaque datatype
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_OPAQUE, (long)4);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Topaque_functions:H5Tcreate " + err);
+        }
+        assertTrue("testH5Topaque_functions:H5Tcreate", filetype_id >= 0);
+
+        try {
+            H5.H5Tset_tag(filetype_id, "opaque type");
+            opaque_name = H5.H5Tget_tag(filetype_id);
+            assertTrue("Incorrect tag for opaque type", opaque_name.compareTo("opaque type")==0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Topaque_functions:H5Tset_get_tag " + err);
+        }
+        finally {
+            if (filetype_id >= 0)
+                try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Tvlen_create() {
+        long filetype_id = -1;
+
+       try {
+           filetype_id = H5.H5Tvlen_create(HDF5Constants.H5T_C_S1);
+           assertTrue("testH5Tvlen_create", filetype_id >= 0);
+
+           // Check if datatype is VL type
+           int vlclass = H5.H5Tget_class(filetype_id);
+           assertTrue("testH5Tvlen_create:H5Tget_class", vlclass == HDF5Constants.H5T_VLEN);
+           assertFalse("testH5Tis_variable_str:H5Tget_class", vlclass == HDF5Constants.H5T_STRING);
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tvlen_create.H5Tvlen_create " + err);
+       }
+       finally {
+           if (filetype_id >= 0)
+               try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+       }
+    }
+
+    @Test
+    public void testH5Tis_variable_str() {
+       long filetype_id = -1;
+
+       try {
+           filetype_id = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+           assertTrue("testH5Tis_variable_str.H5Tcopy: ", filetype_id >= 0);
+
+           // Convert to variable-length string
+           H5.H5Tset_size(filetype_id, HDF5Constants.H5T_VARIABLE);
+
+           // Check if datatype is VL string
+           int vlclass = H5.H5Tget_class(filetype_id);
+           assertTrue("testH5Tis_variable_str:H5Tget_class", vlclass == HDF5Constants.H5T_STRING);
+           assertFalse("testH5Tvlen_create:H5Tget_class", vlclass == HDF5Constants.H5T_VLEN);
+
+           assertTrue("testH5Tis_variable_str:H5Tis_variable_str", H5.H5Tis_variable_str(filetype_id));
+
+           // Verify that the class detects as a string
+           assertTrue("testH5Tis_variable_str:H5Tdetect_class", H5.H5Tdetect_class(filetype_id, HDF5Constants.H5T_STRING));
+       }
+       catch (Throwable err) {
+           err.printStackTrace();
+           fail("testH5Tis_variable_str " + err);
+       }
+       finally {
+           if (filetype_id >= 0)
+               try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+       }
+    }
+
+    @Test
+    public void testH5Tcompound_functions() {
+        long       filetype_id =-1;
+
+        // Create a compound datatype
+        try {
+            filetype_id = H5.H5Tcreate(HDF5Constants.H5T_COMPOUND, (long)16);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tcompound_functions:H5Tcreate " + err);
+        }
+        assertTrue("testH5Tcompound_functions:H5Tcreate", filetype_id >= 0);
+        try {
+            H5.H5Tinsert(filetype_id, "Lon", 0, HDF5Constants.H5T_NATIVE_DOUBLE);
+            H5.H5Tinsert(filetype_id, "Lat", 8, HDF5Constants.H5T_NATIVE_DOUBLE);
+
+            // Query member number and member index by member name, for enumeration type.
+            assertTrue("Can't get member number", H5.H5Tget_nmembers(filetype_id) == 2);
+            assertTrue("Can't get correct index number", H5.H5Tget_member_index(filetype_id, "Lat") == 1);
+
+            // We started to support this function for compound type in 1.8.6 release.
+            int order = H5.H5Tget_order(filetype_id);
+            assertFalse("Can't get order for compound type.", order == HDF5Constants.H5T_ORDER_ERROR);
+            assertTrue("Wrong order for this type.", (order == HDF5Constants.H5T_ORDER_LE) || (order == HDF5Constants.H5T_ORDER_BE));
+
+            // Make certain that the correct classes can be detected
+            assertTrue("Can't get correct class", H5.H5Tdetect_class(filetype_id, HDF5Constants.H5T_COMPOUND));
+            assertTrue("Can't get correct class", H5.H5Tdetect_class(filetype_id, HDF5Constants.H5T_FLOAT));
+            // Make certain that an incorrect class is not detected
+            assertFalse("Can get incorrect class", H5.H5Tdetect_class(filetype_id, HDF5Constants.H5T_TIME));
+
+            // Query member name by member index
+            String index_name = H5.H5Tget_member_name (filetype_id, 0);
+            assertTrue("Incorrect name for member index", index_name.compareTo("Lon")==0);
+
+            // Query member offset by member no
+            long index_offset = H5.H5Tget_member_offset (filetype_id, 1);
+            assertTrue("Incorrect offset for member no", index_offset == 8);
+
+            // Query member type by member index
+            long index_type = H5.H5Tget_member_type (filetype_id, 0);
+            assertTrue("Incorrect type for member index", H5.H5Tequal(HDF5Constants.H5T_NATIVE_DOUBLE, index_type));
+            if (index_type >= 0)
+                try {H5.H5Tclose(index_type);} catch (Exception ex) {}
+
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tcompound_functions:query " + err);
+        }
+        finally {
+            if (filetype_id >= 0)
+                try {H5.H5Tclose(filetype_id);} catch (Exception ex) {}
+        }
+    }
+
+}
diff --git a/java/test/TestH5Tbasic.java b/java/test/TestH5Tbasic.java
new file mode 100644
index 0000000..950f1c7
--- /dev/null
+++ b/java/test/TestH5Tbasic.java
@@ -0,0 +1,161 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Tbasic {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Tcopy() {
+        long H5strdid = -1;
+        try {
+            H5strdid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            assertTrue("H5.H5Tcopy",H5strdid > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tcopy: " + err);
+        }
+        finally {
+            if (H5strdid >= 0)
+                try {H5.H5Tclose(H5strdid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Tequal() {
+        long H5strdid = -1;
+        try {
+            H5strdid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            assertTrue("H5.H5Tcopy",H5strdid > 0);
+            boolean teq = H5.H5Tequal(HDF5Constants.H5T_C_S1, H5strdid);
+            assertTrue("H5.H5Tequal",teq);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tequal: " + err);
+        }
+        finally {
+            if (H5strdid >= 0)
+                try {H5.H5Tclose(H5strdid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Tequal_not() {
+        long H5strdid = -1;
+        try {
+            H5strdid = H5.H5Tcopy(HDF5Constants.H5T_STD_U64LE);
+            assertTrue("H5.H5Tcopy",H5strdid > 0);
+            boolean teq = H5.H5Tequal(HDF5Constants.H5T_IEEE_F32BE, H5strdid);
+            assertFalse("H5.H5Tequal",teq);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tequal_not: " + err);
+        }
+        finally {
+            if (H5strdid >= 0)
+                try {H5.H5Tclose(H5strdid);} catch (Exception ex) {}
+        }
+    }
+
+    @Test
+    public void testH5Tconvert() {
+        String[] strs = {"a1234","b1234"};
+        int srcLen = 5;
+        int dstLen = 10;
+        long srcId = -1;
+        long dstId = -1;
+        int dimSize = strs.length;
+        byte[]   buf = new byte[dimSize*dstLen];
+
+        for (int i=0; i<dimSize; i++)
+            System.arraycopy(strs[i].getBytes(), 0, buf, i*srcLen, 5);
+
+        try {
+            srcId = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            H5.H5Tset_size(srcId, (long)srcLen);
+
+            dstId = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            H5.H5Tset_size(dstId, (long)dstLen);
+
+            H5.H5Tconvert(srcId, dstId, dimSize, buf, null, HDF5Constants.H5P_DEFAULT);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Tconvert: " + err);
+        }
+        finally {
+            try {H5.H5Tclose(srcId);} catch (Exception ex) {}
+            try {H5.H5Tclose(dstId);} catch (Exception ex) {}
+        }
+
+        for (int i=0; i<strs.length; i++) {
+            assertTrue((new String(buf, i*dstLen, dstLen)).startsWith(strs[i]));
+        }
+    }
+
+    @Test
+    public void testH5Torder_size() {
+        long H5strdid = -1;
+        try {
+            // Fixed length string
+            H5strdid = H5.H5Tcopy(HDF5Constants.H5T_C_S1);
+            assertTrue("H5.H5Tcopy",H5strdid > 0);
+            H5.H5Tset_size(H5strdid, (long)5);
+            assertTrue(HDF5Constants.H5T_ORDER_NONE == H5.H5Tget_order(H5strdid));
+            H5.H5Tset_order(H5strdid, HDF5Constants.H5T_ORDER_NONE);
+            assertTrue(HDF5Constants.H5T_ORDER_NONE == H5.H5Tget_order(H5strdid));
+            assertTrue(5 == H5.H5Tget_size(H5strdid));
+
+            // Variable length string
+            H5.H5Tset_size(H5strdid, HDF5Constants.H5T_VARIABLE);
+            H5.H5Tset_order(H5strdid, HDF5Constants.H5T_ORDER_BE);
+            assertTrue(HDF5Constants.H5T_ORDER_BE == H5.H5Tget_order(H5strdid));
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("testH5Torder: " + err);
+        }
+        finally {
+            if (H5strdid >= 0)
+                try {H5.H5Tclose(H5strdid);} catch (Exception ex) {}
+        }
+    }
+}
diff --git a/java/test/TestH5Tparams.java b/java/test/TestH5Tparams.java
new file mode 100644
index 0000000..15cc6af
--- /dev/null
+++ b/java/test/TestH5Tparams.java
@@ -0,0 +1,389 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Tparams {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test//(expected = HDF5LibraryException.class)
+    public void testH5Tclose_invalid() throws Throwable {
+        long tid = H5.H5Tclose(-1);
+        assertTrue(tid == 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tcopy_invalid() throws Throwable {
+        H5.H5Tcopy(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tequal_invalid() throws Throwable {
+        H5.H5Tequal(-1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tlock_invalid() throws Throwable {
+        H5.H5Tlock(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_class_invalid() throws Throwable {
+        H5.H5Tget_class(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_size_invalid() throws Throwable {
+        H5.H5Tget_size(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_size_invalid() throws Throwable {
+        H5.H5Tset_size(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_order_invalid() throws Throwable {
+        H5.H5Tget_order(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_order_invalid() throws Throwable {
+        H5.H5Tset_order(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_precision_invalid() throws Throwable {
+        H5.H5Tget_precision(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_precision_long_invalid() throws Throwable {
+        H5.H5Tget_precision_long(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_precision_invalid() throws Throwable {
+        H5.H5Tset_precision(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_offset_invalid() throws Throwable {
+        H5.H5Tget_offset(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_offset_invalid() throws Throwable {
+        H5.H5Tset_offset(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tcreate_invalid() throws Throwable {
+        H5.H5Tcreate(-1, (long)0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Topen_null() throws Throwable {
+        H5.H5Topen(-1, null, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Topen_invalid() throws Throwable {
+        H5.H5Topen(-1, "Bogus", 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tcommit_null() throws Throwable {
+        H5.H5Tcommit(-1, null, 0, -1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tcommit_invalid() throws Throwable {
+        H5.H5Tcommit(-1, "Bogus", -1, -1, -1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tget_pad_null() throws Throwable {
+        H5.H5Tget_pad(-1, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_pad_invalid() throws Throwable {
+        int[] pad = new int[2];
+        H5.H5Tget_pad(-1, pad);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_pad_invalid() throws Throwable {
+        H5.H5Tset_pad(-1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_sign_invalid() throws Throwable {
+        H5.H5Tget_sign(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_sign_invalid() throws Throwable {
+        H5.H5Tset_sign(-1, 0);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tget_fields_null() throws Throwable {
+        H5.H5Tget_fields(-1, (long[])null);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Tget_fields_length_invalid() throws Throwable {
+        long[] fields = new long[2];
+        H5.H5Tget_fields(-1, fields);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_fields_invalid() throws Throwable {
+        long[] fields = new long[5];
+        H5.H5Tget_fields(-1, fields);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_fields_invalid() throws Throwable {
+        H5.H5Tset_fields(-1, -1, -1, -1, -1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_ebias_invalid() throws Throwable {
+        H5.H5Tget_ebias(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_ebias_long_invalid() throws Throwable {
+        H5.H5Tget_ebias_long(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_ebias_invalid() throws Throwable {
+        H5.H5Tset_ebias(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_norm_invalid() throws Throwable {
+        H5.H5Tget_norm(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_norm_invalid() throws Throwable {
+        H5.H5Tset_norm(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_inpad_invalid() throws Throwable {
+        H5.H5Tget_inpad(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_inpad_invalid() throws Throwable {
+        H5.H5Tset_inpad(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_cset_invalid() throws Throwable {
+        H5.H5Tget_cset(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_cset_invalid() throws Throwable {
+        H5.H5Tset_cset(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_strpad_invalid() throws Throwable {
+        H5.H5Tget_strpad(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_strpad_invalid() throws Throwable {
+        H5.H5Tset_strpad(-1, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_nmembers_invalid() throws Throwable {
+        H5.H5Tget_nmembers(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tget_member_index_null() throws Throwable {
+        H5.H5Tget_member_index(-1, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_member_index_invalid() throws Throwable {
+        H5.H5Tget_member_index(-1, "Bogus");
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_member_type_invalid() throws Throwable {
+        H5.H5Tget_member_type(-1, -1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_member_class_invalid() throws Throwable {
+        H5.H5Tget_member_class(-1, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tinsert_null() throws Throwable {
+        H5.H5Tinsert(-1, null, 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tinsert_invalid() throws Throwable {
+        H5.H5Tinsert(-1, "Bogus", 0, 0);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tpack_invalid() throws Throwable {
+        H5.H5Tpack(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tvlen_create_invalid() throws Throwable {
+        H5.H5Tvlen_create(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tset_tag_null() throws Throwable {
+        H5.H5Tset_tag(-1, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tset_tag_invalid() throws Throwable {
+        H5.H5Tset_tag(-1, "Bogus");
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_super_invalid() throws Throwable {
+        H5.H5Tget_super(-1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tenum_create_invalid() throws Throwable {
+        H5.H5Tenum_create(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tenum_insert_name_null() throws Throwable {
+        H5.H5Tenum_insert(-1, null, (byte[])null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tenum_insert_null() throws Throwable {
+        H5.H5Tenum_insert(-1, "bogus", (byte[])null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tenum_insert_invalid() throws Throwable {
+        byte[] enumtype = new byte[2];
+        H5.H5Tenum_insert(-1, "bogus", enumtype);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Tenum_nameof_invalid_size() throws Throwable {
+        H5.H5Tenum_nameof(-1, null, -1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tenum_nameof_value_null() throws Throwable {
+        H5.H5Tenum_nameof(-1, null, 1);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tenum_nameof_invalid() throws Throwable {
+        byte[] btype = new byte[2];
+        H5.H5Tenum_nameof(-1, btype, 1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tenum_valueof_name_null() throws Throwable {
+        H5.H5Tenum_valueof(-1, null, (byte[])null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tenum_valueof_null() throws Throwable {
+        H5.H5Tenum_valueof(-1, "bogus", (byte[])null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tenum_valueof_invalid() throws Throwable {
+        byte[] btype = new byte[2];
+        H5.H5Tenum_valueof(-1, "bogus", btype);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tget_member_value_null() throws Throwable {
+        H5.H5Tget_member_value(-1, -1, (byte[])null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_member_value_invalid() throws Throwable {
+        byte[] btype = new byte[2];
+        H5.H5Tget_member_value(-1, -1, btype);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testH5Tarray_create_invalid() throws Throwable {
+        H5.H5Tarray_create(-1, -1, null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tarray_create_value_null() throws Throwable {
+        H5.H5Tarray_create(-1, 1, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_array_ndims_invalid() throws Throwable {
+        H5.H5Tget_array_ndims(-1);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testH5Tget_array_dims_null() throws Throwable {
+        H5.H5Tget_array_dims(-1, null);
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Tget_native_type_invalid() throws Throwable {
+        H5.H5Tget_native_type(-1);
+    }
+
+}
diff --git a/java/test/TestH5Z.java b/java/test/TestH5Z.java
new file mode 100644
index 0000000..bdf3f1d
--- /dev/null
+++ b/java/test/TestH5Z.java
@@ -0,0 +1,100 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+package test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import hdf.hdf5lib.H5;
+import hdf.hdf5lib.HDF5Constants;
+import hdf.hdf5lib.exceptions.HDF5LibraryException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+public class TestH5Z {
+    @Rule public TestName testname = new TestName();
+
+    @Before
+    public void checkOpenIDs() {
+        assertTrue("H5 open ids is 0",H5.getOpenIDCount()==0);
+        System.out.print(testname.getMethodName());
+    }
+    @After
+    public void nextTestName() {
+        System.out.println();
+    }
+
+    @Test
+    public void testH5Zfilter_avail() {
+        try {
+            int filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_DEFLATE);
+            assertTrue("H5.H5Zfilter_avail_DEFLATE", filter_found > 0);
+            filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_FLETCHER32);
+            assertTrue("H5.H5Zfilter_avail_FLETCHER32", filter_found > 0);
+            filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_NBIT);
+            assertTrue("H5.H5Zfilter_avail_NBIT", filter_found > 0);
+            filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            assertTrue("H5.H5Zfilter_avail_SCALEOFFSET", filter_found > 0);
+            filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SHUFFLE);
+            assertTrue("H5.H5Zfilter_avail_SHUFFLE", filter_found > 0);
+//            filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SZIP);
+//            assertTrue("H5.H5Zfilter_avail_SZIP", filter_found > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Zfilter_avail " + err);
+        }
+    }
+
+    @Test
+    public void testH5Zget_filter_info() {
+        try {
+            int filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_DEFLATE);
+            assertTrue("H5.H5Zget_filter_info_DEFLATE_DECODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+            assertTrue("H5.H5Zget_filter_info_DEFLATE_ENCODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+            filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_FLETCHER32);
+            assertTrue("H5.H5Zget_filter_info_FLETCHER32_DECODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+            assertTrue("H5.H5Zget_filter_info_FLETCHER32_ENCODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+            filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_NBIT);
+            assertTrue("H5.H5Zget_filter_info_NBIT_DECODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+            assertTrue("H5.H5Zget_filter_info_NBIT_ENCODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+            filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SCALEOFFSET);
+            assertTrue("H5.H5Zget_filter_info_SCALEOFFSET_DECODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+            assertTrue("H5.H5Zget_filter_info_SCALEOFFSET_ENCODE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+            filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SHUFFLE);
+            assertTrue("H5.H5Zget_filter_info_DECODE_SHUFFLE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+            assertTrue("H5.H5Zget_filter_info_ENCODE_SHUFFLE_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+//            filter_flag = H5.H5Zget_filter_info(HDF5Constants.H5Z_FILTER_SZIP);
+//            assertTrue("H5.H5Zget_filter_info_DECODE_SZIP_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_DECODE_ENABLED) > 0);
+//            assertTrue("H5.H5Zget_filter_info_ENCODE_SZIP_ENABLED", (filter_flag & HDF5Constants.H5Z_FILTER_CONFIG_ENCODE_ENABLED) > 0);
+        }
+        catch (Throwable err) {
+            err.printStackTrace();
+            fail("H5.H5Zget_filter_info " + err);
+        }
+    }
+
+    @Test(expected = HDF5LibraryException.class)
+    public void testH5Zunregister_predefined() throws Throwable {
+        int filter_found = H5.H5Zfilter_avail(HDF5Constants.H5Z_FILTER_SHUFFLE);
+        assertTrue("H5.H5Zfilter_avail", filter_found > 0);
+
+        H5.H5Zunregister(HDF5Constants.H5Z_FILTER_SHUFFLE);
+    }
+}
diff --git a/java/test/h5ex_g_iterate.hdf b/java/test/h5ex_g_iterate.hdf
new file mode 100644
index 0000000..e462703
Binary files /dev/null and b/java/test/h5ex_g_iterate.hdf differ
diff --git a/java/test/junit.sh.in b/java/test/junit.sh.in
new file mode 100644
index 0000000..94b3415
--- /dev/null
+++ b/java/test/junit.sh.in
@@ -0,0 +1,262 @@
+#! /bin/sh
+#
+# 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.
+#
+
+top_builddir=@top_builddir@
+top_srcdir=@top_srcdir@
+srcdir=@srcdir@
+
+TESTNAME=JUnitInterface
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+# Set up default variable values if not supplied by the user.
+RM='rm -rf'
+CMP='cmp'
+DIFF='diff -c'
+CP='cp'
+DIRNAME='dirname'
+LS='ls'
+AWK='awk'
+
+nerrors=0
+verbose=yes
+
+# where the libs exist
+HDFLIB_HOME="$top_srcdir/java/lib"
+BLDLIBDIR="$top_builddir/java/lib"
+BLDDIR="."
+HDFTEST_HOME="$top_srcdir/java/test"
+JARFILE=jar at PACKAGE_TARNAME@- at PACKAGE_VERSION@.jar
+TESTJARFILE=jar at PACKAGE_TARNAME@test.jar
+test -d $BLDLIBDIR || mkdir -p $BLDLIBDIR
+
+######################################################################
+# library files
+# --------------------------------------------------------------------
+# All the library files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_LIBRARY_FILES="
+$HDFLIB_HOME/hamcrest-core.jar
+$HDFLIB_HOME/junit.jar
+$HDFLIB_HOME/slf4j-api-1.7.5.jar
+$HDFLIB_HOME/ext/slf4j-simple-1.7.5.jar
+$top_builddir/src/.libs/libhdf5.*
+$top_builddir/java/src/jni/.libs/libhdf5_java.*
+$top_builddir/java/src/$JARFILE
+"
+LIST_DATA_FILES="
+$HDFTEST_HOME/h5ex_g_iterate.hdf
+$HDFTEST_HOME/JUnit-interface.txt
+"
+
+expect="JUnit-interface.txt"
+actual="JUnit-interface.out"
+actual_err="JUnit-interface.err"
+actual_ext="JUnit-interface.ext"
+
+#
+# copy files from source dirs to test dir
+#
+COPY_LIBFILES="$LIST_LIBRARY_FILES"
+
+COPY_LIBFILES_TO_BLDLIBDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_LIBFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDLIBDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_LIBFILES_AND_BLDLIBDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDLIBDIR
+    fi
+}
+
+COPY_DATAFILES="$LIST_DATA_FILES"
+
+COPY_DATAFILES_TO_BLDDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_DATAFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            # skip cp if srcdir is same as destdir
+            # this occurs when build/test performed in source dir and
+            # make cp fail
+            SDIR=`$DIRNAME $tstfile`
+            INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+            INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+            if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+                $CP -f $tstfile $BLDDIR
+                if [ $? -ne 0 ]; then
+                    echo "Error: FAILED to copy $tstfile ."
+
+                    # Comment out this to CREATE expected file
+                    exit $EXIT_FAILURE
+                fi
+            fi
+        fi
+    done
+}
+
+CLEAN_DATAFILES_AND_BLDDIR()
+{
+    # skip rm if srcdir is same as destdir
+    # this occurs when build/test performed in source dir and
+    # make cp fail
+    SDIR=`$DIRNAME $tstfile`
+    INODE_SDIR=`$LS -i -d $SDIR | $AWK -F' ' '{print $1}'`
+    INODE_DDIR=`$LS -i -d $TESTDIR | $AWK -F' ' '{print $1}'`
+    if [ "$INODE_SDIR" != "$INODE_DDIR" ]; then
+        $RM $BLDDIR/*.hdf
+        $RM $BLDDIR/*.out
+        $RM $BLDDIR/*.err
+        $RM $BLDDIR/*.ext
+        $RM $BLDDIR/*.txt
+    fi
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# where Java is installed (requires jdk1.7.x)
+JAVAEXE=@JAVA@
+JAVAEXEFLAGS=@H5_JAVAFLAGS@
+
+###############################################################################
+#            DO NOT MODIFY BELOW THIS LINE
+###############################################################################
+
+# prepare for test
+COPY_LIBFILES_TO_BLDLIBDIR
+COPY_DATAFILES_TO_BLDDIR
+
+CPATH=".:"$BLDLIBDIR"/"$JARFILE":"$BLDLIBDIR"/junit.jar:"$BLDLIBDIR"/hamcrest-core.jar:"$BLDLIBDIR"/slf4j-api-1.7.5.jar:"$BLDLIBDIR"/slf4j-simple-1.7.5.jar:"$TESTJARFILE""
+
+TEST=/usr/bin/test
+if [ ! -x /usr/bin/test ]
+then
+TEST=`which test`
+fi
+
+if $TEST -z "$CLASSPATH"; then
+        CLASSPATH=""
+fi
+CLASSPATH=$CPATH":"$CLASSPATH
+export CLASSPATH
+
+if $TEST -n "$JAVAPATH" ; then
+        PATH=$JAVAPATH":"$PATH
+        export PATH
+fi
+
+if $TEST -e /bin/uname; then
+   os_name=`/bin/uname -s`
+elif $TEST -e /usr/bin/uname; then
+   os_name=`/usr/bin/uname -s`
+else
+   os_name=unknown
+fi
+
+if $TEST -z "$LD_LIBRARY_PATH" ; then
+        LD_LIBRARY_PATH=""
+fi
+
+case  $os_name in
+    Darwin)
+    DYLD_LIBRARY_PATH=$BLDLIBDIR:$DYLD_LIBRARY_PATH
+    export DYLD_LIBRARY_PATH
+    LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+    ;;
+    *)
+    LD_LIBRARY_PATH=$BLDLIBDIR:$LD_LIBRARY_PATH
+    ;;
+esac
+
+export LD_LIBRARY_PATH
+
+echo "$JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestAll"
+($JAVAEXE $JAVAEXEFLAGS -Xmx1024M -Dorg.slf4j.simpleLogger.defaultLog=trace -Djava.library.path=$BLDLIBDIR -cp $CLASSPATH -ea org.junit.runner.JUnitCore test.TestAll 1>$actual_ext 2>$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)/' \
+    -e 's/Time: [0-9]*\.[0-9]*/Time:  XXXX/' \
+    -e 's/v[1-9]*\.[0-9]*\./version (number)\./' \
+    -e 's/[1-9]*\.[0-9]*\.[0-9]*[^)]*/version (number)/' \
+    $actual_ext > $actual
+
+if $CMP $expect $actual; then
+   echo " PASSED"
+else
+   echo "*FAILED*"
+   echo "    Expected result differs from actual result"
+   nerrors="`expr $nerrors + 1`"
+   test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+fi
+
+
+# Clean up temporary files/directories
+CLEAN_LIBFILES_AND_BLDLIBDIR
+CLEAN_DATAFILES_AND_BLDDIR
+
+# Report test results and exit
+if test $nerrors -eq 0 ; then
+    echo "All $TESTNAME tests passed."
+    exit $EXIT_SUCCESS
+else
+    echo "$TESTNAME tests failed with $nerrors errors."
+    exit $EXIT_FAILURE
+fi
diff --git a/m4/ax_check_class.m4 b/m4/ax_check_class.m4
new file mode 100644
index 0000000..098aa77
--- /dev/null
+++ b/m4/ax_check_class.m4
@@ -0,0 +1,144 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_check_class.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_CLASS
+#
+# DESCRIPTION
+#
+#   AX_CHECK_CLASS tests the existence of a given Java class, either in a
+#   jar or in a '.class' file.
+#
+#   *Warning*: its success or failure can depend on a proper setting of the
+#   CLASSPATH env. variable.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AU_ALIAS([AC_CHECK_CLASS], [AX_CHECK_CLASS])
+AC_DEFUN([AX_CHECK_CLASS],[
+AC_REQUIRE([AX_PROG_JAVA])
+ac_var_name=`echo $1 | sed 's/\./_/g'`
+dnl Normaly I'd use a AC_CACHE_CHECK here but since the variable name is
+dnl dynamic I need an extra level of extraction
+AC_MSG_CHECKING([for $1 class])
+AC_CACHE_VAL(ax_cv_class_$ac_var_name, [
+if test x$ac_cv_prog_uudecode_base64 = xyes; then
+dnl /**
+dnl  * Test.java: used to test dynamicaly if a class exists.
+dnl  */
+dnl public class Test
+dnl {
+dnl
+dnl public static void
+dnl main( String[] argv )
+dnl {
+dnl     Class lib;
+dnl     if (argv.length < 1)
+dnl      {
+dnl             System.err.println ("Missing argument");
+dnl             System.exit (77);
+dnl      }
+dnl     try
+dnl      {
+dnl             lib = Class.forName (argv[0]);
+dnl      }
+dnl     catch (ClassNotFoundException e)
+dnl      {
+dnl             System.exit (1);
+dnl      }
+dnl     lib = null;
+dnl     System.exit (0);
+dnl }
+dnl
+dnl }
+cat << \EOF > Test.uue
+begin-base64 644 Test.class
+yv66vgADAC0AKQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
+bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
+bWJlclRhYmxlDAAKAAsBAANlcnIBABVMamF2YS9pby9QcmludFN0cmVhbTsJ
+AA0ACQcADgEAEGphdmEvbGFuZy9TeXN0ZW0IABABABBNaXNzaW5nIGFyZ3Vt
+ZW50DAASABMBAAdwcmludGxuAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWCgAV
+ABEHABYBABNqYXZhL2lvL1ByaW50U3RyZWFtDAAYABkBAARleGl0AQAEKEkp
+VgoADQAXDAAcAB0BAAdmb3JOYW1lAQAlKExqYXZhL2xhbmcvU3RyaW5nOylM
+amF2YS9sYW5nL0NsYXNzOwoAHwAbBwAgAQAPamF2YS9sYW5nL0NsYXNzBwAi
+AQAgamF2YS9sYW5nL0NsYXNzTm90Rm91bmRFeGNlcHRpb24BAAY8aW5pdD4B
+AAMoKVYMACMAJAoAAwAlAQAKU291cmNlRmlsZQEACVRlc3QuamF2YQAhAAEA
+AwAAAAAAAgAJAAUABgABAAcAAABtAAMAAwAAACkqvgSiABCyAAwSD7YAFBBN
+uAAaKgMyuAAeTKcACE0EuAAaAUwDuAAasQABABMAGgAdACEAAQAIAAAAKgAK
+AAAACgAAAAsABgANAA4ADgATABAAEwASAB4AFgAiABgAJAAZACgAGgABACMA
+JAABAAcAAAAhAAEAAQAAAAUqtwAmsQAAAAEACAAAAAoAAgAAAAQABAAEAAEA
+JwAAAAIAKA==
+====
+EOF
+                if $UUDECODE Test.uue; then
+                        :
+                else
+                        echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AS_MESSAGE_LOG_FD
+                        echo "configure: failed file was:" >&AS_MESSAGE_LOG_FD
+                        cat Test.uue >&AS_MESSAGE_LOG_FD
+                        ac_cv_prog_uudecode_base64=no
+                fi
+        rm -f Test.uue
+        if AC_TRY_COMMAND($JAVA $JAVAFLAGS Test $1) >/dev/null 2>&1; then
+                eval "ac_cv_class_$ac_var_name=yes"
+        else
+                eval "ac_cv_class_$ac_var_name=no"
+        fi
+        rm -f Test.class
+else
+        AX_TRY_COMPILE_JAVA([$1], , [eval "ac_cv_class_$ac_var_name=yes"],
+                [eval "ac_cv_class_$ac_var_name=no"])
+fi
+eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
+eval "HAVE_$ac_var_name=$`echo ac_cv_class_$ac_var_val`"
+HAVE_LAST_CLASS=$ac_var_val
+if test x$ac_var_val = xyes; then
+        ifelse([$2], , :, [$2])
+else
+        ifelse([$3], , :, [$3])
+fi
+])
+dnl for some reason the above statment didn't fall though here?
+dnl do scripts have variable scoping?
+eval "ac_var_val=$`eval echo ac_cv_class_$ac_var_name`"
+AC_MSG_RESULT($ac_var_val)
+])
diff --git a/m4/ax_check_classpath.m4 b/m4/ax_check_classpath.m4
new file mode 100644
index 0000000..3c9081a
--- /dev/null
+++ b/m4/ax_check_classpath.m4
@@ -0,0 +1,60 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_check_classpath.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_CLASSPATH
+#
+# DESCRIPTION
+#
+#   AX_CHECK_CLASSPATH just displays the CLASSPATH, for the edification of
+#   the user.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 5
+
+AU_ALIAS([AC_CHECK_CLASSPATH], [AX_CHECK_CLASSPATH])
+AC_DEFUN([AX_CHECK_CLASSPATH],[
+if test "x$CLASSPATH" = x; then
+        echo "You have no CLASSPATH, I hope it is good"
+else
+        echo "You have CLASSPATH $CLASSPATH, hope it is correct"
+fi
+])
diff --git a/m4/ax_check_java_home.m4 b/m4/ax_check_java_home.m4
new file mode 100644
index 0000000..cfe8f58
--- /dev/null
+++ b/m4/ax_check_java_home.m4
@@ -0,0 +1,80 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_check_java_home.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_JAVA_HOME
+#
+# DESCRIPTION
+#
+#   Check for Sun Java (JDK / JRE) installation, where the 'java' VM is in.
+#   If found, set environment variable JAVA_HOME = Java installation home,
+#   else left JAVA_HOME untouch, which in most case means JAVA_HOME is
+#   empty.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Gleen Salmon <gleensalmon at yahoo.com>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AU_ALIAS([AC_CHECK_JAVA_HOME], [AX_CHECK_JAVA_HOME])
+
+AC_DEFUN([AX_CHECK_JAVA_HOME],
+[AC_MSG_CHECKING([for JAVA_HOME])
+# We used a fake loop so that we can use "break" to exit when the result
+# is found.
+while true
+do
+  # If the user defined JAVA_HOME, don't touch it.
+  test "${JAVA_HOME+set}" = set && break
+
+  # On Mac OS X 10.5 and following, run /usr/libexec/java_home to get
+  # the value of JAVA_HOME to use.
+  # (http://developer.apple.com/library/mac/#qa/qa2001/qa1170.html).
+  JAVA_HOME=`/usr/libexec/java_home 2>/dev/null`
+  test x"$JAVA_HOME" != x && break
+
+  # See if we can find the java executable, and compute from there.
+  TRY_JAVA_HOME=`ls -dr /usr/java/* 2> /dev/null | head -n 1`
+  if test x$TRY_JAVA_HOME != x; then
+    PATH=$PATH:$TRY_JAVA_HOME/bin
+  fi
+  AC_PATH_PROG([JAVA_PATH_NAME], [java])
+  if test "x$JAVA_PATH_NAME" != x; then
+    JAVA_HOME=`echo $JAVA_PATH_NAME | sed "s/\(.*\)[[/]]bin[[/]]java.*/\1/"`
+    break
+  fi
+
+  AC_MSG_NOTICE([Could not compute JAVA_HOME])
+  break
+done
+AC_MSG_RESULT([$JAVA_HOME])
+])
diff --git a/m4/ax_check_junit.m4 b/m4/ax_check_junit.m4
new file mode 100644
index 0000000..39b52d1
--- /dev/null
+++ b/m4/ax_check_junit.m4
@@ -0,0 +1,70 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_check_junit.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_JUNIT
+#
+# DESCRIPTION
+#
+#   AX_CHECK_JUNIT tests the availability of the Junit testing framework,
+#   and set some variables for conditional compilation of the test suite by
+#   automake.
+#
+#   If available, JUNIT is set to a command launching the text based user
+#   interface of Junit, @JAVA_JUNIT@ is set to $JAVA_JUNIT and @TESTS_JUNIT@
+#   is set to $TESTS_JUNIT, otherwise they are set to empty values.
+#
+#   You can use these variables in your Makefile.am file like this :
+#
+#    # Some of the following classes are built only if junit is available
+#    JAVA_JUNIT  = Class1Test.java Class2Test.java AllJunitTests.java
+#
+#    noinst_JAVA = Example1.java Example2.java @JAVA_JUNIT@
+#
+#    EXTRA_JAVA  = $(JAVA_JUNIT)
+#
+#    TESTS_JUNIT = AllJunitTests
+#
+#    TESTS       = StandaloneTest1 StandaloneTest2 @TESTS_JUNIT@
+#
+#    EXTRA_TESTS = $(TESTS_JUNIT)
+#
+#    AllJunitTests :
+#       echo "#! /bin/sh" > $@
+#       echo "exec @JUNIT@ my.package.name.AllJunitTests" >> $@
+#       chmod +x $@
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Luc Maisonobe <luc at spaceroots.org>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 5
+
+AU_ALIAS([AC_CHECK_JUNIT], [AX_CHECK_JUNIT])
+AC_DEFUN([AX_CHECK_JUNIT],[
+AC_CACHE_VAL(ac_cv_prog_JUNIT,[
+AC_CHECK_CLASS(junit.textui.TestRunner)
+if test x"`eval 'echo $ac_cv_class_junit_textui_TestRunner'`" != xno ; then
+  ac_cv_prog_JUNIT='$(CLASSPATH_ENV) $(JAVA) $(JAVAFLAGS) junit.textui.TestRunner'
+fi])
+AC_MSG_CHECKING([for junit])
+if test x"`eval 'echo $ac_cv_prog_JUNIT'`" != x ; then
+  JUNIT="$ac_cv_prog_JUNIT"
+  JAVA_JUNIT='$(JAVA_JUNIT)'
+  TESTS_JUNIT='$(TESTS_JUNIT)'
+else
+  JUNIT=
+  JAVA_JUNIT=
+  TESTS_JUNIT=
+fi
+AC_MSG_RESULT($JAVA_JUNIT)
+AC_SUBST(JUNIT)
+AC_SUBST(JAVA_JUNIT)
+AC_SUBST(TESTS_JUNIT)])
diff --git a/m4/ax_check_rqrd_class.m4 b/m4/ax_check_rqrd_class.m4
new file mode 100644
index 0000000..8f14241
--- /dev/null
+++ b/m4/ax_check_rqrd_class.m4
@@ -0,0 +1,62 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_check_rqrd_class.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_RQRD_CLASS
+#
+# DESCRIPTION
+#
+#   AX_CHECK_RQRD_CLASS tests the existence of a given Java class, either in
+#   a jar or in a '.class' file and fails if it doesn't exist. Its success
+#   or failure can depend on a proper setting of the CLASSPATH env.
+#   variable.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 5
+
+AU_ALIAS([AC_CHECK_RQRD_CLASS], [AX_CHECK_RQRD_CLASS])
+AC_DEFUN([AX_CHECK_RQRD_CLASS],[
+CLASS=`echo $1|sed 's/\./_/g'`
+AC_CHECK_CLASS($1)
+if test "$HAVE_LAST_CLASS" = "no"; then
+        AC_MSG_ERROR([Required class $1 missing, exiting.])
+fi
+])
diff --git a/m4/ax_java_check_class.m4 b/m4/ax_java_check_class.m4
new file mode 100644
index 0000000..917638a
--- /dev/null
+++ b/m4/ax_java_check_class.m4
@@ -0,0 +1,85 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_java_check_class.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_JAVA_CHECK_CLASS(<class>,<action-if-found>,<action-if-not-found>)
+#
+# DESCRIPTION
+#
+#   Test if a Java class is available. Based on AX_PROG_JAVAC_WORKS. This
+#   version uses a cache variable which is both compiler, options and
+#   classpath dependent (so if you switch from javac to gcj it correctly
+#   notices and redoes the test).
+#
+#   The macro tries to compile a minimal program importing <class>. Some
+#   newer compilers moan about the failure to use this but fail or produce a
+#   class file anyway. All moaing is sunk to /dev/null since I only wanted
+#   to know if the class could be imported. This is a recommended followup
+#   to AX_CHECK_JAVA_PLUGIN with classpath appropriately adjusted.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Duncan Simpson <dps at simpson.demon.co.uk>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 9
+
+AU_ALIAS([DPS_JAVA_CHECK_CLASS], [AX_JAVA_CHECK_CLASS])
+AC_DEFUN([AX_JAVA_CHECK_CLASS],[
+m4_define([cache_val],[m4_translit(ax_cv_have_java_class_$1, " ." ,"__")])
+if test "x$CLASSPATH" != "x"; then
+xtra=" with classpath ${CLASSPATH}"
+xopts=`echo ${CLASSPATH} | ${SED} 's/^ *://'`
+xopts="-classpath $xopts"
+else xtra=""; xopts=""; fi
+cache_var="cache_val"AS_TR_SH([_Jc_${JAVAC}_Cp_${CLASSPATH}])
+AC_CACHE_CHECK([if the $1 class is available$xtra], [$cache_var], [
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* [#]xline __oline__ "configure" */
+import $1;
+public class Test {
+}
+EOF
+if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $xopts $JAVA_TEST) >/dev/null 2>&1; then
+  eval "${cache_var}=yes"
+else
+  eval "${cache_var}=no"
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
+fi
+rm -f $JAVA_TEST $CLASS_TEST
+])
+if eval 'test "x$'${cache_var}'" = "xyes"'; then
+$2
+true; else
+$3
+false; fi])
diff --git a/m4/ax_java_options.m4 b/m4/ax_java_options.m4
new file mode 100644
index 0000000..36c10d9
--- /dev/null
+++ b/m4/ax_java_options.m4
@@ -0,0 +1,48 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_java_options.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_JAVA_OPTIONS
+#
+# DESCRIPTION
+#
+#   AX_JAVA_OPTIONS adds configure command line options used for Java m4
+#   macros. This Macro is optional.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Devin Weaver <ktohg at tritarget.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 6
+
+AU_ALIAS([AC_JAVA_OPTIONS], [AX_JAVA_OPTIONS])
+AC_DEFUN([AX_JAVA_OPTIONS],[
+AC_ARG_WITH(java-prefix,
+                        [  --with-java-prefix=PFX  prefix where Java runtime is installed (optional)])
+AC_ARG_WITH(javac-flags,
+                        [  --with-javac-flags=FLAGS flags to pass to the Java compiler (optional)])
+AC_ARG_WITH(java-flags,
+                        [  --with-java-flags=FLAGS flags to pass to the Java VM (optional)])
+JAVAPREFIX=$with_java_prefix
+JAVACFLAGS=$with_javac_flags
+JAVAFLAGS=$with_java_flags
+AC_SUBST(JAVAPREFIX)dnl
+AC_SUBST(JAVACFLAGS)dnl
+AC_SUBST(JAVAFLAGS)dnl
+AC_SUBST(JAVA)dnl
+AC_SUBST(JAVAC)dnl
+])
diff --git a/m4/ax_jni_include_dir.m4 b/m4/ax_jni_include_dir.m4
new file mode 100644
index 0000000..becb33a
--- /dev/null
+++ b/m4/ax_jni_include_dir.m4
@@ -0,0 +1,132 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_JNI_INCLUDE_DIR
+#
+# DESCRIPTION
+#
+#   AX_JNI_INCLUDE_DIR finds include directories needed for compiling
+#   programs using the JNI interface.
+#
+#   JNI include directories are usually in the Java distribution. This is
+#   deduced from the value of $JAVA_HOME, $JAVAC, or the path to "javac", in
+#   that order. When this macro completes, a list of directories is left in
+#   the variable JNI_INCLUDE_DIRS.
+#
+#   Example usage follows:
+#
+#     AX_JNI_INCLUDE_DIR
+#
+#     for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
+#     do
+#             CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
+#     done
+#
+#   If you want to force a specific compiler:
+#
+#   - at the configure.in level, set JAVAC=yourcompiler before calling
+#   AX_JNI_INCLUDE_DIR
+#
+#   - at the configure level, setenv JAVAC
+#
+#   Note: This macro can work with the autoconf M4 macros for Java programs.
+#   This particular macro is not part of the original set of macros.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Don Anderson <dda at sleepycat.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 11
+
+AU_ALIAS([AC_JNI_INCLUDE_DIR], [AX_JNI_INCLUDE_DIR])
+AC_DEFUN([AX_JNI_INCLUDE_DIR],[
+
+JNI_INCLUDE_DIRS=""
+
+if test "x$JAVA_HOME" != x; then
+	_JTOPDIR="$JAVA_HOME"
+else
+	if test "x$JAVAC" = x; then
+		JAVAC=javac
+	fi
+	AC_PATH_PROG([_ACJNI_JAVAC], [$JAVAC], [no])
+	if test "x$_ACJNI_JAVAC" = xno; then
+		AC_MSG_ERROR([cannot find JDK; try setting \$JAVAC or \$JAVA_HOME])
+	fi
+	_ACJNI_FOLLOW_SYMLINKS("$_ACJNI_JAVAC")
+	_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'`
+fi
+
+case "$host_os" in
+        darwin*)        # Apple JDK is at /System location and has headers symlinked elsewhere
+                        case "$_JTOPDIR" in
+                        /System/Library/Frameworks/JavaVM.framework/*)
+				_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
+				_JINC="$_JTOPDIR/Headers";;
+			*)      _JINC="$_JTOPDIR/include";;
+                        esac;;
+        *)              _JINC="$_JTOPDIR/include";;
+esac
+_AS_ECHO_LOG([_JTOPDIR=$_JTOPDIR])
+_AS_ECHO_LOG([_JINC=$_JINC])
+
+# On Mac OS X 10.6.4, jni.h is a symlink:
+# /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/jni.h
+# -> ../../CurrentJDK/Headers/jni.h.
+AC_CHECK_FILE([$_JINC/jni.h],
+	[JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"],
+	[_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
+	 AC_CHECK_FILE([$_JTOPDIR/include/jni.h],
+		[JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"],
+                AC_MSG_ERROR([cannot find JDK header files]))
+	])
+
+# get the likely subdirectories for system specific java includes
+case "$host_os" in
+bsdi*)          _JNI_INC_SUBDIRS="bsdos";;
+freebsd*)       _JNI_INC_SUBDIRS="freebsd";;
+darwin*)        _JNI_INC_SUBDIRS="darwin";;
+linux*)         _JNI_INC_SUBDIRS="linux genunix";;
+osf*)           _JNI_INC_SUBDIRS="alpha";;
+solaris*)       _JNI_INC_SUBDIRS="solaris";;
+mingw*)		_JNI_INC_SUBDIRS="win32";;
+cygwin*)	_JNI_INC_SUBDIRS="win32";;
+*)              _JNI_INC_SUBDIRS="genunix";;
+esac
+
+# add any subdirectories that are present
+for JINCSUBDIR in $_JNI_INC_SUBDIRS
+do
+    if test -d "$_JTOPDIR/include/$JINCSUBDIR"; then
+         JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$JINCSUBDIR"
+    fi
+done
+])
+
+# _ACJNI_FOLLOW_SYMLINKS <path>
+# Follows symbolic links on <path>,
+# finally setting variable _ACJNI_FOLLOWED
+# ----------------------------------------
+AC_DEFUN([_ACJNI_FOLLOW_SYMLINKS],[
+# find the include directory relative to the javac executable
+_cur="$1"
+while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
+        AC_MSG_CHECKING([symlink for $_cur])
+        _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
+        case "$_slink" in
+        /*) _cur="$_slink";;
+        # 'X' avoids triggering unwanted echo options.
+        *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
+        esac
+        AC_MSG_RESULT([$_cur])
+done
+_ACJNI_FOLLOWED="$_cur"
+])# _ACJNI
diff --git a/m4/ax_prog_jar.m4 b/m4/ax_prog_jar.m4
new file mode 100644
index 0000000..3c60fca
--- /dev/null
+++ b/m4/ax_prog_jar.m4
@@ -0,0 +1,49 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_prog_jar.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAR
+#
+# DESCRIPTION
+#
+#   AX_PROG_JAR tests for an existing jar program. It uses the environment
+#   variable JAR then tests in sequence various common jar programs.
+#
+#   If you want to force a specific compiler:
+#
+#   - at the configure.in level, set JAR=yourcompiler before calling
+#   AX_PROG_JAR
+#
+#   - at the configure level, setenv JAR
+#
+#   You can use the JAR variable in your Makefile.in, with @JAR at .
+#
+#   Note: This macro depends on the autoconf M4 macros for Java programs. It
+#   is VERY IMPORTANT that you download that whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission.
+#
+#   The general documentation of those macros, as well as the sample
+#   configure.in, is included in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Egon Willighagen <e.willighagen at science.ru.nl>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 7
+
+AU_ALIAS([AC_PROG_JAR], [AX_PROG_JAR])
+AC_DEFUN([AX_PROG_JAR],[
+AS_IF([test "x$JAVAPREFIX" = x],
+      [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar])],
+      [test "x$JAR" = x && AC_CHECK_PROGS([JAR], [jar], [], [$JAVAPREFIX/bin])])
+test "x$JAR" = x && AC_MSG_ERROR([no acceptable jar program found in \$PATH])
+AC_PROVIDE([$0])dnl
+])
diff --git a/m4/ax_prog_java.m4 b/m4/ax_prog_java.m4
new file mode 100644
index 0000000..03961db
--- /dev/null
+++ b/m4/ax_prog_java.m4
@@ -0,0 +1,115 @@
+# ===========================================================================
+#       http://www.gnu.org/software/autoconf-archive/ax_prog_java.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVA
+#
+# DESCRIPTION
+#
+#   Here is a summary of the main macros:
+#
+#   AX_PROG_JAVAC: finds a Java compiler.
+#
+#   AX_PROG_JAVA: finds a Java virtual machine.
+#
+#   AX_CHECK_CLASS: finds if we have the given class (beware of CLASSPATH!).
+#
+#   AX_CHECK_RQRD_CLASS: finds if we have the given class and stops
+#   otherwise.
+#
+#   AX_TRY_COMPILE_JAVA: attempt to compile user given source.
+#
+#   AX_TRY_RUN_JAVA: attempt to compile and run user given source.
+#
+#   AX_JAVA_OPTIONS: adds Java configure options.
+#
+#   AX_PROG_JAVA tests an existing Java virtual machine. It uses the
+#   environment variable JAVA then tests in sequence various common Java
+#   virtual machines. For political reasons, it starts with the free ones.
+#   You *must* call [AX_PROG_JAVAC] before.
+#
+#   If you want to force a specific VM:
+#
+#   - at the configure.in level, set JAVA=yourvm before calling AX_PROG_JAVA
+#
+#     (but after AC_INIT)
+#
+#   - at the configure level, setenv JAVA
+#
+#   You can use the JAVA variable in your Makefile.in, with @JAVA at .
+#
+#   *Warning*: its success or failure can depend on a proper setting of the
+#   CLASSPATH env. variable.
+#
+#   TODO: allow to exclude virtual machines (rationale: most Java programs
+#   cannot run with some VM like kaffe).
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission.
+#
+#   A Web page, with a link to the latest CVS snapshot is at
+#   <http://www.internatif.org/bortzmeyer/autoconf-Java/>.
+#
+#   This is a sample configure.in Process this file with autoconf to produce
+#   a configure script.
+#
+#     AC_INIT(UnTag.java)
+#
+#     dnl Checks for programs.
+#     AC_CHECK_CLASSPATH
+#     AX_PROG_JAVAC
+#     AX_PROG_JAVA
+#
+#     dnl Checks for classes
+#     AX_CHECK_RQRD_CLASS(org.xml.sax.Parser)
+#     AX_CHECK_RQRD_CLASS(com.jclark.xml.sax.Driver)
+#
+#     AC_OUTPUT(Makefile)
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 9
+
+AU_ALIAS([AC_PROG_JAVA], [AX_PROG_JAVA])
+AC_DEFUN([AX_PROG_JAVA],[
+m4_define([m4_ax_prog_java_list], [kaffe java])dnl
+AS_IF([test "x$JAVAPREFIX" = x],
+      [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list])],
+      [test x$JAVA = x && AC_CHECK_PROGS([JAVA], [m4_ax_prog_java_list], [], [$JAVAPREFIX/bin])])
+test x$JAVA = x && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH])
+m4_undefine([m4_ax_prog_java_list])dnl
+AX_PROG_JAVA_WORKS
+AC_PROVIDE([$0])dnl
+])
diff --git a/m4/ax_prog_java_cc.m4 b/m4/ax_prog_java_cc.m4
new file mode 100644
index 0000000..3df064f
--- /dev/null
+++ b/m4/ax_prog_java_cc.m4
@@ -0,0 +1,104 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_prog_java_cc.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVA_CC
+#
+# DESCRIPTION
+#
+#   Finds the appropriate java compiler on your path. By preference the java
+#   compiler is gcj, then jikes then javac.
+#
+#   The macro can take one argument specifying a space separated list of
+#   java compiler names.
+#
+#   For example:
+#
+#     AX_PROG_JAVA_CC(javac, gcj)
+#
+#   The macro also sets the compiler options variable: JAVA_CC_OPTS to
+#   something sensible:
+#
+#    - for GCJ it sets it to: @GCJ_OPTS@
+#      (if GCJ_OPTS is not yet defined then it is set to "-C")
+#
+#    - no other compiler has applicable options yet
+#
+#   Here's an example configure.in:
+#
+#     AC_INIT(Makefile.in)
+#     AX_PROG_JAVA_CC()
+#     AC_OUTPUT(Makefile)
+#     dnl End.
+#
+#   And here's the start of the Makefile.in:
+#
+#     PROJECT_ROOT      := @srcdir@
+#     # Tool definitions.
+#     JAVAC             := @JAVA_CC@
+#     JAVAC_OPTS        := @JAVA_CC_OPTS@
+#     JAR_TOOL          := @jar_tool@
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Nic Ferrier <nferrier at tapsellferrier.co.uk>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 4
+
+# AX_PROG_JAVA_CC([COMPILER ...])
+# --------------------------
+# COMPILER ... is a space separated list of java compilers to search for.
+# This just gives the user an opportunity to specify an alternative
+# search list for the java compiler.
+AU_ALIAS([AC_PROG_JAVA_CC], [AX_PROG_JAVA_CC])
+AC_DEFUN([AX_PROG_JAVA_CC],
+[AC_ARG_VAR([JAVA_CC],                [java compiler command])dnl
+AC_ARG_VAR([JAVA_CC_FLAGS],           [java compiler flags])dnl
+m4_ifval([$1],
+      [AC_CHECK_TOOLS(JAVA_CC, [$1])],
+[AC_CHECK_TOOL(JAVA_CC, gcj)
+if test -z "$JAVA_CC"; then
+  AC_CHECK_TOOL(JAVA_CC, javac)
+fi
+if test -z "$JAVA_CC"; then
+  AC_CHECK_TOOL(JAVA_CC, jikes)
+fi
+])
+
+if test "$JAVA_CC" = "gcj"; then
+   if test "$GCJ_OPTS" = ""; then
+      AC_SUBST(GCJ_OPTS,-C)
+   fi
+   AC_SUBST(JAVA_CC_OPTS, @GCJ_OPTS@,
+        [Define the compilation options for GCJ])
+fi
+test -z "$JAVA_CC" && AC_MSG_ERROR([no acceptable java compiler found in \$PATH])
+])# AX_PROG_JAVA_CC
diff --git a/m4/ax_prog_java_works.m4 b/m4/ax_prog_java_works.m4
new file mode 100644
index 0000000..54e132a
--- /dev/null
+++ b/m4/ax_prog_java_works.m4
@@ -0,0 +1,134 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_prog_java_works.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVA_WORKS
+#
+# DESCRIPTION
+#
+#   Internal use ONLY.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 9
+
+AU_ALIAS([AC_PROG_JAVA_WORKS], [AX_PROG_JAVA_WORKS])
+AC_DEFUN([AX_PROG_JAVA_WORKS], [
+AC_PATH_PROG(UUDECODE, uudecode, [no])
+if test x$UUDECODE != xno; then
+AC_CACHE_CHECK([if uudecode can decode base 64 file], ac_cv_prog_uudecode_base64, [
+dnl /**
+dnl  * Test.java: used to test if java compiler works.
+dnl  */
+dnl public class Test
+dnl {
+dnl
+dnl public static void
+dnl main( String[] argv )
+dnl {
+dnl     System.exit (0);
+dnl }
+dnl
+dnl }
+cat << \EOF > Test.uue
+begin-base64 644 Test.class
+yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
+bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
+bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s
+YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG
+aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB
+AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB
+AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ=
+====
+EOF
+if $UUDECODE Test.uue; then
+        ac_cv_prog_uudecode_base64=yes
+else
+        echo "configure: __oline__: uudecode had trouble decoding base 64 file 'Test.uue'" >&AS_MESSAGE_LOG_FD
+        echo "configure: failed file was:" >&AS_MESSAGE_LOG_FD
+        cat Test.uue >&AS_MESSAGE_LOG_FD
+        ac_cv_prog_uudecode_base64=no
+fi
+rm -f Test.uue])
+fi
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+        rm -f Test.class
+        AC_MSG_WARN([I have to compile Test.class from scratch])
+        if test x$ac_cv_prog_javac_works = xno; then
+                AC_MSG_ERROR([Cannot compile java source. $JAVAC does not work properly])
+        fi
+        if test x$ac_cv_prog_javac_works = x; then
+                AX_PROG_JAVAC
+        fi
+fi
+AC_CACHE_CHECK(if $JAVA works, ac_cv_prog_java_works, [
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+TEST=Test
+changequote(, )dnl
+cat << \EOF > $JAVA_TEST
+/* [#]line __oline__ "configure" */
+public class Test {
+public static void main (String args[]) {
+        System.exit (0);
+} }
+EOF
+changequote([, ])dnl
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+        if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) && test -s $CLASS_TEST; then
+                :
+        else
+          echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+          cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
+          AC_MSG_ERROR(The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?))
+        fi
+fi
+if AC_TRY_COMMAND($JAVA -classpath . $JAVAFLAGS $TEST) >/dev/null 2>&1; then
+  ac_cv_prog_java_works=yes
+else
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
+  AC_MSG_ERROR(The Java VM $JAVA failed (see config.log, check the CLASSPATH?))
+fi
+rm -fr $JAVA_TEST $CLASS_TEST Test.uue
+])
+AC_PROVIDE([$0])dnl
+]
+)
diff --git a/m4/ax_prog_javac.m4 b/m4/ax_prog_javac.m4
new file mode 100644
index 0000000..d061243
--- /dev/null
+++ b/m4/ax_prog_javac.m4
@@ -0,0 +1,79 @@
+# ===========================================================================
+#       http://www.gnu.org/software/autoconf-archive/ax_prog_javac.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVAC
+#
+# DESCRIPTION
+#
+#   AX_PROG_JAVAC tests an existing Java compiler. It uses the environment
+#   variable JAVAC then tests in sequence various common Java compilers. For
+#   political reasons, it starts with the free ones.
+#
+#   If you want to force a specific compiler:
+#
+#   - at the configure.in level, set JAVAC=yourcompiler before calling
+#   AX_PROG_JAVAC
+#
+#   - at the configure level, setenv JAVAC
+#
+#   You can use the JAVAC variable in your Makefile.in, with @JAVAC at .
+#
+#   *Warning*: its success or failure can depend on a proper setting of the
+#   CLASSPATH env. variable.
+#
+#   TODO: allow to exclude compilers (rationale: most Java programs cannot
+#   compile with some compilers like guavac).
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 7
+
+AU_ALIAS([AC_PROG_JAVAC], [AX_PROG_JAVAC])
+AC_DEFUN([AX_PROG_JAVAC],[
+m4_define([m4_ax_prog_javac_list],["gcj -C" guavac jikes javac])dnl
+AS_IF([test "x$JAVAPREFIX" = x],
+      [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list])],
+      [test "x$JAVAC" = x && AC_CHECK_PROGS([JAVAC], [m4_ax_prog_javac_list], [], [$JAVAPREFIX/bin])])
+m4_undefine([m4_ax_prog_javac_list])dnl
+test "x$JAVAC" = x && AC_MSG_ERROR([no acceptable Java compiler found in \$PATH])
+AX_PROG_JAVAC_WORKS
+AC_PROVIDE([$0])dnl
+])
diff --git a/m4/ax_prog_javac_works.m4 b/m4/ax_prog_javac_works.m4
new file mode 100644
index 0000000..7dfa1e3
--- /dev/null
+++ b/m4/ax_prog_javac_works.m4
@@ -0,0 +1,72 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_prog_javac_works.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVAC_WORKS
+#
+# DESCRIPTION
+#
+#   Internal use ONLY.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stephane Bortzmeyer <bortzmeyer at pasteur.fr>
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation; either version 2 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AU_ALIAS([AC_PROG_JAVAC_WORKS], [AX_PROG_JAVAC_WORKS])
+AC_DEFUN([AX_PROG_JAVAC_WORKS],[
+AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* [#]line __oline__ "configure" */
+public class Test {
+}
+EOF
+if AC_TRY_COMMAND($JAVAC $JAVACFLAGS $JAVA_TEST) >/dev/null 2>&1; then
+  ac_cv_prog_javac_works=yes
+else
+  AC_MSG_ERROR([The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)])
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat $JAVA_TEST >&AS_MESSAGE_LOG_FD
+fi
+rm -f $JAVA_TEST $CLASS_TEST
+])
+AC_PROVIDE([$0])dnl
+])
diff --git a/m4/ax_prog_javadoc.m4 b/m4/ax_prog_javadoc.m4
new file mode 100644
index 0000000..bcb6045
--- /dev/null
+++ b/m4/ax_prog_javadoc.m4
@@ -0,0 +1,50 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_prog_javadoc.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVADOC
+#
+# DESCRIPTION
+#
+#   AX_PROG_JAVADOC tests for an existing javadoc generator. It uses the
+#   environment variable JAVADOC then tests in sequence various common
+#   javadoc generator.
+#
+#   If you want to force a specific compiler:
+#
+#   - at the configure.in level, set JAVADOC=yourgenerator before calling
+#   AX_PROG_JAVADOC
+#
+#   - at the configure level, setenv JAVADOC
+#
+#   You can use the JAVADOC variable in your Makefile.in, with @JAVADOC at .
+#
+#   Note: This macro depends on the autoconf M4 macros for Java programs. It
+#   is VERY IMPORTANT that you download that whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission.
+#
+#   The general documentation of those macros, as well as the sample
+#   configure.in, is included in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Egon Willighagen <e.willighagen at science.ru.nl>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 8
+
+AU_ALIAS([AC_PROG_JAVADOC], [AX_PROG_JAVADOC])
+AC_DEFUN([AX_PROG_JAVADOC],[
+AS_IF([test "x$JAVAPREFIX" = x],
+      [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc])],
+      [test "x$JAVADOC" = x && AC_CHECK_PROGS([JAVADOC], [javadoc], [], [$JAVAPREFIX/bin])])
+test "x$JAVADOC" = x && AC_MSG_ERROR([no acceptable javadoc generator found in \$PATH])
+AC_PROVIDE([$0])dnl
+])
diff --git a/m4/ax_prog_javah.m4 b/m4/ax_prog_javah.m4
new file mode 100644
index 0000000..cefc616
--- /dev/null
+++ b/m4/ax_prog_javah.m4
@@ -0,0 +1,64 @@
+# ===========================================================================
+#       http://www.gnu.org/software/autoconf-archive/ax_prog_javah.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PROG_JAVAH
+#
+# DESCRIPTION
+#
+#   AX_PROG_JAVAH tests the availability of the javah header generator and
+#   looks for the jni.h header file. If available, JAVAH is set to the full
+#   path of javah and CPPFLAGS is updated accordingly.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Luc Maisonobe <luc at spaceroots.org>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 8
+
+AU_ALIAS([AC_PROG_JAVAH], [AX_PROG_JAVAH])
+AC_DEFUN([AX_PROG_JAVAH],[
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CPP])dnl
+AC_PATH_PROG(JAVAH,javah)
+AS_IF([test -n "$ac_cv_path_JAVAH"],
+      [
+        AC_TRY_CPP([#include <jni.h>],,[
+        ac_save_CPPFLAGS="$CPPFLAGS"
+		_ACJAVAH_FOLLOW_SYMLINKS("$ac_cv_path_JAVAH")
+        ax_prog_javah_bin_dir=`AS_DIRNAME([$_ACJAVAH_FOLLOWED])`
+        ac_dir="`AS_DIRNAME([$ax_prog_javah_bin_dir])`/include"
+        AS_CASE([$build_os],
+                [cygwin*],
+                [ac_machdep=win32],
+                [ac_machdep=`AS_ECHO($build_os) | sed 's,[[-0-9]].*,,'`])
+        CPPFLAGS="$ac_save_CPPFLAGS -I$ac_dir -I$ac_dir/$ac_machdep"
+        AC_TRY_CPP([#include <jni.h>],
+                   ac_save_CPPFLAGS="$CPPFLAGS",
+                   AC_MSG_WARN([unable to include <jni.h>]))
+        CPPFLAGS="$ac_save_CPPFLAGS"])
+      ])
+])
+
+AC_DEFUN([_ACJAVAH_FOLLOW_SYMLINKS],[
+# find the include directory relative to the javac executable
+_cur="$1"
+while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
+        AC_MSG_CHECKING([symlink for $_cur])
+        _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
+        case "$_slink" in
+        /*) _cur="$_slink";;
+        # 'X' avoids triggering unwanted echo options.
+        *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$_slink";;
+        esac
+        AC_MSG_RESULT([$_cur])
+done
+_ACJAVAH_FOLLOWED="$_cur"
+])
diff --git a/m4/ax_try_compile_java.m4 b/m4/ax_try_compile_java.m4
new file mode 100644
index 0000000..a8ed6b2
--- /dev/null
+++ b/m4/ax_try_compile_java.m4
@@ -0,0 +1,55 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_try_compile_java.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_TRY_COMPILE_JAVA
+#
+# DESCRIPTION
+#
+#   AX_TRY_COMPILE_JAVA attempt to compile user given source.
+#
+#   *Warning*: its success or failure can depend on a proper setting of the
+#   CLASSPATH env. variable.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Devin Weaver <ktohg at tritarget.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 8
+
+AU_ALIAS([AC_TRY_COMPILE_JAVA], [AX_TRY_COMPILE_JAVA])
+AC_DEFUN([AX_TRY_COMPILE_JAVA],[
+AC_REQUIRE([AX_PROG_JAVAC])dnl
+cat << \EOF > Test.java
+/* [#]line __oline__ "configure" */
+ifelse([$1], , , [import $1;])
+public class Test {
+[$2]
+}
+EOF
+if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class
+then
+dnl Don't remove the temporary files here, so they can be examined.
+  ifelse([$3], , :, [$3])
+else
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat Test.java >&AS_MESSAGE_LOG_FD
+ifelse([$4], , , [  rm -fr Test.java Test.class
+  $4
+])dnl
+fi
+rm -fr Test.java Test.class])
diff --git a/m4/ax_try_run_java.m4 b/m4/ax_try_run_java.m4
new file mode 100644
index 0000000..c680f03
--- /dev/null
+++ b/m4/ax_try_run_java.m4
@@ -0,0 +1,56 @@
+# ===========================================================================
+#      http://www.gnu.org/software/autoconf-archive/ax_try_run_java.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_TRY_RUN_JAVA
+#
+# DESCRIPTION
+#
+#   AX_TRY_RUN_JAVA attempt to compile and run user given source.
+#
+#   *Warning*: its success or failure can depend on a proper setting of the
+#   CLASSPATH env. variable.
+#
+#   Note: This is part of the set of autoconf M4 macros for Java programs.
+#   It is VERY IMPORTANT that you download the whole set, some macros depend
+#   on other. Unfortunately, the autoconf archive does not support the
+#   concept of set of macros, so I had to break it for submission. The
+#   general documentation, as well as the sample configure.in, is included
+#   in the AX_PROG_JAVA macro.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Devin Weaver <ktohg at tritarget.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 2
+
+AU_ALIAS([AC_TRY_RUN_JAVA], [AX_TRY_RUN_JAVA])
+AC_DEFUN([AX_TRY_RUN_JAVA],[
+AC_REQUIRE([AX_PROG_JAVAC])dnl
+AC_REQUIRE([AX_PROG_JAVA])dnl
+cat << \EOF > Test.java
+/* [#]line __oline__ "configure" */
+ifelse([$1], , , [include $1;])
+public class Test {
+[$2]
+}
+EOF
+if AC_TRY_COMMAND($JAVAC $JAVACFLAGS Test.java) && test -s Test.class && ($JAVA $JAVAFLAGS Test; exit) 2>/dev/null
+then
+dnl Don't remove the temporary files here, so they can be examined.
+  ifelse([$3], , :, [$3])
+else
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat Test.java >&AS_MESSAGE_LOG_FD
+ifelse([$4], , , [  rm -fr Test.java Test.class
+  $4
+])dnl
+fi
+rm -fr Test.java Test.class])
diff --git a/release_docs/HISTORY-1_8_0-1_10_0.txt b/release_docs/HISTORY-1_8_0-1_10_0.txt
new file mode 100644
index 0000000..a364274
--- /dev/null
+++ b/release_docs/HISTORY-1_8_0-1_10_0.txt
@@ -0,0 +1,1742 @@
+HDF5  HISTORY
+=============
+
+
+INTRODUCTION
+
+This document describes the development history between the HDF5-1.8.0 and
+HDF5 1.10.0 releases. For more iformation see the SVN log.
+
+Information about supported and tested platforms is provided for historical
+reasons only and may not be accurate.
+
+
+For more information, see the HDF5 home page:
+
+    http://www.hdfgroup.org/HDF5/
+
+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 and languages
+- Bug Fixes since HDF5-1.8.0
+- Supported Platforms
+- Tested Configuration Features Summary
+- More Tested Platforms
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    -------------
+    - Java JNI library API wrappers and supporting files added as HDF_JAVA language
+      option. Both configure and CMake disable this option by default.
+      HDFFV-9552 (ADB 2016/02.28)
+    - CMake minimum is now 3.1.0. (ADB 2015/11/14)
+    - cmakehdf5: configure options added to enable or disable the building of
+      different API's and testings. See "cmakehdf5 --help" for details.
+      (AKC - 2014/12/09 HDFFV-8932)
+    - Autotools: Automake updated to 1.14.1 (ADB - 2014/04/08)
+    - CMake: Moved minimum CMake version to 2.8.11 which enables better library
+      include processing. (ADB - 2014/03/26)
+    - New configuration option added to change the default plugin path.
+      configure option is --with-default-plugin=location
+      cmake option is -DH5_DEFAULT_PLUGINDIR:PATH=location
+      HDFFV-8513.  (ADB 2013/09/04)
+    - Rename FFLAGS to FCFLAGS in configure (ADB 2013/08/13)
+    - CMake minimum is now 2.8.10. (ADB 2013/01/14)
+    - A new tool, cmakehdf5, which is a build command script similar to
+      buildhdf5 is added and is available in the bin directory.
+      (AKC - 2012/12/12)
+    - Fixed AIX Fortran compiler flags to use appropriate settings for
+      debugging, profiling, optimization situations. HDFFV-8069. (AKC
+      2012/09/27)
+    - Updated to latest autotools and changed all hard *.sh scripts to
+      configure managed *.sh.in files. Removed overloading of autotools
+      TESTS variable by examples and tests. Renamed configure.in to
+      configure.ac. (ADB - 2012/08/23 - HDFFV-8129)
+    - Added code to display the version information of XL fortran and C++
+      in the summary of configure. (AKC - 2012/02/28 - HDFFV-7793)
+    - 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 parallel
+      HDF5 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)
+    - PHDF5 changed to use "mpiexec", instead of mpirun, as the default MPI
+      applications startup command as defined in the MPI-2 definition, section
+      4.1. (AKC - 2010/6/11 - Bug 1921)
+    - Configure now adds appropriate defines for supporting large (64-bit)
+      files on all systems, where supported, by default, instead of only linux.
+      This largefile support is controllable with the --enable-largefile
+      configure option. This is replacing the linux-specific --enable-linux-lfs
+      option, which has been removed from configure.
+      (MAM - 2010/05/05 - 1772/1434)
+    - Upgraded versions of autotools used to generate configuration suite.
+      We now use Automake 1.11.1, Autoconf 2.65, and Libtool 2.2.6b.
+      MAM 2010/04/15.
+    - Added the xlc-* and mpcc_r-* BASENAME patterns to be recognized as IBM
+      compilers so that the ibm compiler options can be added properly.  This
+      allows non-system-default compiler command names (e.g. xlc-m.n.k.l) be
+      recognized. AKC 2009/11/26.
+    - Configuration suite now uses Automake 1.11 and Autoconf 2.64.
+      MAM 2009/08/11.
+    - Changed default Gnu fortran compiler from g95 to gfortran since
+      gfortran is more likely installed with gcc now. -AKC 2009/07/19-
+    - Added libtool version numbers to generated c++, fortran, and
+      hl libraries. MAM 2009/04/19.
+    - Regenerated Makefile.ins using Automake 1.10.2. MAM 2009/04/19.
+    - Added a Make target of check-all-install to test the correctness of
+      installing via the prefix= or $DESTDIR options. AKC - 2009/04/14
+    - Configuration suite now uses Libtool 2.2.6a. MAM 2008/10/24
+
+    - Configuration suite now uses Autoconf 2.61, Automake 1.10.1.
+      MAM 2008/05/05.
+
+    - The new configure option "--disable-sharedlib-rpath" disables
+      embedding the '-Wl,-rpath' information into executables when
+      shared libraries are produced, and instead solely relies on the
+      information in LD_LIBRARY_PATH. (MAM - 2008/05/15)
+
+    Library:
+    --------
+
+    - Virtual Dataset feature was added
+      (NAF - 2015-10-05, VDS-193)
+
+    - H5F_ACC_DEBUG labeled "deprecated"
+
+      The symbol was originally used to emit some extra debugging
+      informationi in the multi VFD. The underlying functionality
+      was removed due to disuse in HDF5 1.8.16 though the symbol
+      remained defined since it was visible in H5Fpublic.h.
+
+      In this release, the symbol has been labeled deprecated and will
+      not be defined when H5_NO_DEPRECATED_SYMBOLS is defined.
+
+      (DER - 2015-04-30, HDFFV-1074)
+
+    - The library can load filter libraries dynamically during runtime.  Users
+      can set the search path through environment variable HDF5_PLUGIN_PATH
+      and call H5Pset_filter to enable a dynamic filter. (SLU - 2013/04/08)
+    - Added new API functions H5Dscatter and H5Dgather to scatter data to and
+      and gather data from a selection within a memory buffer.
+      (NAF - 2013/02/05)
+    - The library now supports the data conversion from enumeration to numeric
+      (integer and floating-point number) datatypes. See Issue 8221.
+      (SLU - 2012/10/23)
+    - The data sieve buffer size was for all the datasets in the file.  It
+      could waste memory if any dataset size is smaller than the sieve buffer
+      size.  Now the library picks the smaller one between the dataset size
+      and the sieve buffer size from the file access property. See Issue 7934.
+      (SLU - 2012/4/2)
+    - I added a new parameter of object access property list to the function
+      H5Rdereference (Issue 2763).  It's called H5Rdereference2 now.  The former
+      H5Rdereference function has been deprecated to H5Rdereference1. (SLU -
+      2011/7/18)
+    - H5Tcreate now supports string type (fixed-length and variable-length).
+      (SLU - 2011/05/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)
+    - Removed all old code for Metraowerks compilers, bracketed by
+      __MWERKS__). Metraowerks compiler is long gone. (AKC - 2010/11/17)
+    - Added support for threadsafety on windows using the windows threads
+      library. Use the HDF5_ENABLE_THREADSAFE option in CMake while on a
+      windows platform to enable this functionality. This is supported on
+      Windows Vista and newer Windows operating systems. (MAM - 2010/09/10)
+    - When a mandatory filter failed to write data chunks, the dataset
+      couldn't close (bug 1260).  The fix releases all resources and closes
+      the dataset but returns a failure. (SLU - 2010/9/8)
+    - H5Tset_order and H5Tget_order now support all data types.  A new byte
+      order H5T_ORDER_MIXED has been added specifically for compound datatype
+      and its derived type.  Please see bug #1934. (SLU - 2010/8/23)
+    - Improved performance of the chunk cache by avoiding unnecessary b-tree
+      lookups of chunks already in cache. (NAF - 2010/06/15)
+    - Greatly improved performance of extending a dataset with early
+      allocation. (NAF - 2010/03/24 - 1637)
+    - Added support for filtering densely stored groups.  Many of the API
+      functions related to filters have been extended to support dense groups
+      as well as datasets.  Pipeline messages can now be stored in a group's
+      object header. (NAF/QAK - 2009/10/8)
+    - The embedded library information is displayed by H5check_version() if a
+      version mismatch is detected.  Also changed H5check_version() to
+      suppress the warning message totally if $HDF5_DISABLE_VERSION_CHECK is 2
+      or higher. (Old behavior treated 3 or higher the same as 1, that is
+      print a warning and allows the program to continue. (AKC - 2009/9/28)
+    - If a user does not care for the extra library information insert
+      in the executables, he may turn it off by --disable-embedded-libinfo
+      during configure. (AKC - 2009/9/15)
+    - Corrected problem where library would re-write the superblock in a file
+      opened for R/W access, even when no changes were made to the file.
+      (QAK - 2009/08/20, Bz#1473)
+    - Separated "factory" free list class from block free lists. These free
+      lists are dynamically created and manage blocks of a fixed size.
+      H5set_free_list_limits() will use the same settings specified for block
+      free lists for factory free lists. (NAF - 2009/04/08)
+    - Added support for dense attributes to H5Ocopy. (XCao/NAF - 2009/01/29)
+    - Added H5Pset_elink_cb and H5Pget_elink_cb functions to support a
+      user-defined callback function for external link traversal.
+      (NAF - 2009/01/08)
+    - Added H5Pset_elink_acc_flags and H5Pget_elink_acc_flags functions to
+      allow the user to specify the file access flags used to open the target
+      file of an external link. (NAF - 2009/01/08)
+    - Added H5Pset_chunk_cache() and H5Pget_chunk_cache() functions to allow
+      individual rdcc configuration for each dataset.  Added
+      H5Dget_access_plist() function to retrieve a dataset access property
+      list from a dataset. (NAF - 2008/11/12)
+    - Added H5Iis_valid() function to check if an id is valid without producing
+      an error message. (NAF - 2008/11/5)
+    - Added two new public routines: H5Pget_elink_fapl() and
+      H5Pset_elink_fapl(). (see bug #1247) (VC - 2008/10/13)
+    - Improved free space tracking in file to be faster. (QAK - 2008/10/06)
+    - Added 'mounted' field to H5G_info_t struct. (QAK - 2008/07/15)
+
+    Parallel Library:
+    -----------------
+    - Add H5Pget_mpio_no_collective_cause() function that retrive reasons
+      why the collective I/O was broken during read/write IO access.
+      (JKM - 2012/08/30 HDFFV-8143)
+    - Special Collective IO (IO when some processes do not contribute to the
+      IO) and 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).
+    - Modified parallel tests to run with arbitrary number of processes. The
+      modified tests are testphdf5 (parallel dataset access), t_chunk_alloc
+      (chunk allocation), and t_posix_compliant (posix compliance). The rest of
+      the parallel tests already use in the code the number of processes
+      available in the communicator. (CMC - 2009/04/28)
+
+    Fortran Library:
+    ----------------
+
+    - Added parallel routine H5Pget_mpio_actual_io_mode_f (MSB - 2012/09/27)
+
+    - Added for the C API the Fortran wrapper:
+       h5ocopy_f (MSB - 2012/03/22)
+
+
+    HDF5 Fortran library was enhanced to support Fortran 2003 standard.
+    The following features are available when the HDF5 library is configured
+    using --enable-fortran --enable-fortran2003 configure flags AND
+    if fortran compiler is Fortran2003 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
+
+     - Subroutines with additional optional parameters:
+         h5pcreate_class_f
+                                               (EIP - 2011/10/14)
+
+        - Added for the C APIs the Fortran wrappers:
+            h5dget_access_plist_f
+            h5iis_valid_f
+            h5pset_chunk_cache_f
+            h5pget_chunk_cache_f
+          (MSB - 2009/04/17)
+
+
+
+    C++ Library:
+    ------------
+     - New member function added
+
+       The assignment operator ArrayType::operator= is added because ArrayType
+       has pointer data members.
+
+       (BMR, 2016/03/07, HDFFV-9562)
+
+  - New member functions
+    + Overloaded CommonFG::getObjnameByIdx to take char* for name
+    + Overloaded CommonFG::getObjTypeByIdx to return type name as a char*.
+            (BMR - 2010/05/02)
+    + DataSet::getInMemDataSize() to simplify getting the dataset's
+            data size in memory.  (BMR - 2009/07/26)
+        - These member functions were added as wrapper for H5Rdereference to
+          replace the incorrect IdComponent::dereference().
+                void H5Object::dereference(H5File& h5file, void* ref)
+                void H5Object::dereference(H5Object& obj, void* ref)
+          In addition, these constructors were added to create the associated
+          objects by way of dereference:
+                Attribute(H5Object& obj, void* ref);
+                Attribute(H5File& file, void* ref);
+                DataSet(H5Object& obj, void* ref);
+                DataSet(H5File& file, void* ref);
+                DataType(H5Object& obj, void* ref);
+                DataType(H5File& file, void* ref);
+                Group(H5Object& obj, void* ref);
+                Group(H5File& obj, void* ref);
+          (BMR - 2008/08/10)
+
+
+
+    Tools:
+    ------
+     - h5repack: Added ability to use plugin filters. HDFFV-8345 (ADB - 2013/09/04).
+     - h5dump: Added option -N --any_path, which searches the file for paths that
+               match the search path. HDFFV-7989 (ADB - 2013/08/12).
+     - h5dump: Added optional arg 0 to -A, which excludes attributes from display.
+               HDFFV-8134 (ADB - 2013/08/01).
+     - h5dump: Fixed displaying compression ratio for unknown or user-defined
+               filters. HDFFV-8344 (XCAO 2013/03/19)
+     - h5dump: Changed UNKNOWN_FILTER to USER_DEFINED_FILTER for user defined filter.
+               HDFFV-8346 (XCAO 2013/03/19)
+     - h5dump: Added capability for "-a" option to show attributes containing "/"
+               by using an escape character. For example, for a dataset "/dset"
+               containing attribute "speed(m/h)", use "h5dump -a "/dset/speed(\/h)"
+               to show the content of the attribute. See details at HDFFV-7523
+               (PC -- 2012/03/12)
+     - h5dump: Added ability to apply command options across multiple files using a
+               wildcard in the filename. Example; "h5dump -H -d Dataset1 tarr*.h5".
+               HDFFV-7876 (ADB - 2012/03/12).
+     - h5repack: Improved performance for big chunked datasets (size > 128MB)
+               when used with layout (-l) or compression (-f) option.
+               It would perform much better prior to the improvement,
+               especially for cases that chunk dimentions looks like
+               "1024x5x1" (compare to "1x5x1024"). When bigger numbers
+               are toward front and smaller number is toward back in chunk
+               dimentions.  HDFFV-7862 (JKM - 2012/03/01)
+     - h5dump: Added new option --no-compact-subset. This option will not
+               interpret the '[' character as starting the compact form of
+               subsetting. This is useful when the "h5dump error: unable to
+               open dataset "datset_name"" message is output because a dataset
+               name contains a '[' character.  HDFFV-7689 (ADB - 2012/01/31)
+     - h5dump: Corrected 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)
+     - h5diff: Added new level for -v (verbose) option. The new levels are
+               1 and 2.  So -v1 and -v2 can be specified to view more
+               information about 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/02/24)
+     - h5diff: Add a new flag --exclude-path. Specified path to an object will
+               be excluded from comparing the two files or two groups. If group
+               is specified all the member objects will be excluded.
+               (JKM - 2010/09/16).
+     - h5ls: Add new flag --no-dangling-links. (refer to --help for details)
+               (JKM - 2010/06/15)
+     - h5ls: Add new flag --follow-symlinks. (refer to --help for details)
+               (JKM - 2010/05/25)
+     - h5diff: Add new flag --no-dangling-links. (refer to --help for details)
+               (JKM - 2010/02/10)
+     - h5diff: Add new flag --follow-symlinks. (refer to --help for details)
+               (JKM - 2010/01/25)
+     - h5diff: fix for displaying garbage value on LE machine for BE data.
+             (JKM - 2009/11/20)
+     - h5dump: subsetting now allows default for count. Also trailing ; in short form
+               can be omitted after last specified value.
+               (ADB - 2009/09/04)
+     - h5dump/h5ls: now can display data in region references
+               using new -R, --region flag.
+               (ADB - 2009/09/04)
+     - h5diff: new flag, -c, --compare, list objects that are not comparable.
+               (PVN - 2009/4/10 - 1368)
+     - h5diff new flag, -N, --nan, avoids NaNs detection. (PVN - 2009/4/10)
+     - h5dump correctly specifies XML dtd / schema urls (ADB - 2009/4/3 - 1519)
+     - h5repack now handles group creation order. (PVN - 2009/4/2 - 1402)
+     - h5dump: added a printing of the compression ratio of uncompressed and compressed
+         sizes for cases where compression  filters are present. (PVN - 2008/05/01)
+     - h5dump: added an option to allow a user defined formatting string for printf
+         regarding floating point numbers. (PVN - 2008/05/06)
+     - h5dump: support for external links, display the object that the external link
+         points to. (PVN - 2008/05/12)
+     - h5repack: add a userblock to an HDF5 file during the repack. (PVN - 2008/08/26)
+     - h5repack: add 2 options that call H5Pset_alignment in the repacked file. (PVN - 2008/08/29)
+     - h5ls: added capability to traverse through external links when the -r
+         (recursive) flag is given. (NAF - 2008/09/16)
+     - h5ls: added -E option to enable traversal of external links.  h5ls will
+         not traverse external links without this flag being set.
+         (NAF - 2008/10/06)
+     - h5diff: added support for long double (PVN - 2008/10/28)
+     - h5dump: binary output defaults to NATIVE with -b optionally accepting
+            the form of binary output (NATIVE, FILE, BE, LE). (PVN - 2008/10/30)
+     - h5diff: return 1 for file differences when both file graphs differ by any object.
+            Error return code was changed to 2 from -1. (PVN - 2008/10/30)
+     - h5import: TEXTFPE (scientific format) was deprecated. Use TEXTFP
+            instead (PVN - 2008/10/30)
+     - h5repack: When user doesn't specify a chunk size, h5repack now defines a default
+            chunk size as the same size of the size of the hyperslab used to read the chunks.
+            The size of the hyperslabs are defined as the size of each dimension or a
+            predefined constant, whatever is smaller. This assures that the chunk
+            read fits in the chunk cache. (PVN - 2008/11/21)
+     - h5diff: h5diff treats two INFINITY values different. Fixed by checking  (value==expect)
+            before call ABS(...) at h5diff_array.c This will make that (INF==INF) is true
+            (INF is treated as an number instead of NaN) (PC -- 2009/07/28)
+     - h5diff: add option "--use-system-epsilon" to print difference if (|a-b| > EPSILON)
+            Change default to use strict equality (PC -- 2009/09/12)
+
+
+    High-Level APIs:
+    ---------------
+
+     C Packet Table API
+     ------------------ 
+     - Replacement of a public function
+
+      The existing function H5PTcreate_fl limits applications to deflate
+      compression only.  The public function H5PTcreate is added to replace
+      H5PTcreate_fl.  H5PTcreate takes a property list ID to provide
+      flexibility on creation properties.
+
+	hid_t H5PTcreate(hid_t loc_id, const char *dset_name,
+                         hid_t dtype_id, hsize_t chunk_size, hid_t plist_id);
+                                               (BMR, 2016/03/04, HDFFV-8623)
+
+     - New public functions
+
+      Two accessor functions were added per HDFFV-8623/patch 003.
+	/* Returns the ID of the dataset associated with the packet table  */
+	   hid_t H5PTget_dataset(hid_t table_id);
+
+	/* Returns the ID of the datatype the packet table uses */
+	   hid_t H5PTget_type(hid_t table_id);
+                                               (BMR, 2016/03/04, HDFFV-8623)
+
+     - Regarding #ifdef VLPT_REMOVED
+
+      The #ifdef VLPT_REMOVED blocks are removed from the PT library source
+      except the following cases:
+      + H5PTis_varlen() is made available again.
+      + H5PTfree_vlen_readbuff() now became H5PTfree_vlen_buff()
+                                               (BMR, 2016/03/04, HDFFV-442)
+
+     C++ Packet Table API
+     -------------------- 
+     - New constructor
+
+      An overloaded constructor is added to FL_PacketTable and takes a property
+      list ID to provide flexibility on creation properties.
+
+	FL_PacketTable(hid_t fileID, hid_t plist_id, const char* name, hid_t dtypeID, hsize_t chunkSize);
+                                               (BMR, 2016/03/08, HDFFV-8623)
+
+     - New public functions
+
+      Two accessor wrappers to class PacketTable, per HDFFV-8623/patch 004.
+	/* Returns the ID of the dataset associated with the packet table  */
+	   hid_t PacketTable::GetDataset()
+
+	/* Returns the ID of the datatype the packet table uses */
+	   hid_t PacketTable::GetDataset()
+                                               (BMR, 2016/03/04, HDFFV-8623)
+
+     - Member functions having "char*" as an argument
+
+      Overloaded functions were added to provide "const char*" argument, the
+      existing version will be deprecated.
+                                               (BMR, 2016/03/04)
+
+     - Regarding #ifdef VLPT_REMOVED
+
+      The #ifdef VLPT_REMOVED blocks are removed from the PT library source
+      except the following cases:
+	+ VL_PacketTable::IsVariableLength() is moved to PacketTable
+	+ VL_PacketTable::FreeReadBuff() now became PacketTable::FreeBuff()
+
+                                               (BMR, 2016/03/04, HDFFV-442)
+
+
+     Internal header file
+     -------------------- 
+     - A new API function H5DOwrite_chunk.  It writes a data chunk directly
+            into a file bypassing hyperslab selection, data conversion, and
+            filter pipeline.  The user must be careful with the function and
+            clearly understand the I/O process of the library.
+            (SLU - 2013/2/11)
+     - New API: h5ltpath_valid (Fortran: h5ltpath_valid_f) which checks
+            if a path is correct and determines if a link resolves to a valid
+            object and checks that the link does not dangle. (MSB- 2012/3/15)
+
+     - Added Fortran wrappers for Dimension Scale APIs. HDFFV-3797
+          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)
+
+     - Table: In version 3.0 of Table, "NROWS" (used to store number of records) was
+            deprecated (PVN - 2008/11/24)
+
+    Documentation
+    -------------
+
+Support for new platforms, languages and compilers.
+=======================================
+    - Intel V11.1 uses now -O3 optimization in production mode (EIP - 2010/10/08)
+    - PathScale compilers are recognized and can build the HDF5 library
+      properly. AKC - 2009/7/28 -
+    - SunOS 5.11 (emu) 32-bit and 64-bit with Sun C/C++ 5.12 compiler and
+      Sun Fortran 95 8.6 compiler. (SLU - 2013/04/15)
+
+Bug Fixes since HDF5-1.8.0 release
+==================================
+
+    Library
+    -------
+      - Incorrect usage of list in CMake COMPILE_DEFINITIONS set_property
+
+        The CMake command, set_property with COMPILE_DEFINITIONS property
+        needs a quoted semi-colon separated list of values. CMake will
+        transform the list to a series of -D{value} for the compile.
+
+        (ADB - 2014/12/09, HDFV-9041)
+
+      - H5Z.c: H5Zfilter_avail(H5Z_filter_t id)
+           Added else block if the call to the internal H5Z_filter_avail(id) does not
+           fail and returns FALSE. This block calls the H5PL_load(H5PL_TYPE_FILTER, (int)id)
+           function to attempt to dynamically load the filter plugin.
+           (ADB - 2014/03/03 HDFFV-8629)
+      - Added const qualifier to source buffer parameters in H5Dgather and
+            H5D_scatter_func_t (H5Dscatter callback).  (NAF - 2013/7/02)
+      - Fixed an error involving failure to write fill values to the user's
+            buffer when reading unallocated chunks from datasets that have a
+            fill value set to H5D_FILL_VALUE_DEFAULT. A consequence of this
+            was the reporting of spurious data values in h5dump and h5diff
+            output.
+            (HDFFV-8247; JP - 2013/05/03)
+      - Fixed an error that could occur when calling H5Ocopy within an
+            H5Literate callback (and possibly other situations).
+            (NAF - 2012/7/25 - HDFFV-5853)
+      - Fixed an error that would occur when copying an object with attribute
+            creation order tracked and indexed. (NAF - 2012/3/28 - HDFFV-7762)
+      - Fixed a bug in H5Ocopy(): When copying an opened object, call the
+        object's flush class action to ensure that cached data is flushed
+            so that H5Ocopy will get the correct data.
+        (VC - 2012/3/27 - HDFFV-7853)
+      - When an application tries to write or read many small data chunks and
+            runs out of memory, the library had a seg fault.  The fix is to
+            return the error stack with proper information. (SLU - 2012/3/23.
+            Issue 7785)
+      - H5Pset_data_transform had seg fault in some cases like x*-100.  It
+            works correctly now and handles other cases like 100-x or 2/x.
+            (SLU - 2012/3/15.  Issue 7922)
+      - Fixed rare corruption bugs that could occur when using the new object
+            header format. (NAF - 2012/3/15 - HDFFV-7879)
+      - Creating a dataset in a read-only file caused seg fault when the file
+            is closed.  It's fixed.  The attemp to create a dataset will fail
+            with the error stack indicating the file is read-only. (SLU -
+            2012/1/25. Issue 7756)
+      - Fixed a seg fault that could occur when shrinking a dataset with chunks
+            larger than 1 MB. (NAF - 2011/11/30 - HDFFV-7833)
+      - Fixed a bug that could cause file corruption when copying named
+            datatypes to a file using shared messages. (NAF - 2011/11/14)
+      - Fixed a bug that could cause H5Oget_info to return the wrong address
+            after copying a named datatype. (NAF - 2011/11/14)
+      - The library allowed the conversion of strings between ASCII and UTF8
+            (Issue 7582).  We have corrected it to report an error under this
+            situation. (SLU - 2011/11/8)
+      - The library had seg fault when it tried to shrink the size of compound type
+            through H5Tset_size immediately after the type was created (Issue
+            7618). It's fixed now. (SLU - 2011/10/26)
+      - Fixed a bug that occurred when using H5Ocopy on a committed datatype
+            containing an attribute using that committed datatype.
+            (NAF - 2011/10/13 - Issue 5854)
+      - #ifdef _WIN32 instances changed to #ifdef H5_HAVE_WIN32_API and added
+            H5_HAVE_VISUAL_STUDIO checks where necessary. CMake only as configure
+            never set _WIN32.
+      - CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
+            discovered 3 problems in tests and tools' library (Issue 7674):
+              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 negative minimal and is being subtracted 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/9/2)
+      - 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. But this caused some backward compatibility problem.
+            v1.8 library couldn't open the file created with v1.6 library.  We
+            fixed the problem by checking the EOA value to detect the file
+            created with v1.6 library. (SLU - 2011/6/22)
+      - When a dataset had filters and reading data failed, the error message
+            didn't say which filter isn't registered. It's fixed now.
+            (SLU - 2011/6/3)
+      - The datatype handler created with H5Tencode/decode used to have the
+            reference count 0 (zero).  I have fixed it.  It is 1 (one) now.
+            (SLU - 2011/2/18)
+      - Fixed a bug that caused big endian machines to generate corrupt files
+            when using the scale-offset filter with floating point data or
+            fill values.  Note that such datasets will no longer be readable
+            by any machine after this patch.  (NAF - 2010/02/02 - Bug 2131)
+      - Retrieving a link's name by index in the case where the link is
+            external and the file that the link refers to doesn't exist will
+            now fail gracefully rather than cause a segmentation fault.
+            (MAM - 2010/11/17)
+      - Modified library to always cache symbol table information.  Libraries
+            version 1.6.3 have a bug which causes them to require this
+            information for some operations. (NAF - 2010/09/21 - 1864)
+      - Fixed a bug that could occur when getting information for a new-style
+            group that was previously opened through a file handle that was
+            later closed. (NAF - 2010/09/15)
+      - Added define check in H5public.h if stdint.h is supported by the C++
+            compiler. This define is only available on Windows with VS2010 and
+            using CMake to build the library. (ADB - 2010/09/13 - Bug 1938)
+      - H5Eset_current_stack now also closes the error stack to be set as the
+            default.  This is to avoid a potential problem (Bug 1799).
+            (SLU - 2010/9/7)
+      - Fixed the bug in the filter's public CAN_APPLY function.  The return
+            value should be htri_t not herr_t (Bug #1239). (SLU - 2010/8/5)
+      - Fixed a bug in the direct I/O driver that could render files with
+            certain kinds of unaligned data unreadable or corrupt them.
+            (NAF - 2010/07/28)
+      - valgrind reported an error of copying data to itself when a new attribute
+            is written (Bug #1956).  I fixed it by taking out the memcpy step in
+            the attribute code. (SLU - 2010/07/28)
+      - Fixed a bug that could cause file corruption when using non-default
+            sizes of addresses and/or lengths.  This bug could also cause
+            uncorrupted files with this property to be unreadable.  This bug
+            was introduced in 1.8.5. (NAF - 2010/07/16 - 1951)
+      - Fixed a file corruption bug that could happen when shrinking a
+            compressed dataset. (NAF - 2010/05/20)
+      - Fixed some memory leaks in VL datatype conversion when strings are
+            used as fill values. (MAM - 2010/05/12 - BZ# 1826)
+      - Fixed a bug when copying objects with NULL references with the
+            H5O_COPY_EXPAND_REFERENCE_FLAG flag set. (NAF - 2010/04/08 - 1815)
+      - Files can now be concurrently opened more than once using the core file
+            driver, as long as the backing store is used. (NAF - 2010/03/09)
+      - Added support for H5O_COPY_EXPAND_EXT_LINK_FLAG to H5Ocopy.  External
+            links will now be expanded if this flag is set.
+            (NAF - 2010/03/05 - 1733)
+      - Fixed a bug where the library, when traversing an external link, would
+            reopen the source file if nothing else worked. (NAF - 2010/03/05)
+      - Fixed an intermittent bug in the b-tree code which could be triggered
+            by expanding and shrinking chunked datasets in certain ways.
+            (NAF - 2010/02/16)
+      - H5Tdetect_class said a VL string is a string type.  But when it's
+            in a compound type, it said it's a VL type (Bug #1584).  I fixed it
+            to be consistent.  It always return string type. (SLU - 2009/12/10)
+      - Fixed a bug where writing and deleting many global heap objects (i.e.
+            variable length data) would render the file unreadable.  Previously
+            created files exhibiting this problem should now be readable.
+            (NAF - 2009/10/27 - 1483)
+      - Fixed incorrect return value for H5Pget_preserve. (AKC - 2009/10/08 - 1628)
+      - Fixed an assertion failure that occurred when H5Ocopy was called on a
+            dataset using a vlen inside a compound. (NAF - 2009/10/02 - 1597)
+      - Fixed incorrect return value for H5Pget_filter_by_id1/2 in H5Ppublic.h.
+            (NAF - 2009/09/25 - 1620)
+      - Fixed a bug where properties weren't being compared with the registered
+            compare callback. (NAF - 2009/09/25 - 1555)
+      - Fixed a bug where H5Pget_fitler_by_id would succeed when called for a
+            filter that wasn't present. (NAF - 2009/06/25 - 1250)
+      - Fixed an issue with committed compound datatypes containing a vlen.
+            Also fixed memory leaks involving committed datatypes.
+            (NAF - 2009/06/10 - 1593)
+      - Added versioning to H5Z_class_t struct to allow compatibility with 1.6
+            API. (NAF - 2009/04/20 - 1533)
+      - Fixed a problem with using data transforms with non-native types in the
+            file. (NAF - 2009/04/20 - 1548)
+      - Added direct.h include file to windows section of H5private.h
+            to fix _getcwd() warning. (ADB - 2009/04/14 - 1536)
+      - Fixed a bug that prevented external links from working after calling
+            H5close(). (NAF - 2009/04/10 - 1539)
+      - Modified library to write cached symbol table information to the
+            superblock, to allow library versions 1.3.0 to 1.6.3 to read files
+            created by this version. (NAF - 2009/04/08 - 1423)
+      - Changed skip lists to use a deterministic algorithm.  The library should
+            now never call rand() or srand(). (NAF - 2009/04/08 - 503)
+      - Fixed a bug where H5Lcopy and H5Lmove wouldn't create intermediate
+            groups when that property was set. (NAF - 2009/04/07 - 1526)
+      - Fixed a bug that caused files with a user block to grow by the size of
+            the user block every time they were opened.
+            (NAF - 2009/03/26 - 1499)
+      - Fixed a rare problem that could occur with files using the old (pre 1.4)
+            array datatype. (NAF - 2009/03/23)
+      - Modified library to be able to open files with corrupt root group symbol
+            table messages, and correct these errors if they are found.  Such
+            files can only be successfully opened with write access.
+            (NAF - 2009/03/23 - 1189)
+      - Removed the long_long #define and replaced all instances with
+            "long long". This caused problems with third party products. All
+            currently supported compliers support the type. (ADB - 2009/03/05)
+      - Fixed various bugs that could prevent the fill value from being written
+            in certain rare cases. (NAF - 2009/02/26 - 1469)
+      - Fixed a bug that prevented more than one dataset chunk from being cached
+            at a time. (NAF - 2009/02/12 - 1015)
+      - Fixed an assertion failure caused by opening an attribute multiple times
+            through multiple file handles. (NAF - 2009/02/12 - 1420)
+      - Fixed a problem that could prevent the user from adding attributes (or
+            any object header message) in some circumstances.
+            (NAF - 2009/02/12 - 1427)
+      - Fixed a bug that could cause problems when an attribute was added to a
+            committed datatype using the committed datatype's datatype.
+            (NAF - 2009/02/12)
+      - Fixed a bug that could cause problems when copying an object with a
+            shared message in its own object header. (NAF - 2009/01/29)
+      - Changed H5Tset_order to properly reject H5T_ORDER_NONE for most
+            datatypes. (NAF - 2009/01/27 - 1443)
+      - Fixed a bug where H5Tpack wouldn't remove trailing space from an
+            otherwise packed compound type. (NAF - 2009/01/14)
+      - Fixed up some old v2 btree assertions that get run in debug mode that
+            were previously failing on compilation, and removed some of the
+            more heavily outdated and non-rewritable ones. (MAM - 2008/12/15)
+      - Fixed a bug that could cause problems when "automatically" unmounting
+            multiple files. (NAF - 2008/11/17)
+      - H5Ovisit and H5Ovisit_by_name will now properly terminate when the
+            callback function returns a positive value on the starting object.
+            (NAF - 2008/11/03)
+      - Fixed an error where a null message could be created that was larger
+            than could be written to the file. (NAF - 2008/10/23)
+      - Corrected error with family/split/multi VFD not updating driver info
+            when "latest" version of the file format used. (QAK - 2008/10/14)
+      - Corrected alignment+threshold errors to work correctly when metadata
+            aggregation is enabled. (QAK - 2008/10/06)
+      - Changed H5Fget_obj_count and H5Fget_obj_ids to ignore objects registered
+            by the library for internal library use. (NAF - 2008/10/06)
+      - Fixed potential memory leak during compound conversion.
+            (NAF - 2008/10/06)
+      - Changed the return value of H5Fget_obj_count from INT to SSIZE_T. Also
+            changed the return value of H5Fget_obj_ids from HERR_T to SSIZE_T and
+            the type of the parameter MAX_OBJS from INT to SIZE_T. (SLU - 2008/09/26)
+      - Fixed an issue that could cause data to be improperly overwritten
+            during compound type conversion. (NAF - 2008/09/19)
+      - Fixed pointer alignment violations that could occur during vlen
+            conversion. (NAF - 2008/09/16)
+      - Fixed problem where library could cause a segmentation fault when
+            an invalid location ID was given to H5Giterate(). (QAK - 2008/08/19)
+      - Fixed improper shutdown when objects have reference count > 1.  The
+            library now tracks reference count due to the application separately
+            from that due to internal library routines. (NAF - 2008/08/19)
+      - Fixed assertion failure caused by incorrect array datatype version.
+            (NAF - 2008/08/08)
+      - Fixed an issue where mount point traversal would fail when using
+            multiple handles for the child. (NAF - 2008/08/07)
+      - Fixed an issue where mount points were inaccessible when using multiple
+            file handles for the parent.  The mount table is now in the shared
+            file structure (the parent pointer is still in the top structure).
+            (NAF - 2008/08/07)
+      - when an attribute was opened twice and data was written with one of the handles,
+            the file didn't have the data.  It happened because each handle had its own
+            object structure, and the empty one overwrote the data with fill value.  This is
+            fixed by making some attribute information like the data be shared in the
+            attribute structure.  SLU - 2008/07/22
+      - Fixed issue where a group could have a file mounted on it twice.
+            (QAK - 2008/07/15)
+      - Fixed a Windows-specific issue in the ohdr test which was causing users
+        in some timezones to get false errors.  This a deficiency in the Windows
+        mktime() function, and has been handled properly.  SJW  - 2008/06/19
+      - Fixed the problem with the searching of target file for H5Lcreate_external().
+      The searching pattern will depend on whether the target file's
+      pathname is an absolute or a relative path. Please see the description
+      in the RM for H5Lcreate_external().  (VC - 2008/04/08)
+      - Fixed possible file corruption bug when encoding datatype
+            descriptions for compound datatypes whose size was between
+            256 & 511 bytes and the file was opened with the "use the
+            latest format" property enabled (with H5Pset_libver_bounds).
+            (QAK - 2008/03/13)
+      - Fixed bug in H5Aget_num_attrs() routine to handle invalid location
+            ID correctly.  (QAK - 2008/03/11)
+      - H5Dset_extent: when shrinking dimensions, some chunks were not deleted.
+            (PVN - 2009/01/8)
+      - Added code to maintain a min_clean_fraction in the metadata cache when
+            in serial mode. (MAM - 2009/01/9)
+
+
+
+    Configuration
+    -------------
+    - CMake: When CMake commands are executed individually on the command line
+      and the external filters are being built, the CMAKE_BUILD_TYPE define
+      must be set to the same value as the configuration
+        (-DCMAKE_BUILD_TYPE:STRING=Release if using -C Release). This is needed
+      by the the szip and zlib filter build commands. (ADB - HDFFV-8695)
+    - CMake: Remove use of XLATE_UTILITY program. (ADB - 2014/03/28 HDFFV-8640)
+    - CMake: Added missing quotes in setting the CMAKE_EXE_LINKER_FLAGS for the
+      MPI option. (ADB - 2014/02/27 HDFFV-8674)
+    - Modified H5detect.c to scan floating point types for padding bits before
+      analyzing the type further.  This should fix problems with gcc 4.8
+      (NAF - 2013/09/19 - HDFFV-8523/HDFFV-8500)
+    - Fixed Makefile issue in which "-Wl," was not properly specified
+      prior to -rpath when building parallel fortran libraries with
+      an Intel compiler. (MAM - 2012/03/26)
+    - Makefiles generated by other packages using h5cc as the compiler
+      no longer error when 'make' is invoked more than once in order
+      to 'rebuild' after changes to source. (MAM - 2012/03/26)
+    - Added --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 Fortran compiler
+      is Fortran2003 compliant.         (EIP - 2011/11/14)
+
+    - In Windows platform, the default VFD, was Windows VFD, is restored back
+      to the SEC2, aka POSIX, VFD.  The Windows VFD is deprecated. HDFFV-7740
+      (AKC 2011/09/26)
+    - 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 overridable
+      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 - 04/11/2011 - HDFFV-4353).
+    - Removed recognition of the parallel compilers of LAM(hcc) and
+      ChMPIon(cmpicc) since we have no access to these two MPI implementations
+      and cannot verify their correctness. (AKC - 2010/7/14 - Bug 1921)
+    - Removed the following config files, as we no longer support them:
+        config/dec-osf*, config/hpux11.00, config/irix5.x,
+        config/powerpc-ibm-aix4.x config/rs6000-ibm-aix5.x config/unicos*
+      MAM - 2009/10/08
+    - Modified configure and make process to properly preserve user's CFLAGS
+      (and company) environment variables. Build will now properly use
+      automake's AM_CFLAGS for any compiler flags set by the configure
+      process. Configure will no longer modify CFLAGS directly, nor will
+      setting CFLAGS during make completely replace what configure has set up.
+      MAM - 2009/10/08
+    - Support for TFLOPS, config/intel-osf1, is removed since the TFLOPS
+      machine has long retired. AKC - 2009/10/06.
+    - Added $(EXEEXT) extension to H5detect when it's executed in the
+      src/Makfile to generate H5Tinit.c so it works correctly on platforms
+      that require the full extension when running executables.
+      MAM - 2009/10/01 - BZ #1613
+    - Configure will now set FC and CXX to "no" when fortran and c++
+      are not being compiled, respectively, so configure will not run
+      some of the compiler tests for these languages when they are not
+      being used. MAM - 2009/10/01
+    - The PathScale compiler (v3.2) was mistaken as gcc v4.2.0 but it fails to
+      recognize some gcc options. Fixed. (see bug 1301). AKC - 2009/7/28 -
+    - The --enable-static-exec flag will now properly place the -static flag
+      on the link line of all installed executables. This will force the
+      executable to link with static libraries over shared libraries, provided
+      the static libraries are available. MAM - 2009/08/31 - BZ #1583
+    - The --includedir=DIR configuration option now works as intended, and can
+      be used to specify the location to install C header files. The default
+      location remains unchanged, residing at ${prefix}/include.
+      MAM - 2009/03/10 - BZ #1381
+    - Configure no longer removes the '-g' flag from CFLAGS when in production
+      mode if it has been explicitly set in the CFLAGS environment variable
+      prior to configuration. MAM - 2009/03/09 - BZ #1401.
+    - Fixed error with 'make check install' failing due to h5dump
+      needing other tools built first. MAM - 2008/10/24.
+    - Wpen using shared szip, it is no longer necessary to specify
+      the path to the shared szip libraries in LD_LIBRARY_PATH. MAM -
+      2008/10/24.
+    - The file libhdf5_fortran.settings is not installed since its content
+      is included in libhdf5.settings now. AKC - 2008/10/21
+    - "make DESTDIR=xxx install" failed to install some tools and files
+      (e.g., h5cc and fortran modules). Fixed. AKC - 2008/10/8.
+    - Autotools: An export of LD_LIBRARY_PATH=<szip library location> was
+      removed from configure and make installcheck was revised to run
+      scripts installed in share/hdf5_examples to use the installed h5cc, etc.
+      to compile and run example source files also installed there. Make
+      installcheck will now fail when a shared szip or other external lib file
+      cannot be found in the same manner that executables compiled and linked
+      with h5cc will fail to run when those lib files cannot be found after
+      install.  Make installcheck should pass after setting LD_LIBRARY_PATH to the
+      szip location.
+      (LRK - 2014/04/16)
+
+    Performance
+    -------------
+      - Removed program perform/benchpar from the enable-build-all list. The
+    program will be retired or moved to another location. HDFFV-8156
+    (AKC 2012/10/01)
+      - Retired program perform/mpi-perf. Its purpose has been incorporated
+    into h5perf before. (AKC 2012/09/20)
+      - ifdefs added to tests around include unistd.h and function to simulate
+        getlogin() on Windows.
+        (ADB - 2011/08/15)
+      - perf_serial test added to Windows projects and check batch file.
+        (ADB - 2009/06/11)
+    Fortran
+    --------
+      - Fixed a typo in return value of the nh5dread_f_c function ( was 1
+        instead of 0 on success); fixed the return value to make it consistent
+        with other Fortran functions; cleaned the code from debug statements.
+        (EIP - 2012/06/23)
+
+      - Fixed problem writing/reading control characters to a dataset; writing
+        a string containing: alerts, backspace, carriage_return, form_feed,
+        horizontal_tab, vertical_tab, new_line is now tested and working.
+        (MSB - 2012/09/01)
+
+      - Corrected the integer type of H5S_UNLIMITED_F to HSIZE_T (MSB - 2012/09/01)
+
+      - Corrected the number of continuation lines in the src files
+        to be less then 32 lines for F95 compliance. (MSB - 2012/10/01)
+
+    Tools
+    -----
+        - h5dump subsetting fixed for dims greater then two
+          When a dataset has more then two dimensions, subsetting would incorrectly
+          calculate the data that needed to be displayed.
+          Added in block and stride calculation that account for dimensions greater
+          then two.  NOTE: lines that have line breaks inserted because of display
+          length calculations, may have index info that is incorrect until the next
+          dimension break.  (ADB, 2016/03/04, HDFFV-9698)
+        - h5repack: h5repack would not attempt to remove UD filters. Added a
+          check to h5repack for UD filters that checks if the filter can
+          be dynamically loaded. This will require a change in the library to
+          add the H5PL_load() to the H5Zfilter_avail(). (ADB - 2014/03/03 HDFFV-8629)
+        - h5repack: Fixed failure for converting a layout of small chunked dataset
+          (size < 1K) to contiguous layout.  HDFFV-8214 (JKM 2013/03/18)
+        - h5diff: Fixed to return correct exit code 1 when detect unique extra
+          attribute. Prior to this fix, h5diff returned exit code 0 indicating
+          two files are identical.   HDFFV-7643 (JKM 2013/02/15)
+        - h5diff: Improved speed when comparing HDF5 files with lots of
+          attributes. Much slower performance was identified with release
+          version from 1.8.7 to 1.8.10 compared to 1.8.6. (JKM 2012/10/19)
+        - h5repack: "h5repack -f NONE file1.h5 out.h5" command failed if
+          source file contains chunked dataset and a chunk dim is bigger than
+          the dataset dim. Another issue is that the command changed max dims
+          if chunk dim is smaller than the dataset dim.
+          These issue occurred when dataset size is smaller than 64k (compact
+          size limit)  Fixed both.
+          HDFFV-8012 (JKM 2012/09/24)
+        - h5diff: Fixed not to accumulate attribute difference to dataset
+          difference in verbose mode (-v, -r), which caused incorrect
+          difference between dataset and group/datatype object if attribute
+          exist with any differences. This also lead to fix inconsistent
+          format indicating difference between dataset and group/datatype
+          object. HDFFV-5919 (JKM 2012/09/05)
+        - h5diff: Fixed the incorrect result when comparing attribute data
+          values and the data type has same class but different size.
+          HDFFV-7942  (JKM 2012/08/15)
+        - ph5diff: Fixed intermittent hang issue on a certain operation in
+          parallel mode. It was detected by daily test for comparing
+          non-comparable objects, but it could have occurred in other
+          operations depend on machine condition.  HDFFV-8003 (JKM 2012/08/01)
+        - h5diff: Fixed test failure for "make check" due to failure of
+          copying test files when performed in HDF5 source tree. Also applied
+          to other tools.
+          HDFFV-8107 (JKM 2012/08/01)
+        - h5diff: Fixed the Function COPY_TESTFILES_TO_TESTDIR() of
+    testh5diff.sh to better report when there is an error in the file
+    copying. HDFFV-8105 (AKC -2012/07/22)
+        - h5diff: Fixed not to check and display dangling link status without
+          --follow-symlinks option. This also improved performance when
+          comparing lots of external links without the --follow-symlinks
+          option.  HDFFV-7998 (JKM 2012/04/26)
+        - h5unjam: Fixed sefgault when used -V (show version) option.
+          HDFFV-8001 (JKM 2012/04/19)
+        - h5repack: Fixed a failure when change the chunk size of a specified
+          chunked dataset with unlimited max dims. HDFFV-7993 (JKM 2012/04/11)
+        - h5diff: Fixed failure for comparing same named object with different
+          object types in comparing groups. Prior to the fix, h5diff resulted
+          in error. After the fix, h5diff detects such case as non-comparable
+          and display messages accordingly. HDFFV-7664 (JKM 2012/03/28)
+        - h5diff: If unique objects exists only in one file and try to exclude
+          the unique objects with --exclude-path option, h5diff missed
+          excluding some objects.
+          Fixed to exclude objects correctly in such case.
+          HDFFV-7837 (JKM 2012/03/20)
+        - h5dump: Added tools library error stack to properly catch error
+          information generated within the library.
+          HDFFV-7958 (ADB 2012/03/12)
+        - h5dump: Dangling links no longer throw error message, change process
+          when open link fails.
+          HDFFV-7839 (ADB 2012/03/12)
+        - h5diff: When two symbolic dangling links are compared with
+          --follow-symlinks option, the result should be same. It worked for
+          comparing two files, but didn't work for comparing two objects.
+          HDFFV-7835 (JKM 2012/03/09)
+        - h5dump: Refactored code to remove duplicated functions. Split XML
+          functions from DDL functions. Corrected indentation and formatting
+          errors. Also fixed subsetting counting overflow (HDFFV-5874). Verified
+          all tools call tools_init() in main.
+          HDFFV-7560 (ADB 2012/02/17)
+        - h5diff: fixed to prevent from displaying error stack message when
+          comparing the two dangling symlinks with follow-symlinks option.
+          HDFFV-7836 (JKM 2012/01/13)
+        - h5repack: fixed memory leak for handling variable length string in
+          attribute.  HDFFV-7840 (JKM 2012/01/06)
+        - h5ls: fixed segfault when access region reference data in an
+          attribute. HDFFV-7838 (JKM 2011/12/29)
+        - h5diff: fixed segfault over non-comparable attribute with different
+          dimention or rank, along with '-c' option to display details.
+          HDFFV-7770 (JKM 2011/10/24)
+        - Fixed h5diff to display all the comparable object and attribute
+          regardless of non-comparables. HDFFV-7693 (JKM 2011/09/16)
+        - Fixed h5repack to update values of references(object and region) of
+          attributes in h5repack for 1) references, 2) ARRAY of references,
+          3) VLEN of references, and 4) COMPOUND of references.
+          (JIRA HDF5 5932) PC -2011/09/14
+        - h5diff: fixed segfault over dataset with container types
+          (array,lven) with multiple nested compound types.
+          (ex: compound->array->compound, compound->vlen->compound)
+          HDFFV-7712  JKM (2011/09/01)
+        - h5repack: added macro to handle failure in H5Dread/write when memory
+          allocation failed inside the library. (PC -- 2011/08/19)
+        - Fixed h5jam not to allow specifying an HDF5 formatted file as input
+          file for -u (user block file) option, because the original HDF5 file
+          will not be accessible if allows. HDFFV-5941 (JKM 2011/08/15)
+        - Revised command help pages of h5jam and h5unjam. The descriptions
+          were not up to date and some were missing.
+          HDFFV-7515 (JKM 2011/08/15)
+        - h5repack: h5repack failed to copy dataset if the layout is changed
+          from chunked with unlimited dims to contiguous. HDFFV-7649
+          (PC -- 2011/07/15)
+        - h5diff: "--delta" option considers two NaN of the same type are
+          different, which is wrong based on h5diff description in Reference
+          Manual. HDFFV-7656  (PC -- 2011/07/15)
+        - Fixed h5diff to display instructive error message and exit with 1
+          when mutually exclusive options (-d, -p and --use-system-epsilon)
+          are used together. HDFFV-7600  (JKM 2011/07/07)
+        - Fixed h5dump to display the first line of each element into correct
+          position for multiple dimention array type.
+          Before this fix, the first line of each element in array were
+          displayed after the last line of previous element without
+          moving to the next line (+indentation).
+          Bug #HDFFV-5878  (JKM 2011/06/15)
+        - Fixed h5dump to display correct value for H5T_STD_I8LE dataset
+          on a system (ppc64, linux, Big-Endian, clustering).
+          Bug #HDFFV-7594  (ABERT & JKM 2011/05/12)
+        - Fixed h5diff to compare file itself correctly. Previously h5diff
+          reported either different or not compatible in certain cases even
+          comparing file itself. This fix also improve performance when
+          comparing same target objects through verifying the obj&file
+          addresses before comparing the details in the objects (ex: datasets
+          or attributes) Bug #HDFFV-5928  (XCAO & JKM 2011/05/06)
+        - Updated h5dump test case script to prevent entire test failure upon
+          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 2011/04/08)
+        - Updated to unify option name to '--enable-error-stack' for printing
+          HDF5 error stack messages for HDF5 tools. h5ls and h5dump for now.
+          For h5ls, this replaces "-e/--errors" option, which is deprecated.
+          Bug#2182 (JKM 2011/3/30)
+        - Fix h5diff for --use-system-epsilon option: the calculation changed
+          from ( |a - b| / b ) to ( |a - b| ). This was decided for better
+          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)
+        - Fix h5diff issues for #1: h5diff compared attributes correctly only
+          when two objects have the same number of attributes and attribute
+          names are identical, #2: didn't display useful information about
+          attribute difference. Bug#2121 (JKM 2011/3/17)
+        - Fixed memory leak for h5diff when accessing symbolic links with
+          --follow-symlink option. Bug#2214  (JKM 2011/3/18)
+        - Fixed memory leak for h5diff when access variable length string
+          data. Bug#2216 (JKM 2011/3/18)
+        - Fixed and improved help page for -a option of h5ls.
+          Bug#1904 (JKM 2011/3/11)
+        - Fixed h5dump not to include attribute values in the output file when
+          h5dump "-y -o output_file" options were used. The problem was introduced
+          in HDF5 1.8.6 by showing data pointed by region references. (XCAO 2011/3/9)
+        - Fixed h5copy to be able to copy any object into the same HDF5 file.
+          Previously h5copy displayed error message when target file is same
+          as source file. (XCAO 2011/3/8)
+        - Fixed h5dump for skipping some values for long array type dataset on
+          Windows. This issue only occurred on Windows due to the different
+          return behavior from _vsnprintf() funtion. Bug#2161 (JKM 2011/3/3)
+        - Fixed h5dump for skipping array indices every certain number
+          when the array type dataset is relatively big. The certain number
+          varies according to the size of array. Bug#2092 (JKM 2011/2/15).
+        - Fixed h5diff for the segfault when compares compound datasets
+          with combination of fixed length string types and vlen string types
+          in certain orders. bug#2089 (JKM 2010/12/28)
+        - Improve h5diff performance. 1) use HDmemcmp() before comparing each
+          elements. 2) replace expensive H5Tequals() calls 3) retrieve datatype
+          information at dataset level not each element level for compound
+          datasets
+        - Fixed h5ls to display nested compound type with curly bracket
+          when -S (--simple) option is used with -l (--label), so it shows
+          which member (in curly bracket) belong to which nested compound type
+          and make the output make sense.  bug#1979 (JKM 2010/11/09)
+        - Fixed h5diff to handle variable-length strings in a compound dataset
+          correctly. (also variable-length string array in a compound dataset)
+          Garbage values were 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 object to non-exist
+          group without -p option. Bug#2040 (JKM 2010/10/18)
+        - Fixed to compare member objects and groups recursively when two
+          files or groups are specified to be compared. Bug#1975
+          (JKM 2010/9/16)
+        - Make h5repack be able to convert a layout to COMPACT for small size
+          dataset as default.  bug#1896 (JKM 2010/09/15)
+        - Change h5ls not to manipulate special characters in object name or
+          attribute name for smart display.  bug#1784 (JKM 2010/06/28)
+        - Fixed h5ls to return exit code 1 (error) when non-existent file is
+          specified. bug#1793. (JKM 2010/04/27)
+        - h5copy failed to copy dangling link when the link is specified
+          directly. bug#1817. (JKM 2010/04/22)
+        - h5repack lost attributes from a dataset of reference type. bug#1726.
+          (JKM 2010/3/25)
+        - h5repack sets NULL for object reference value for group or
+          named datatype. bug#1814. (JKM 2010/03/19)
+        - h5diff: fixed incorrect behavior (hang) in parallel mode when
+                  specify invalid options (ex: -v and -q) (JKM 2010/02/17)
+        - h5dump/h5ls display buffer resize fixed in tools library.
+            (ADB - 2009/07/21 - 1520)
+        - Fixed many problems that could occur when using h5repack with named
+            datatypes. (NAF - 2009/4/20 - 1516/1466)
+        - h5dump, h5diff, h5repack were not reading (by hyperslabs) datasets
+            that have a datatype datum size greater than H5TOOLS_BUFSIZE, a
+            constant defined as 1024Kb, such as array types with large
+            dimensions (PVN - 2009/4/1 - 1501)
+        - h5import: By selecting a compression type, a big endian byte order was being
+            selected (PVN - 2009/3/11 - 1462)
+        - zip_perf.c had missing argument on one of the open() calls. Fixed.
+            (AKC - 2008/12/9)
+        - h5dump now checks for uniqueness of committed datatypes.
+            (NAF - 2008/10/15)
+        - Fixed unnecessary indentation of committed datatypes in h5dump.
+            (NAF - 2008/10/15)
+        - Fixed bugs in h5stat:segmemtation fault when printing groups and
+          print warning message when traversal of objects is unsuccessful.
+          (see bug #1253) (VC- 2008/10/13)
+        - Fixed bug in h5ls that prevented relative group listings (like
+            "h5ls foo.h5/bar") from working correctly (QAK - 2008/06/03)
+        - Fixed bug in h5diff that prevented datasets & attributes with
+            variable-length string elements from comparing correctly.
+            (QAK - 2008/02/28)
+        - h5import bug on Windows w/binary datasets. fread in windows needs a
+            binary file to be open with 'rb' instead of 'r' otherwise it
+            terminates execution if an end of file character is found on the
+            input file. Besides that the binary file generated needs to be open
+            with 'wb' , otherwise an end of line character is read twice.
+            (PVN - 2008/02/19)
+        - Fixed bug in h5dump that caused binary output to be made only for the first
+           dataset, when several datasets were requested. (PVN - 2008/04/07)
+        - h5dump: when doing binary output (-b), the stdout printing of attributes
+           was done incorrectly. Removed printing of attributes when doing binary
+           output. PVN - 2008/06/05
+
+
+    High-Level APIs:
+     ------
+      - Packet Table is updated.
+
+        In the Packet Table C API, there are changes with the following functions,
+        which had been ifdef'ed out with VLPT_REMOVED since 2006
+          * H5PTcreate_vl, is removed from this release
+          * H5PTfree_vlen_readbuff, is renamed to H5PTfree_vlen_buff
+          * H5PTis_varlen, is made available again
+
+          Various cleanup: replacing 0/-1 with SUCCEED/FAIL and H5I_BADID with
+          H5I_INVALID_HID.  (BMR, 2016/03/04, HDFFV-442)
+
+      - Fixed problem with H5DSget_scale_name including the NULL terminator in
+        the size calculation returned by the function. The API does not
+        include the NULL terminator in the size returned (MSB- 2013/2/10)
+
+      - Fixed problem with H5TBdelete_record destroying all data following the deletion
+        of a row. (MSB- 2012/7/26)
+
+      - Fixed H5LTget_attribute_string not closing an object identifier when an
+        error occurs. (MSB- 2012/7/21)
+
+      - Fixed the H5LTdtype_to_text function.  It had some memory problems when
+        dealing with some complicated data types. HDFFVI-7701 (SLU - 2011/10/19)
+
+      - Fixed a bug in H5DSattach_scale, H5DSis_attached and H5DSdetach_scale
+        caused by using H5Tget_native_type function to determine the native
+        type for reading REFERENCE_LIST attribute. The bug was exposed
+        on Mac PPC.
+                                     (EIP - 2010/05/22 -1851)
+      - Fixed a bug in the H5DSdetach_scale function when 0 bytes
+        were allocated after the last reference to a dim. scale
+        was removed from the list of references in a VL element of the
+        DIMENSION_LIST attribute; modified the function to comply
+        with the Spec: DIMENSION_LIST attribute is deleted now when no
+        dimension scales left attached.
+                                     (EIP - 2010/05/14 -1822)
+      - Fixed a bug where the H5TB API would forget the order of fields when
+          added out of offset order. (NAF - 2009/10/27 - 1582)
+      - H5DSis_attached failed to account for different platform types. Added a
+          get native type call. (ADB - 2009/9/29 - 1562)
+      - Dimension scales: The scale index return value in H5DSiterate_scales was not always
+          incremented. (PVN - 2009/4/8 - 1538)
+
+    Fortran High-Level APIs:
+     ------
+
+      - Lite: The h5ltget_attribute_string_f used to return the C NULL character in the
+              returned character buffer. The returned Fortran charactor buffer now does
+              not return the C NULL character. (MSB - 2012/3/23)
+      - Lite: The h5ltget_dataset_info_f function (gets information about a dataset)
+           was not correctly returning the dimension array. (PVN - 2009/3/23)
+      - Lite: the h5ltread_dataset_string_f and h5ltget_attribute_string_f functions
+           had memory problems with the g95 fortran compiler. (PVN � 5/13/2009) 1522
+
+
+
+
+
+    Documentation
+    -------------
+
+
+    F90 APIs
+    --------
+       - Modified the h5open_f and h5close_f subroutines to not to call H5open
+         and H5close correspodningly. While the H5open call just adds overhead,
+         the H5close call called by an Fortran application shuts down the HDF5
+         library making it unaccessible to the application.
+                                              HDFFV-915 (EIP & SB - 2011/10/13)
+
+
+    C++ APIs
+    --------
+    - The constructor PropList::PropList(id) was fixed to act properly
+      according to the nature of 'id'.  When 'id' is a property class id,
+      a new property list will be created.  When 'id' id a property list id,
+      a copy of the property list will be made. (BMR - 2010/5/9)
+    - The parameters 'size' and 'bufsize' in CommonFG::getLinkval and
+      CommonFG::getComment, respectively, now have default values for
+      user's convenience.  (BMR - 2009/10/23)
+    - NULL pointer accessing was fixed, bugzilla 1061.  (BMR - 2009/10/05)
+    - read/write methods of DataSet and Attribute classes were fixed
+      to handle string correctly.  (BMR - 2009/07/26)
+    - Fixed bug that caused segfaults in Attribute::read. (BMR - 2008/04/20)
+    - Fixed bug in PropList::getClassName to use portable HDfree instead
+        of free. (BMR - 2008/04/20)
+    - Fixed a design bug which allowed an Attribute object to create/modify
+      attributes (bugzilla #1068).  The API class hierarchy was revised
+      to address the problem.  Classes AbstractDS and Attribute are moved
+      out of H5Object.  Class Attribute now multiply inherits from
+      IdComponent and AbstractDs and class DataSet from H5Object and
+      AbstractDs.  In addition, the data member IdComponent::id was
+      moved into subclasses: Attribute, DataSet, DataSpace, DataType,
+      H5File, Group, and PropList. (BMR - 2008/08/10)
+    - IdComponent::dereference was incorrect and replaced as described
+      in "New Features" section.
+      (BMR - 2008/08/10)
+
+    Testing
+    -------
+    - tools/h5diff/testh5diff.sh is run in every "make check", even after it
+      has passed in the previous run. It should not run again if there is no
+      code changes. Fixed. (AKC - 2013/07/19 HDFFV-8392)
+    - In some Mac system, testlibinfo.sh failed with this error:
+         Check file ../src/.libs/libhdf5.7.dylib
+         strings: object: ../src/.libs/libhdf5.7.dylib malformed object \
+         (unknown load command 15)
+      The strings command of Mac inspects library files and older
+      versions of strings may not know newer library format, resulting
+      in errors.  Fixed by sending the library file as stdin to the strings
+      coommand to avoid this problem. (AKC - 2013/03/08 HDFFV-8305)
+
+    - Fixed a typo in the ERROR macro in test/testhdf5.h. It segmentation
+      faulted when used before. (AKC - 2013/02/12 HDFFV-8267)
+
+
+Supported Platforms
+===================
+    AIX 6.1                       xlc 10.1.0.5
+    (NASA G-ADA)                  xlC 10.1.0.5
+                                  xlf90 12.1.0.6
+
+    Linux 2.6.18-308.13.1.el5PAE  GNU C (gcc), Fortran (gfortran), C++ (g++)
+    #1 SMP i686 i686 i386         compilers for 32-bit applications;
+    (jam)                             Version 4.1.2 20080704 (Red Hat 4.1.2-54)
+                                      Version 4.8.2
+                                  PGI C, Fortran, C++ Compilers for 32-bit
+                                  applications;
+                                      Version 13.7-0
+                                  Intel(R) C, C++, Fortran Compiler for 32-bit
+                                  applications;
+                                      Version 14.0.2 (Build 20140120)
+
+    Linux 2.6.18-371.6.1.el5      GNU C (gcc), Fortran (gfortran), C++ (g++)
+    #1 SMP x86_64 GNU/Linux       compilers for 64-bit applications;
+    (koala)                           Version 4.1.2 20080704 (Red Hat 4.1.2-54)
+                                      Version 4.8.2
+                                  Intel(R) C, C++, Fortran Compilers for
+                                  applications running on Intel(R) 64;
+                                      Version 14.0.2 (Build 20140120)
+
+    Linux 2.6.32-431.11.2.el6    GNU C (gcc), Fortran (gfortran), C++ (g++)
+    #1 SMP x86_64 GNU/Linux       compilers:
+    (platypus)                       Version 4.4.7 20120313
+                                     Version 4.8.2
+                                  PGI C, Fortran, C++ for 64-bit target on
+                                  x86-64;
+                                      Version 13.7-0
+                                  Intel(R) C (icc), C++ (icpc), Fortran (icc)
+                                  compilers:
+                                     Version 14.0.2 (Build 20140120)
+
+    Linux 2.6.32-431.29.2.el6.ppc64 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+    #1 SMP ppc64 GNU/Linux        g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+    (ostrich)                     GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
+                                  IBM XL C/C++ V13.1
+                                  IBM XL Fortran V15.1
+
+    Linux 2.6.32-220.23.1.1chaos  Intel C, C++, Fortran Compilers
+    ch5.x86_64 GNU/Linux              Version 12.1.5.339
+    (LLNL Aztec)
+
+    IBM Blue Gene/P               XL C for Blue Gene/P, bgxlc V9.0
+    (LLNL uDawn)                  XL C++ for Blue Gene/P, bgxlC V9.0
+                                  XL Fortran for Blue Gene/P, bgxlf90 V11.1
+
+    SunOS 5.11 32- and 64-bit     Sun C 5.12 SunOS_sparc
+    (emu)                         Sun Fortran 95 8.6 SunOS_sparc
+                                  Sun C++ 5.12 SunOS_sparc
+
+    Windows 7                     Visual Studio 2008 (cmake)
+                                  Visual Studio 2010 w/ Intel Fortran 14 (cmake)
+                                  Visual Studio 2012 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2013 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2015  (cmake)
+                                  Cygwin(CYGWIN_NT-6.1 1.7.34(0.285/5/3) gcc(4.9.2) compiler and gfortran)
+                                  (cmake and autotools)
+
+    Windows 7 x64                 Visual Studio 2008 (cmake)
+                                  Visual Studio 2010 w/ Intel Fortran 14 (cmake)
+                                  Visual Studio 2012 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2013 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2015  (cmake)
+
+    Windows 8.1                   Visual Studio 2012 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2013 w/ Intel Fortran 15 (cmake)
+
+    Windows 8.1 x64               Visual Studio 2012 w/ Intel Fortran 15 (cmake)
+                                  Visual Studio 2013 w/ Intel Fortran 15 (cmake)
+
+    Mac OS X Lion 10.7.3          gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 4.2.1
+    32- and 64-bit                g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 4.2.1
+    (duck)                        gfortran GNU Fortran (GCC) 4.6.2
+
+    Mac OS X Mountain Lion 10.8.1 cc Apple clang version 4.0 from Xcode 4.5.1
+    (owl)                         c++ Apple clang version 4.0 from Xcode 4.5.1
+                gcc i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 from Xcode 4.5.1
+                g++ i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 from Xcode 4.5.1
+                        gfortran GNU Fortran (GCC) 4.6.2
+
+
+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  F2003  parallel
+Solaris2.11 32-bit                      n        y/y    n        y    y     y
+Solaris2.11 64-bit                      n        y/n    n        y    y     y
+Windows 7                               y        y/y    n        y    y     y
+Windows 7 x64                           y        y/y    n        y    y     y
+Windows 7 Cygwin                        n        y/n    n        y    y     y
+Windows 7 x64 Cygwin                    n        y/n    n        y    y     y
+Windows 8                               y        y/y    n        y    y     y
+Windows 8     x64                       y        y/y    n        y    y     y
+Mac OS X Lion 10.7.3 32-bit             n        y/y    n        y    y     n
+Mac OS X Lion 10.7.3 64-bit             n        y/y    n        y    y     y
+Mac OS X Mountain Lion 10.8.1 64-bit    n        y/y    n        y    y     y
+Mac OS X Mavericks 10.9.1 64-bit        n        y/y    n        y    y     ?
+AIX 6.1 32- and 64-bit                  n        y/n    n        y    y     y
+CentOS 5.9 Linux 2.6.18-308 i686 GNU    y        y/y    y        y    y     y
+CentOS 5.9 Linux 2.6.18-308 i686 Intel  n        y/y    n        y    y     y
+CentOS 5.9 Linux 2.6.18-308 i686 PGI    n        y/y    n        y    y     y
+CentOS 5.9 Linux 2.6.18 x86_64 GNU      n        y/y    n        y    y     y
+CentOS 5.9 Linux 2.6.18 x86_64 Intel    n        y/y    n        y    y     y
+CentOS 6.4 Linux 2.6.32 x86_64 GNU      y        y/y    y        y    y     y
+CentOS 6.4 Linux 2.6.32 x86_64 Intel    n        y/y    n        y    y     y
+CentOS 6.4 Linux 2.6.32 x86_64 PGI      n        y/y    n        y    y     y
+Linux 2.6.32-431.11.2.el6.ppc64         n        y/n    n        y    y     y
+
+
+Platform                                 Shared  Shared    Shared    Thread-
+                                         C libs  F90 libs  C++ libs  safe
+Solaris2.11 32-bit                         y       y         y         y
+Solaris2.11 64-bit                         y       y         y         y
+Windows 7                                  y       y         y         y
+Windows 7 x64                              y       y         y         y
+Windows 7 Cygwin                           n       n         n         y
+Windows 7 x64 Cygwin                       n       n         n         y
+Windows 8                                  y       y         y         y
+Windows 8 x64                              y       y         y         y
+Mac OS X Lion 10.7.3 32-bit                y       n         y         y
+Mac OS X Lion 10.7.3 64-bit                y       n         y         y
+Mac OS X Mountain Lion 10.8.1 64-bit       y       n         y         y
+Mac OS X Mavericks 10.9.1 64-bit           y       n         y         y
+AIX 6.1 32- and 64-bit                     y       n         n         y
+CentOS 5.9 Linux 2.6.18-308 i686 GNU       y       y         y         y
+CentOS 5.9 Linux 2.6.18-308 i686 Intel     y       y         y         n
+CentOS 5.9 Linux 2.6.18-308 i686 PGI       y       y         y         n
+CentOS 5.9 Linux 2.6.18 x86_64 GNU         y       y         y         y
+CentOS 5.9 Linux 2.6.18 x86_64 Intel       y       y         y         n
+CentOS 6.4 Linux 2.6.32 x86_64 GNU         y       y         y         n
+CentOS 6.4 Linux 2.6.32 x86_64 Intel       y       y         y         n
+CentOS 6.4 Linux 2.6.32 x86_64 PGI         y       y         y         n
+Linux 2.6.32-431.11.2.el6.ppc64            y       y         y         n
+
+Compiler versions for each platform are listed in the preceding
+"Supported Platforms" table.
+
+
+More Tested Platforms
+=====================
+The following platforms are not supported but have been tested for this release.
+
+    Linux 2.6.18-308.13.1.el5PAE  MPICH mpich 3.1.2 compiled with
+    #1 SMP i686 i686 i386             gcc 4.9.1 and gfortran 4.9.1
+    (jam)                         g95 (GCC 4.0.3 (g95 0.94!)
+
+    Linux 2.6.18-431.11.2.el6     MPICH mpich 3.1.2 compiled with
+    #1 SMP x86_64 GNU/Linux           gcc 4.9.1 and gfortran 4.9.1
+    (platypus)                    g95 (GCC 4.0.3 (g95 0.94!)
+
+    FreeBSD 8.2-STABLE i386       gcc 4.2.1 [FreeBSD] 20070719
+    (loyalty)                     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)                     gcc 4.6.1 20110422
+                                  g++ 4.6.1 20110422
+                                  gfortran 4.6.1 20110422
+
+    Debian7.5.0 3.2.0-4-686 #1 SMP Debian 3.2.51-1 i686 GNU/Linux
+                                  gcc (Debian 4.7.2-5) 4.7.2
+                                  GNU Fortran (Debian 4.7.2-5) 4.7.2
+                                  (cmake and autotools)
+
+    Debian7.5.0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
+                                  gcc (Debian 4.7.2-5) 4.7.2
+                                  GNU Fortran (Debian 4.7.2-5) 4.7.2
+                                  (cmake and autotools)
+
+    Fedora20 3.15.3-200.fc20.i6866 #1 SMP i686 i686 i386 GNU/Linux
+                                  gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
+                                  GNU Fortran (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
+                                  (cmake and autotools)
+
+    Fedora20 3.15.3-200.fc20.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
+                                  gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
+                                  GNU Fortran (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
+                                  (cmake and autotools)
+
+    SUSE 13.1 3.11.10-17-desktop #1 SMP PREEMPT i686 athlon i386 GNU/Linux
+                                  gcc (SUSE Linux) 4.8.1
+                                  GNU Fortran (SUSE Linux) 4.8.1
+                                  (cmake and autotools)
+
+    SUSE 13.1 3.11.10-17-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
+                                  gcc (SUSE Linux) 4.8.1
+                                  GNU Fortran (SUSE Linux) 4.8.1
+                                  (cmake and autotools)
+
+    Ubuntu 14.04 3.13.0-35-generic #62-Ubuntu SMP i686 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
+                                  GNU Fortran (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
+                                  (cmake and autotools)
+
+    Ubuntu 14.04 3.13.0-35-generic #62-Ubuntu SMP x86_64 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
+                                  GNU Fortran (Ubuntu/Linaro 4.9.1-0ubuntu1) 4.9.1
+                                  (cmake and autotools)
+
+    Cray Linux Environment (CLE)  PrgEnv-pgi/4.0.46
+    hopper.nersc.gov              pgcc 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+                                  pgf90 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+                                  pgCC 12.5-0 64-bit target on x86-64 Linux -tp shanghai
+
+
+Known Problems
+==============
+* "make check" fails on CYGWIN when building shared lib files is enabled.  The
+   default on Cygwin has been changed to disable shared.  It can be enabled with
+   the --enable-shared configure option but is likely to fail "make check"
+   with GCC compilers. (LK -2015/04/16)
+
+* CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
+  catches some undefined behavior in the alignment algorithm of the macro DETECT_I
+  in H5detect.c (Issue 8147).  Since the algorithm is trying to detect the alignment
+  of integers, ideally the flag -fcatch-undefined-behavior shouldn't to be used for
+  H5detect.c. In the future, we can separate flags for H5detect.c from the rest of
+  the library. (SLU - 2013/10/16)
+
+* The 5.9 C++ compiler on Sun failed to compile a C++ test ttypes.cpp.  It
+  complains with this message:
+      "/home/hdf5/src/H5Vprivate.h", line 130: Error: __func__ is not defined.
+
+  The reason is that __func__ is a predefined identifier in C99 standard.  The
+  HDF5 C library uses it in H5private.h.  The test ttypes.cpp includes
+  H5private.h (H5Tpkg.h<-H5Fprivate.h<-H5Vprivate.h<-H5private.h).  Sun's 5.9
+  C++ compiler doesn't support __func__, thus fails to compile the C++ test.
+  But 5.11 C++ compiler does.  To check whether your Sun C++ compiler knows this
+  identifier, try to compile the following simple C++ program:
+      #include<stdio.h>
+
+      int main(void)
+      {
+          printf("%s\n", __func__);
+          return 0;
+      }
+  (SLU - 2012/11/5)
+
+* The C++ and FORTRAN bindings are not currently working on FreeBSD with the
+  native release 8.2 compilers (4.2.1), but are working with gcc 4.6 from the
+  ports (and probably gcc releases after that).
+  (QAK - 2012/10/19)
+
+* The data conversion test dt_arith.c has failures (segmentation fault) from
+  "long double" to other datatypes during hard conversion when the library
+  is built with the default GCC 4.2.1 on Mac Lion system.  It only happens
+  with optimization (-O3, -O2, and -O1).  Some newer versions of GCC do not
+  have this problem.  Users should disable optimization or try newer version
+  of GCC. (Issue 8017. SLU - 2012/6/12)
+
+* The data conversion test dt_arith.c fails in "long double" to integer
+  conversion on Ubuntu 11.10 (3.0.0.13 kernal) with GCC 4.6.1 if the library
+  is built with optimization -O3 or -O2.  The older GCC (4.5) or newer kernal
+  (3.2.2 on Fedora) doesn't have the problem.  Users should lower down the
+  optimization level (-O1 or -O0) by defining CFLAGS in the command line of
+  "configure" like:
+
+      CFLAGS=-O1 ./configure
+
+  It will overwrite the library's default optimization level. (Issue 7829.
+  SLU - 2012/2/7)
+
+* --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
+  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 filesystems.
+
+  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/
+
+* Parallel mode in AIX will fail some of the testcheck_version.sh tests where
+  it treats "exit(134) the same as if process 0 had received an abort signal.
+  This is fixed and will be available in the next release. AKC - 2009/11/3
+
+* The PathScale MPI implementation, accessing a Panasas file system, would
+  cause H5Fcreate() with H5F_ACC_EXCL to fail even when the file is not
+  existing. This is due to the MPI_File_open() call failing if the amode 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 SNL, spirit/liberty/thunderbird: The serial tests pass but parallel
+  tests failed with MPI-IO file locking message. AKC - 2007/6/25.
+* On Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers use
+  -mp -O1 compilation flags to build the libraries. Higher level of optimization
+  causes failures in several HDF5 library tests.
+* For HPUX 11.23 many tools tests failed for 64-bit version when linked to the
+  shared libraries (tested for 1.8.0-beta2)
+* For SNL, Red Storm: only paralle HDF5 is supported.  The serial tests pass
+  and the parallel tests also pass with lots of non-fatal error messages.
+* on SUN 5.10 C++ test fails in the "Testing Shared Datatypes with Attributes" test
+* configuring with --enable-debug=all produces compiler errors on most
+  platforms.  Users who want to run HDF5 in debug mode should use
+  --enable-debug rather than --enable-debug=all to enable debugging
+  information on most modules.
+* On Mac OS 10.4, test/dt_arith.c has some errors in conversion from long
+  double to (unsigned) long long and from (unsigned)long long to long double.
+* On Altix SGI with Intel 9.0 testmeta.c would not compile with -O3
+  optimization flag.
+* On VAX, Scaleoffset filter isn't supported. The filter cannot be applied to
+  HDF5 data generated on VAX. Scaleoffset filter only supports IEEE standard
+  for floating-point data.
+* On Cray X1, a lone colon on the command line of h5dump --xml (as in
+  the testh5dumpxml.sh script) is misinterpereted by the operating system
+  and causes an error.
+* On mpich 1.2.5 and 1.2.6, we found that if more than two processes
+  contribute no IO and the application asks to do IO with collective, we found
+  that when using 4 processors, a simple collective write will be hung
+  sometimes. This can be verified with t_mpi test under testpar.
+* The dataset created or rewritten with the v1.6.3 library or after can't
+  be read with the v1.6.2 library or before when Fletcher32 EDC(filter) is
+  enabled.  There was a bug in the calculating code of the Fletcher32
+  checksum in the library before v1.6.3.  The checksum value wasn't 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 is no
+  longer the same as before on little-endian system.  The library release
+  after 1.6.4 can still read the dataset created or rewritten with the library
+  of v1.6.2 or before.  SLU - 2005/6/30
+* For the version 6(6.02 and 6.04) of Portland Group compiler on AMD Opteron
+  processor, there's a bug in the compiler for optimization(-O2).  The library
+  failed in several tests but all related to multi driver.  The problem has
+  been reported to the vendor.
+* 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".  HDF5 does not use sockets (except for stream-VFD).  This is
+  due to problems of the poe command trying to set up the debug socket.
+  Check if there are many old /tmp/s.pedb.* staying around.  These are
+  sockets used by the poe command and left behind due to failed commands.
+  Ask your system administrator to clean them out.  Lastly, request IBM
+  to provide a mean to run poe without the debug socket.
+
+* The C++ library's tests fails when compiling with PGI C++ compiler.  The
+  workaround until the problem is correctly handled is to use the
+  flag "--instantiate=local" prior to the configure and build steps, as:
+        setenv CXX "pgCC --instantiate=local"  for pgCC 5.02 and higher
+
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* 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.
+
+* With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+  compilation. The ANSI version of the compiler complains about not being
+  able to handle the `long long' datatype with the warning:
+
+        warning: ANSI C does not support `long long'
+
+  This warning is innocuous and can be safely ignored.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Not all platforms behave correctly with szip's shared libraries. Szip is
+  disabled in these cases, and a message is relayed at configure time. Static
+  libraries should be working on all systems that support szip, and should be
+  used when shared libraries are unavailable. There is also a configure error
+  on Altix machines that incorrectly reports when a version of szip without
+  an encoder is being used.
+
+* On some platforms that use Intel and Absoft compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* On at least one system, (SDSC DataStar), the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+  set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+  exit $RETURN_VALUE
+
+  You get the HDF make files and test scipts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  can prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+
+* H5Ocopy() does not copy reg_ref attributes correctly when shared-message
+  is turn on. The value of the reference in the destination attriubte is
+  wrong. This H5Ocopy problem will affect h5copy tool
+
diff --git a/release_docs/HISTORY-1_9.txt b/release_docs/HISTORY-1_9.txt
deleted file mode 100644
index 8e7648a..0000000
--- a/release_docs/HISTORY-1_9.txt
+++ /dev/null
@@ -1,6 +0,0 @@
- HDF5 HISTORY
- ============
- This file contains history of the HDF5 1.9 branch
- 
- CONTENTS
-
diff --git a/release_docs/INSTALL b/release_docs/INSTALL
index 2dcb9be..d09aaa9 100644
--- a/release_docs/INSTALL
+++ b/release_docs/INSTALL
@@ -466,11 +466,13 @@ CONTENTS
             http://www.hdfgroup.org/HDF5/doc/TechNotes/ThreadSafeLibrary.html
 
 4.3.12. Backward compatibility
-        The 1.8 version of the HDF5 Library can be configured to operate
+        The 1.10 version of the HDF5 Library can be configured to operate
         identically to the v1.6 library with the 
             --with-default-api-version=v16
+        and to the v1.8 library with the
+            --with-default-api-version=v18
         configure flag. This allows existing code to be compiled with the
-        v1.8 library without requiring immediate changes to the application 
+        v1.10 library without requiring immediate changes to the application 
         source code.  For addtional configuration options and other details, 
         see "API Compatibility Macros in HDF5":
 
diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt
index 37326ed..b49b3a6 100644
--- a/release_docs/INSTALL_CMake.txt
+++ b/release_docs/INSTALL_CMake.txt
@@ -26,11 +26,11 @@ Obtaining HDF5 source code
    2. Obtain compressed (*.tar or *.zip) HDF5 source from
         http://www.hdfgroup.org/ftp/HDF5/current/src/
       and put it in "myhdfstuff".
-      Uncompress the file. There should be a hdf5-1.8."X" folder.
+      Uncompress the file. There should be a hdf5-1.10."X" folder.
 
 CMake version
    1. We suggest you obtain the latest CMake from the Kitware web site.
-      The HDF5 1.8."X" product requires a minimum CMake version 3.1.0,
+      The HDF5 1.10."X" product requires a minimum CMake version 3.1.0,
       where "X" is the current HDF5 release version.
 
 Note:
@@ -51,7 +51,7 @@ The following files referenced below are available at the HDF web site:
     http://www.hdfgroup.org/HDF5/release/cmakebuild.html
 
 Single compressed file with all the files needed, including source:
-    hdf5-1.8.16-CMake.zip or hdf5-1.8.16-CMake.tar.gz
+    hdf5-1.10.0-CMake.zip or hdf5-1.10.0-CMake.tar.gz
 
 Individual files
 -----------------------------------------------
@@ -84,19 +84,19 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
       following options:
 
       On 32-bit Windows with Visual Studio 2012, execute:
-         ctest -S HDF518config.cmake,BUILD_GENERATOR=VS2012 -C Release -VV -O hdf5.log
+         ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2012 -C Release -VV -O hdf5.log
       On 64-bit Windows with Visual Studio 2012, execute:
-         ctest -S HDF518config.cmake,BUILD_GENERATOR=VS201264 -C Release -VV -O hdf5.log
+         ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201264 -C Release -VV -O hdf5.log
       On 32-bit Windows with Visual Studio 2013, execute:
-         ctest -S HDF518config.cmake,BUILD_GENERATOR=VS2013 -C Release -VV -O hdf5.log
+         ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2013 -C Release -VV -O hdf5.log
       On 64-bit Windows with Visual Studio 2013, execute:
-         ctest -S HDF518config.cmake,BUILD_GENERATOR=VS201364 -C Release -VV -O hdf5.log
+         ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201364 -C Release -VV -O hdf5.log
       On Linux and Mac, execute:
-         ctest -S HDF518config.cmake,BUILD_GENERATOR=Unix -C Release -VV -O hdf5.log
+         ctest -S HDF5config.cmake,BUILD_GENERATOR=Unix -C Release -VV -O hdf5.log
 
       The command above will configure, build, test, and create an install
       package in the myhdfstuff folder. It will have the format:
-          HDF5-1.8.NN-<platform>.<zip or tar.gz>
+          HDF5-1.10.NN-<platform>.<zip or tar.gz>
 
           On Unix, <platform> will be "Linux". A similar .sh file will also be created.
           On Windows, <platform> will be "win64" or "win32". If you have an
@@ -116,13 +116,13 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
    6. To install, "X" is the current release version
 
       On Windows, execute:
-                HDF5-1.8."X"-win32.msi or HDF5-1.8."X"-win64.msi
+                HDF5-1.10."X"-win32.msi or HDF5-1.10."X"-win64.msi
       By default this program will install the hdf5 library into the
       "C:\Program Files" directory and will create the following
       directory structure:
          HDF_Group
          --HDF5
-         ----1.8."X"
+         ----1.10."X"
          ------bin
          ------include
          ------lib
@@ -130,35 +130,35 @@ To build HDF5 with the SZIP and ZLIB external libraries you will need to:
 
       On Linux, change to the install destination directory
       (create it if doesn't exist) and execute:
-                <path-to>/myhdfstuff/HDF5-1.8."X"-Linux.sh
+                <path-to>/myhdfstuff/HDF5-1.10."X"-Linux.sh
       After accepting the license, the script will prompt:
         By default the HDF5 will be installed in:
-        "<current directory>/HDF5-1.8."X"-Linux"
-        Do you want to include the subdirectory HDF5-1.8."X"-Linux?
+        "<current directory>/HDF5-1.10."X"-Linux"
+        Do you want to include the subdirectory HDF5-1.10."X"-Linux?
         Saying no will install in: "<current directory>" [Yn]:
       Note that the script will create the following directory structure
       relative to the install point:
          HDF_Group
          --HDF5
-         ----1.8."X"
+         ----1.10."X"
          ------bin
          ------include
          ------lib
          ------share
 
-      On Mac you will find HDF5-1.8."X"-Darwin.dmg in the myhdfstuff folder. Click
+      On Mac you will find HDF5-1.10."X"-Darwin.dmg in the myhdfstuff folder. Click
       on the dmg file to proceed with installation. After accepting the license,
       there will be a folder with the following structure:
          HDF_Group
          --HDF5
-         ----1.8."X"
+         ----1.10."X"
          ------bin
          ------include
          ------lib
          ------share
 
       By default the installation will create the bin, include, lib and cmake
-      folders in the <install destination directory>/HDF_Group/HDF5/1.8."X"
+      folders in the <install destination directory>/HDF_Group/HDF5/1.10."X"
 
 
 ========================================================================
@@ -181,13 +181,13 @@ Notes: This short set of instructions is written for users who want to
       5. Configure the C library, tools and tests with one of the following commands:
 
          On Windows 32 bit
-           cmake -G "Visual Studio 12 2013" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
+           cmake -G "Visual Studio 12 2013" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.10."X"
 
          On Windows 64 bit
-           cmake -G "Visual Studio 12 2013 Win64" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.8."X"
+           cmake -G "Visual Studio 12 2013 Win64" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ..\hdf5-1.10."X"
 
          On Linux and Mac
-           cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5-1.8."X"
+           cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_TESTING:BOOL=ON -DHDF5_BUILD_TOOLS:BOOL=ON ../hdf5-1.10."X"
 
          where "X" is the current release version.
 
@@ -202,13 +202,13 @@ Notes: This short set of instructions is written for users who want to
 
       9. To install
          On Windows, execute:
-                HDF5-1.8."X"-win32.msi or HDF5-1.8."X"-win64.msi
+                HDF5-1.10."X"-win32.msi or HDF5-1.10."X"-win64.msi
          By default this program will install the hdf5 library into the
          "C:\Program Files" directory and will create the following
          directory structure:
             HDF_Group
             --HDF5
-            ----1.8."X"
+            ----1.10."X"
             ------bin
             ------include
             ------lib
@@ -216,28 +216,28 @@ Notes: This short set of instructions is written for users who want to
 
          On Linux, change to the install destination directory
          (create if doesn't exist) and execute:
-                <path-to>/myhdfstuff/build/HDF5-1.8."X"-Linux.sh
+                <path-to>/myhdfstuff/build/HDF5-1.10."X"-Linux.sh
          After accepting the license, the script will prompt:
            By default the HDF5 will be installed in:
-           "<current directory>/HDF5-1.8."X"-Linux"
-           Do you want to include the subdirectory HDF5-1.8."X"-Linux?
+           "<current directory>/HDF5-1.10."X"-Linux"
+           Do you want to include the subdirectory HDF5-1.10."X"-Linux?
            Saying no will install in: "<current directory>" [Yn]:
          Note that the script will create the following directory structure
          relative to the install point:
             HDF_Group
             --HDF5
-            ----1.8."X"
+            ----1.10."X"
             ------bin
             ------include
             ------lib
             ------share
 
-         On Mac you will find HDF5-1.8."X"-Darwin.dmg in the build folder. Click
+         On Mac you will find HDF5-1.10."X"-Darwin.dmg in the build folder. Click
          on the dmg file to proceed with installation. After accepting the license,
          there will be a folder with the following structure:
             HDF_Group
             --HDF5
-            ----1.8."X"
+            ----1.10."X"
             ------bin
             ------include
             ------lib
@@ -249,7 +249,7 @@ IV. Further considerations
 ========================================================================
 
    1. We suggest you obtain the latest CMake for windows from the Kitware
-      web site. The HDF5 1.8."X" product requires a minimum CMake version 3.1.0.
+      web site. The HDF5 1.10."X" product requires a minimum CMake version 3.1.0.
 
    2. If you plan to use Zlib or Szip:
       A. Download the binary packages and install them in a central location.
@@ -380,8 +380,8 @@ These five steps are described in detail below.
             * Visual Studio 12 2013 Win64
             * Visual Studio 11 2012
             * Visual Studio 11 2012 Win64
-            * Visual Studio 10 2010
-            * Visual Studio 10 2010 Win64
+            * Visual Studio 14 2015
+            * Visual Studio 14 2015 Win64
 
         <options> is:
             * SZIP_INCLUDE_DIR:PATH=<path to szip includes directory>
@@ -570,35 +570,43 @@ BUILD_TESTING      "Build HDF5 Unit Testing"   ON
 HDF5_BUILD_CPP_LIB  "Build HDF5 C++ Library"         ON
 HDF5_BUILD_EXAMPLES "Build HDF5 Library Examples"    ON
 HDF5_BUILD_FORTRAN  "Build FORTRAN support"          OFF
+HDF5_BUILD_JAVA     "Build JAVA support"             OFF
 HDF5_BUILD_HL_LIB   "Build HIGH Level HDF5 Library"  ON
 HDF5_BUILD_TOOLS    "Build HDF5 Tools"               ON
-if (HDF5_BUILD_FORTRAN)
-    HDF5_ENABLE_F2003 "Enable FORTRAN 2003 Standard" ON
 
 ---------------- HDF5 Advanced Options ---------------------
+ALLOW_UNSUPPORTED              "Allow unsupported combinations of configure options"          OFF
 HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings"                                    OFF
-HDF5_Enable_Clear_File_Buffers "Securely clear file buffers before writing to file"           ON
-HDF5_Enable_Instrument         "Instrument The library"                                       OFF
+HDF5_ENABLE_INSTRUMENT         "Instrument The library"                                       OFF
 HDF5_ENABLE_CODESTACK          "Enable the function stack tracing (for developer debugging)." OFF
 HDF5_ENABLE_COVERAGE           "Enable code coverage for Libraries and Programs"              OFF
+HDF5_ENABLE_DEBUG_APIS         "Turn on extra debug output in all packages"                   OFF
 HDF5_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols"                         ON
+HDF5_ENABLE_DIRECT_VFD         "Build the Direct I/O Virtual File Driver"                     OFF
 HDF5_ENABLE_EMBEDDED_LIBINFO   "embed library info into executables"                          ON
 HDF5_ENABLE_HSIZET             "Enable datasets larger than memory"                           ON
 HDF5_ENABLE_LARGE_FILE         "Enable support for large (64-bit) files on Linux."            ON
 HDF5_ENABLE_PARALLEL           "Enable parallel build (requires MPI)"                         OFF
 HDF5_ENABLE_TRACE              "Enable API tracing capability"                                OFF
 HDF5_ENABLE_USING_MEMCHECKER   "Indicate that a memory checker is used"                       OFF
+HDF5_GENERATE_HEADERS          "Rebuild Generated Files"                                      OFF
+HDF5_JAVA_PACK_JRE             "Package a JRE installer directory"                            OFF
 HDF5_MEMORY_ALLOC_SANITY_CHECK "Indicate that internal memory allocation sanity checks are enabled" OFF
 HDF5_METADATA_TRACE_FILE       "Enable metadata trace file collection"                        OFF
 HDF5_NO_PACKAGES               "Do not include CPack Packaging"                               OFF
+HDF5_PACK_EXAMPLES             "Package the HDF5 Library Examples Compressed File"            OFF
+HDF5_PACK_MACOSX_FRAMEWORK     "Package the HDF5 Library in a Frameworks"                     OFF
 HDF5_PACKAGE_EXTLIBS           "CPACK - include external libraries"                           OFF
 HDF5_STRICT_FORMAT_CHECKS      "Whether to perform strict file format checks"                 OFF
+HDF_TEST_EXPRESS               "Control testing framework (0-3)"                              "0"
 HDF5_TEST_VFD                  "Execute tests with different VFDs"                            OFF
 HDF5_USE_16_API_DEFAULT        "Use the HDF5 1.6.x API by default"                            OFF
+HDF5_USE_18_API_DEFAULT        "Use the HDF5 1.8.x API by default"                            OFF
 HDF5_USE_FOLDERS               "Enable folder grouping of projects in IDEs."                  OFF
 HDF5_WANT_DATA_ACCURACY        "IF data accuracy is guaranteed during data conversions"       ON
 HDF5_WANT_DCONV_EXCEPTION      "exception handling functions is checked during data conversions" ON
 HDF5_ENABLE_THREADSAFE         "Enable Threadsafety"                                          OFF
+SKIP_HDF5_FORTRAN_SHARED       "Do not build the fortran shared libraries"                    OFF
 if (APPLE)
     HDF5_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path"  OFF
 if (CMAKE_BUILD_TYPE MATCHES Debug)
@@ -649,13 +657,13 @@ adding an option (${CTEST_SCRIPT_ARG}) to the platform configuration script.
 #############################################################################################
 ### ${CTEST_SCRIPT_ARG} is of the form OPTION=VALUE                                       ###
 ### BUILD_GENERATOR required [Unix, VS2015, VS201564, VS2013, VS201364, VS2012, VS201264] ###
-### ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201264 -C Release -V -O hdf519.log        ###
+### ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201264 -C Release -V -O hdf5.log          ###
 #############################################################################################
 
 cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
 ############################################################################
 # Usage:
-#     ctest -S HDF518config.cmake,OPTION=VALUE -C Release -VV -O test.log
+#     ctest -S HDF5config.cmake,OPTION=VALUE -C Release -VV -O test.log
 # where valid options for OPTION are:
 #     BUILD_GENERATOR - The cmake build generator:
 #            Unix    * Unix Makefiles
@@ -671,20 +679,22 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
 #     CTEST_SOURCE_NAME  -  source folder
 #     STATIC_LIBRARIES  -  Build/use static libraries
 #     FORTRAN_LIBRARIES -  Build/use fortran libraries
+#     JAVA_LIBRARIES -  Build/use java libraries
 #     NO_MAC_FORTRAN  - Yes to be SHARED on a Mac
 ##############################################################################
 
-set(CTEST_SOURCE_VERSION 1.9)
-set(CTEST_SOURCE_VERSEXT "")
+set(CTEST_SOURCE_VERSION 1.10.0)
+set(CTEST_SOURCE_VERSEXT "-pre1")
 
 ##############################################################################
 # handle input parameters to script.
 #BUILD_GENERATOR - which CMake generator to use, required
-#INSTALLDIR - HDF5-1.9 root folder
+#INSTALLDIR - HDF5-1.10.0 root folder
 #CTEST_BUILD_CONFIGURATION - Release, Debug, RelWithDebInfo
-#CTEST_SOURCE_NAME - name of source folder; HDF5-1.9
+#CTEST_SOURCE_NAME - name of source folder; HDF5-1.10.0
 #STATIC_LIBRARIES - Default is YES
 #FORTRAN_LIBRARIES - Default is NO
+#JAVA_LIBRARIES - Default is NO
 #NO_MAC_FORTRAN - set to TRUE to allow shared libs on a Mac
 if(DEFINED CTEST_SCRIPT_ARG)
     # transform ctest script arguments of the form
@@ -722,10 +732,10 @@ else()
 endif()
 
 if(NOT DEFINED INSTALLDIR)
-  if(NOT WIN32)
-    set(INSTALLDIR "/usr/local/myhdf5")
-  else()
+  if(WIN32)
     set(INSTALLDIR "C:\\Program\ Files\\myhdf5")
+  else()
+    set(INSTALLDIR "/usr/local/myhdf5")
   endif()
 endif()
 if(NOT DEFINED CTEST_BUILD_CONFIGURATION)
@@ -736,9 +746,18 @@ if(NOT DEFINED CTEST_SOURCE_NAME)
 endif()
 if(NOT DEFINED STATIC_LIBRARIES)
     set(STATICLIBRARIES "YES")
+else()
+    set(STATICLIBRARIES "NO")
 endif()
 if(NOT DEFINED FORTRAN_LIBRARIES)
     set(FORTRANLIBRARIES "NO")
+else()
+    set(FORTRANLIBRARIES "YES")
+endif()
+if(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "NO")
+else()
+    set(JAVALIBRARIES "YES")
 endif()
 
 set(CTEST_BINARY_NAME "build")
@@ -756,7 +775,15 @@ endif()
 if(WIN32)
   set(SITE_OS_NAME "Windows")
   set(SITE_OS_VERSION "WIN7")
-  if(${BUILD_GENERATOR} STREQUAL "VS201364")
+  if(${BUILD_GENERATOR} STREQUAL "VS201564")
+    set(SITE_OS_BITS "64")
+    set(SITE_COMPILER_NAME "vs2015")
+    set(SITE_COMPILER_VERSION "14")
+  elseif(${BUILD_GENERATOR} STREQUAL "VS2015")
+    set(SITE_OS_BITS "32")
+    set(SITE_COMPILER_NAME "vs2015")
+    set(SITE_COMPILER_VERSION "14")
+  elseif(${BUILD_GENERATOR} STREQUAL "VS201364")
     set(SITE_OS_BITS "64")
     set(SITE_COMPILER_NAME "vs2013")
     set(SITE_COMPILER_VERSION "12")
@@ -804,7 +831,7 @@ set(MODEL "Experimental")
 #set(LOCAL_UPDATE "TRUE")
 set(REPOSITORY_URL "http://svn.hdfgroup.uiuc.edu/hdf5/trunk")
 #uncomment to use a compressed source file: *.tar on linux or mac *.zip on windows
-#set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}${CTEST_SOURCE_VERSEXT}")
+#set(CTEST_USE_TAR_SOURCE "${CTEST_SOURCE_VERSION}")
 ###################################################################
 
 ###################################################################
@@ -840,6 +867,12 @@ if(${FORTRANLIBRARIES})
 else()
   set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
 endif()
+####      java       ####
+if(${JAVALIBRARIES})
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=ON")
+else()
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=OFF")
+endif()
 
 ### disable test program builds
 #set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_TESTING:BOOL=OFF")
diff --git a/release_docs/INSTALL_Cygwin.txt b/release_docs/INSTALL_Cygwin.txt
index 26d3cb9..ddffcf1 100644
--- a/release_docs/INSTALL_Cygwin.txt
+++ b/release_docs/INSTALL_Cygwin.txt
@@ -99,19 +99,19 @@ Build, Test and Install HDF5 on Cygwin
 
    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.x' directory.
+   an `hdf5-1.10.x' directory.
 
    2.1 Non-compressed tar archive (*.tar)
 
-            $ tar xf hdf5-1.8.x.tar
+            $ tar xf hdf5-1.10.x.tar
 
    2.2 Gzip'd tar archive (*.tar.gz)
 
-            $ gunzip < hdf5-1.8.x.tar.gz | tar xf -
+            $ gunzip < hdf5-1.10.x.tar.gz | tar xf -
 
    2.3 Bzip'd tar archive (*.tar.bz2)
 
-            $ bunzip2 < hdf5-1.8.x.tar.bz2 | tar xf - 
+            $ bunzip2 < hdf5-1.10.x.tar.bz2 | tar xf - 
 
 2. Setup Environment
 
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 2fa1f72..b30f0cf 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,15 +1,15 @@
-HDF5 version 1.10.0-alpha1 released on 2016-01-18
+HDF5 version 1.10.0-pre1 released on 2016-03-17
 ================================================================================
 
 
 INTRODUCTION
 
 This document describes the differences between HDF5-1.8.* and
-HDF5 1.10.0-alpha1 release, and contains information on the platforms
-tested and known problems in HDF5-1.10.0-alpha1.
+HDF5 1.10.0 release, and contains information on the platforms
+tested.
 
 
-Links to HDF5 1.10.0-alpha* source code can be found on The HDF Group's
+Links to HDF5 1.10.0 source code can be found on The HDF Group's
 development FTP server at the following location:
      http://www.hdfgroup.org/HDF5/release/obtain5110.html
 User documentation be accessed directly at this location:
@@ -34,7 +34,76 @@ CONTENTS
 
 New Features
 ============
-This alpha1 release supports the following features:
+This release supports the following features:
+
+    Configuration
+    -------------
+    - API compatibility with HDF5 1.8 flag was added
+   
+    The 1.10 version of the HDF5 Library can be configured to operate identically
+    to the v1.8 library with the --with-default-api-version=v18 configure flag. 
+    This allows existing code to be compiled with the v1.10 library without 
+    requiring immediate changes to the application source code.  For addtional 
+    configuration options and other details, see "API Compatibility Macros in HDF5":
+    http://www.hdfgroup.org/HDF5/doc/RM/APICompatMacros.html 
+
+    - Autotools configuration has been extensively reworked
+
+    The autotools configuration options have been updated to allow more fine-
+    grained control of the build options and to correct some bugs. See
+    configure --help for comprehensive information on each option.
+
+    Specific changes:
+
+    * --enable-debug and --enable-production are no longer accepted. Use
+      --enable-build-mode=(debug | production) instead. These set appropriate
+      defaults for the other configuration options (symbols, optimization,
+      etc.). These defaults can be overridden by the user.
+
+    * Extra debug output messages are no longer enabled with
+      --enable-debug=<package list>. Use --enable-internal-debug=<pkg list>
+      instead.
+
+    * A new --enable-symbols option allows symbols to be generated
+      independently of the build mode. --disable-symbols can be used to strip
+      symbols from the binary.
+
+    * A new --enable-asserts option sets/unsets NDEBUG. This is independent of
+      the build mode. This also enables some extra low-overhead debug checks
+      in the library.
+
+    * A new --enable-profiling option sets profiling flags. This is
+      independent of the build mode.
+
+    * A new --enable-optimization option sets the optimization level. This is
+      independent of the build mode.
+
+    * Many of these options can take a flags string that will be used to
+      build the library. This can be useful for specifying custom optimization
+      flags (e.g., -Os, -Ofast), etc.
+
+    * gnu C++ and Fortran use configure sub-files that update the build flags
+      and turn on warnings. The increase in warnings when building these
+      wrapper libraries is due to these flag changes, not a decrease in code
+      quality.
+
+    * The option to clear file buffers has been removed. Any buffer that will
+      eventually be written to disk will now always be memset to zero. This
+      prevents the previous contents of the buffer from being written to the
+      disk if the buffer contents are not completely overwritten, which has
+      security implications.
+
+    - LFS changes
+
+    The way the autotools handle large file support (LFS) has been overhauled
+    in this release.
+
+    * We assume ftello and fseeko exist
+
+    * We no longer explicitly use the *64 I/O functions. Instead we rely on a
+      mapping provided by _FILE_OFFSET_BITS or its equivalent.
+
+    * _LARGEFILE(64)_SOURCE is no longer exported via AM_CPPFLAGS.
 
     Parallel Library:
     -----------------
@@ -70,7 +139,7 @@ This alpha1 release supports the following features:
     the data. An HDF5 virtual dataset (VDS) is an HDF5 dataset that is composed of 
     source HDF5 datasets in a predefined mapping. VDS can be used with the SWMR 
     feature. For documentation check 
-    https://www.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesSwmrDocs.html
+    https://www.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesVirtualDatasetDocs.html
 
     - Persistent Free File Space Tracking
 
@@ -82,6 +151,16 @@ This alpha1 release supports the following features:
     http://www.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesFileSpaceMgmtDocs.html 
 
 
+    C++ Library:
+    ------------
+     - New member function added to H5::ArrayType
+
+       The assignment operator ArrayType::operator= is added because ArrayType
+       has pointer data members.
+
+       (BMR, 2016/03/07, HDFFV-9562)
+
+
     Tools:
     ------
     - h5watch 
@@ -100,12 +179,98 @@ This alpha1 release supports the following features:
     using SWMR access, can be converted to be accessed by the HDF5 1.18 library 
     and tools. The tools doesn't rewrite raw data, but HDF5 metadata only. 
 
+
+
     High-Level APIs:
-    ------
+    ----------------
     - H5DOappend
 
     The function appends data to a dataset along a specified dimension.
 
+
+     C Packet Table API
+     ------------------ 
+     - Replacement of a public function
+
+      The existing function H5PTcreate_fl limits applications to deflate
+      compression only.  The public function H5PTcreate is added to replace
+      H5PTcreate_fl.  H5PTcreate takes a property list ID to provide
+      flexibility on creation properties.
+
+	hid_t H5PTcreate(hid_t loc_id, const char *dset_name,
+                         hid_t dtype_id, hsize_t chunk_size, hid_t plist_id);
+
+       (BMR, 2016/03/04, HDFFV-8623)
+
+     - New public functions
+
+      Two accessor functions were added per HDFFV-8623/patch 003.
+	/* Returns the ID of the dataset associated with the packet table  */
+	   hid_t H5PTget_dataset(hid_t table_id);
+
+	/* Returns the ID of the datatype the packet table uses */
+	   hid_t H5PTget_type(hid_t table_id);
+
+      (BMR, 2016/03/04, HDFFV-8623)
+
+     - Regarding #ifdef VLPT_REMOVED
+
+      The #ifdef VLPT_REMOVED blocks are removed from the PT library source
+      except the following cases:
+      + H5PTis_varlen() is made available again.
+      + H5PTfree_vlen_readbuff() now became H5PTfree_vlen_buff()
+
+      (BMR, 2016/03/04, HDFFV-442)
+
+     C++ Packet Table API
+     -------------------- 
+     - New constructor
+
+      An overloaded constructor is added to FL_PacketTable and takes a property
+      list ID to provide flexibility on creation properties.
+
+	FL_PacketTable(hid_t fileID, hid_t plist_id, const char* name, hid_t dtypeID, hsize_t chunkSize);
+
+      (BMR, 2016/03/08, HDFFV-8623)
+
+     - New public functions
+
+      Two accessor wrappers to class PacketTable, per HDFFV-8623/patch 004.
+	/* Returns the ID of the dataset associated with the packet table  */
+	   hid_t PacketTable::GetDataset()
+
+	/* Returns the ID of the datatype the packet table uses */
+	   hid_t PacketTable::GetDataset()
+
+        (BMR, 2016/03/04, HDFFV-8623)
+
+     - Member functions having "char*" as an argument
+
+      Overloaded functions were added to provide "const char*" argument, the
+      existing version will be deprecated.
+
+        (BMR, 2016/03/04)
+
+     - Regarding #ifdef VLPT_REMOVED
+
+      The #ifdef VLPT_REMOVED blocks are removed from the PT library source
+      except the following cases:
+	+ VL_PacketTable::IsVariableLength() is moved to PacketTable
+	+ VL_PacketTable::FreeReadBuff() now became PacketTable::FreeBuff()
+
+        (BMR, 2016/03/04, HDFFV-442)
+
+
+    Java wrapper library
+    --------------------
+
+    Java HDF5 JNI library has been integrated into the HDF5 repo, the configure 
+    option is "--enable-java" and the CMake option is HDF5_BUILD_JAVA:BOOL=ON.
+    The package hierarchy has changed from the HDF5 1.8 JNI, which was 
+    "ncsa.hdf.hdflib.hdf5", to HDF5 1.10, "hdf.hdflib.hdf5".
+
+    Also there are a number of new APIs added, including those for VDS and SWMR.
+
     Other important changes:
     -----------------------
 
@@ -115,19 +280,63 @@ This alpha1 release supports the following features:
     -------------
     See http://www.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesSwmrDocs.html#Tools
 
-Issues Addressed in this Release 
-================================
-    - h5format_convert tool didn't downgrade version of the superblock. Fixed. See
-      Known Problems section.  EIP 2016-01-11.
+
+Issues Addressed in this Release since alpha1
+=============================================
+
+     - Wrong settings returned for a dataset access property list.  
+ 
+       One couldn't get the correct access property setting with the following functions calls
+       H5Pget_virtual_printf_gap
+       H5Pget_virtual_view
+       H5Pget_efile_prefix
+
+       when a dataset access property list was obtained from H5Dget_access_plist(). Fixed. 
+       (DER and NAF 2016-03-14 HDFFV-9716)
+
+     - h5dump segfaulted when provided with invalid arguments or when optional aruments are last option
+       on command line. 
+       
+       When h5dump was provided with the name of a non existing file or when optional arguments were the
+       last option on the command line, h5dump failed. Fixed.
+       (ADB 2016-02-28 HDFFV-9639, HDFFV-9684)
+
+     - HDF5 library segfaults on a corrupted file.
+
+       The HDF5 library didn't propagate an error when encounting a corruped metadata in an HDF5 file.
+       The issue was fixed for a specific filei porvided by a user. If you still see the problem, 
+       please contact help at hdfgroup.org 
+       (MC 2016-02-18 HDFFV-9670)
+
+     - When the latest file format is used, and when a chunked dataset is created with a datatype with the size 
+       bigger than a chunk size, the data cannot be read back. 
+       
+       The issue was reported for the chunked datasets with a string datatype, and was confirmed for other i
+       datatypes with the sizes bigger than the chunk size in bytes. Fixed.
+       (JM 2016-02-13 HDFFV-9672)
+       
+     - Control over the location of the external files
+
+       New API H5Pset_efile_prefix was added to specify locations of the external files.
+       (DER 2016-02-04 HDFFV-8740)
+  
+
+
+     
+Issues Addressed in this Release since alpha0 
+=============================================
+    - h5format_convert tool didn't downgrade version of the superblock. Fixed. 
+      (EIP 2016-01-11)
 
     - It was reported that alpha0 crashed when used with multiple threads. 
       The issue exists in the HDF5 library versions 1.8 and 1.9. 
       The problem is related to a shared file pointer used in the misc. data 
       structures. The thread-safe library exposed paths in the library where 
-      file pointer becomes invalid. Alpha1 release contains the fixes for the specific 
+      file pointer became invalid. Alpha1 release contains the fixes for the specific 
       use case as decribed in HDFFV-9643.
       We will keep working on identifying other paths in the library with similar problem
-      and fixing the issue.  EIP 2016-01-15
+      and fixing the issue.  
+      (EIP 2016-01-15)
 
 Supported Platforms
 ===================
@@ -138,10 +347,10 @@ They are built with the configure process unless specified otherwise.
     (NASA G-ADA)                  xlC/xlC_r 10.1.0.5
                                   xlf90/xlf90_r 12.1.0.6
 
-    Linux 2.6.32-573.3.1.el6    GNU C (gcc), Fortran (gfortran), C++ (g++)
+    Linux 2.6.32-573.18.1.el6    GNU C (gcc), Fortran (gfortran), C++ (g++)
     #1 SMP x86_64 GNU/Linux       compilers:
-    (platypus)                       Version 4.4.7 20120313
-                                     Version 4.8.4, Version 5.2.0
+    (mayll/platypus)                 Version 4.4.7 20120313 (Red Hat 4.4.7-16)
+                                     Version 4.9.3, Version 5.2.0
                                   PGI C, Fortran, C++ for 64-bit target on
                                   x86-64;
                                       Version 15.7-0
@@ -156,10 +365,10 @@ They are built with the configure process unless specified otherwise.
                                   IBM XL C/C++ V13.1
                                   IBM XL Fortran V15.1
 
-    Linux 3.10.0-229.14.1.el7   GNU C (gcc), Fortran (gfortran), C++ (g++)
+    Linux 3.10.0-327.10.1.el7   GNU C (gcc), Fortran (gfortran), C++ (g++)
     #1 SMP x86_64 GNU/Linux       compilers:
-    (kituo/moohan)                  Version 4.8.3 20140911 (Red Hat 4.8.3-9)
-                                    Version 5.2.0
+    (kituo/moohan)                  Version 4.8.5 20150623 (Red Hat 4.8.5-4)
+                                    Version 4.9.3, Version 5.2.0
                                   Intel(R) C (icc), C++ (icpc), Fortran (icc)
                                   compilers:
                                      Version 15.0.3.187 Build 20150407
@@ -197,6 +406,10 @@ They are built with the configure process unless specified otherwise.
     64-bit    			  gfortran GNU Fortran (GCC) 4.9.2
     (osx1010dev/osx1010test)      Intel icc/icpc/ifort version 15.0.3
 
+    Mac OS X El Capitan 10.11.3     Apple clang/clang++ version 7.0.2 from Xcode 7.0.2
+    64-bit    			  gfortran GNU Fortran (GCC) 5.2.0
+    (osx1010dev/osx1010test)      Intel icc/icpc/ifort version 15.0.3
+
 
 Tested Configuration Features Summary
 =====================================
@@ -263,14 +476,12 @@ The following platforms are not supported but have been tested for this release.
     #1 SMP x86_64 GNU/Linux
     (platypus)
 
-    Mac OS X El Capitan 10.11     Apple clang/clang++ version 7.0.0 from Xcode 7.0.1
-    64-bit    			  gfortran GNU Fortran (GCC) 5.2.0
-    (VM)
-
     Windows 7                     Visual Studio 2008  (cmake)
 
     Windows 7 x64                 Visual Studio 2008  (cmake)
 
+    Windows 7 x64                 Visual Studio 2010  (cmake) with SWMR using GPFS
+
     Windows 10                    Visual Studio 2013 w/ Intel Fortran 15 (cmake)
 
     Windows 10 x64                Visual Studio 2013 w/ Intel Fortran 15 (cmake)
@@ -303,10 +514,13 @@ The following platforms are not supported but have been tested for this release.
 
 Known Problems
 ==============
-WARNINGS: This section is under contsruction. It will be updated for the first HDF5 1.10.0-beta
-release. 
+The problems reported for alpha releases were adressed in the HDF5 1.10.0-pre1 release.
+
+There are no known problems for the newly released features listed in the "New Features"
+section of this document. 
+
+We didn't verify that the known problems listed in the RELEASE.txt version HDF5 1.8.16 are
+still valid. This section will be updated for the final release of HDF5 1.10.0.
+
 
-  - h5format_convert only works with the files that contain chunked datasets.
-  - h5repack tool fails to downgrade object layout message to make file 
-    1.8 compatible.
 
diff --git a/release_docs/USING_CMake_Examples.txt b/release_docs/USING_CMake_Examples.txt
index 12c499e..d8940a5 100644
--- a/release_docs/USING_CMake_Examples.txt
+++ b/release_docs/USING_CMake_Examples.txt
@@ -21,7 +21,7 @@ I. Preconditions
 ========================================================================
 
    1. We suggest you obtain the latest CMake for windows from the Kitware
-      web site. The HDF5 1.8.x product requires a minimum CMake version
+      web site. The HDF5 1.10.x product requires a minimum CMake version
       of 3.1.0.
 
    2. You have installed the HDF5 library built with CMake, by executing
diff --git a/release_docs/USING_HDF5_CMake.txt b/release_docs/USING_HDF5_CMake.txt
index 2cdf798..64d1a2a 100644
--- a/release_docs/USING_HDF5_CMake.txt
+++ b/release_docs/USING_HDF5_CMake.txt
@@ -36,7 +36,7 @@ I. Preconditions
 ========================================================================
 
    1. We suggest you obtain the latest CMake for windows from the Kitware
-      web site. The HDF5 1.8.x product requires a minimum CMake version
+      web site. The HDF5 1.10.x product requires a minimum CMake version
       of 3.1.0.
 
    2. You have installed the HDF5 library built with CMake, by executing
@@ -47,7 +47,7 @@ I. Preconditions
 
    3. Set the environment variable HDF5_DIR to the installed location of
       the config files for HDF5. On Windows:
-            HDF5_DIR=C:/Program Files/HDF_Group/HDF5/1.8.x/cmake
+            HDF5_DIR=C:/Program Files/HDF_Group/HDF5/1.10.x/cmake
 
       (Note there are no quote characters used on Windows and all platforms
       use forward slashes)
@@ -103,8 +103,8 @@ These steps are described in more detail below.
             * Visual Studio 12 2013 Win64
             * Visual Studio 11 2012
             * Visual Studio 11 2012 Win64
-            * Visual Studio 10 2010
-            * Visual Studio 10 2010 Win64
+            * Visual Studio 14 2015
+            * Visual Studio 14 2015 Win64
 
         <options> is:
             * BUILD_TESTING:BOOL=ON
@@ -132,7 +132,7 @@ These steps are described in more detail below.
 
       2.2  Alternative command line example on Windows in c:\MyHDFstuff\hdf5\build directory:
 
-           cmake -G "Visual Studio 11" -DBUILD_TESTING:BOOL=ON ..
+           cmake -G "Visual Studio 12 2013" -DBUILD_TESTING:BOOL=ON ..
 
    3. Build HDF5 Applications
 
@@ -228,30 +228,18 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
 # This script will build and run the examples from a folder
 # Execute from a command line:
 #     ctest -S HDF5_Examples.cmake,OPTION=VALUE -C Release -V -O test.log
-# where valid options for OPTION are:
-#     BUILD_GENERATOR - The cmake build generator:
-#            Unix    * Unix Makefiles
-#            VS2015    * Visual Studio 14 2015
-#            VS201564 * Visual Studio 14 2015 Win64
-#            VS2013    * Visual Studio 12 2013
-#            VS201364 * Visual Studio 12 2013 Win64
-#            VS2012    * Visual Studio 11 2012
-#            VS201264 * Visual Studio 11 2012 Win64
-#
-#     INSTALLDIR  -  root folder where hdf5 is installed
-#     CTEST_BUILD_CONFIGURATION  - Release, Debug, etc
-#     CTEST_SOURCE_NAME  -  source folder
-#     STATIC_LIBRARIES  -  Build/use static libraries
-#     FORTRAN_LIBRARIES -  Build/use fortran libraries
-#     NO_MAC_FORTRAN  - Yes to be SHARED on a Mac
-##############################################################################
+###############################################################################################################
+
+set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
+set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
+
 # handle input parameters to script.
-#BUILD_GENERATOR - which CMake generator to use, required
 #INSTALLDIR - HDF5 root folder
 #CTEST_BUILD_CONFIGURATION - Release, Debug, RelWithDebInfo
 #CTEST_SOURCE_NAME - name of source folder; HDF4Examples
 #STATIC_LIBRARIES - Default is YES
 #FORTRAN_LIBRARIES - Default is NO
+#JAVA_LIBRARIES - Default is NO
 ##NO_MAC_FORTRAN - set to TRUE to allow shared libs on a Mac)
 if(DEFINED CTEST_SCRIPT_ARG)
     # transform ctest script arguments of the form
@@ -264,38 +252,8 @@ if(DEFINED CTEST_SCRIPT_ARG)
         endif()
     endforeach()
 endif()
-
-# build generator must be defined
-if(NOT DEFINED BUILD_GENERATOR)
-  message(FATAL_ERROR "BUILD_GENERATOR must be defined - Unix, VS2015, VS201564, VS2013, VS201364, VS2012, or VS201264")
-else()
-  if(${BUILD_GENERATOR} STREQUAL "Unix")
-    set(CMAKE_GENERATOR "Unix Makefiles")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS2015")
-    set(CTEST_CMAKE_GENERATOR "Visual Studio 14 2015")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS201564")
-    set(CTEST_CMAKE_GENERATOR "Visual Studio 14 2015 Win64")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS2013")
-    set(CMAKE_GENERATOR "Visual Studio 12 2013")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS201364")
-    set(CMAKE_GENERATOR "Visual Studio 12 2013 Win64")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS2012")
-    set(CMAKE_GENERATOR "Visual Studio 11 2012")
-  elseif(${BUILD_GENERATOR} STREQUAL "VS201264")
-    set(CMAKE_GENERATOR "Visual Studio 11 2012 Win64")
-  else()
-    message(FATAL_ERROR "Invalid BUILD_GENERATOR must be - Unix, VS2015, VS201564, VS2013, VS201364, VS2012, or VS201264")
-  endif()
-endif()
-set(CTEST_CMAKE_GENERATOR "${CMAKE_GENERATOR}")
-set(CTEST_DASHBOARD_ROOT ${CTEST_SCRIPT_DIRECTORY})
-
 if(NOT DEFINED INSTALLDIR)
-  if(WIN32)
-    set(INSTALLDIR "C:\\Program\ Files\\myhdf5")
-  else()
-    set(INSTALLDIR "/usr/local/myhdf5")
-  endif()
+    set(INSTALLDIR "@CMAKE_INSTALL_PREFIX@")
 endif()
 if(NOT DEFINED CTEST_BUILD_CONFIGURATION)
     set(CTEST_BUILD_CONFIGURATION "Release")
@@ -305,9 +263,18 @@ if(NOT DEFINED CTEST_SOURCE_NAME)
 endif()
 if(NOT DEFINED STATIC_LIBRARIES)
     set(STATICLIBRARIES "YES")
+else(NOT DEFINED STATIC_LIBRARIES)
+    set(STATICLIBRARIES "NO")
 endif()
 if(NOT DEFINED FORTRAN_LIBRARIES)
     set(FORTRANLIBRARIES "NO")
+else(NOT DEFINED FORTRAN_LIBRARIES)
+    set(FORTRANLIBRARIES "YES")
+endif()
+if(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "NO")
+else(NOT DEFINED JAVA_LIBRARIES)
+    set(JAVALIBRARIES "YES")
 endif()
 
 #TAR_SOURCE - name of tarfile
@@ -337,9 +304,14 @@ else(WIN32)
   set(CTEST_BINARY_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_BINARY_NAME}")
 endif(WIN32)
 if(${FORTRANLIBRARIES})
-  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=ON")
 else()
-  set(ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_FORTRAN:BOOL=OFF")
+endif()
+if(${JAVALIBRARIES})
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=ON")
+else()
+  set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF_BUILD_JAVA:BOOL=OFF")
 endif()
 set(BUILD_OPTIONS "${BUILD_OPTIONS} -DHDF5_PACKAGE_NAME:STRING=@HDF5_PACKAGE@@HDF_PACKAGE_EXT@")
 
@@ -421,8 +393,17 @@ ctest_read_custom_files ("${CTEST_BINARY_DIRECTORY}")
 ## --------------------------
 ctest_start (Experimental)
 ctest_configure (BUILD "${CTEST_BINARY_DIRECTORY}")
+if(LOCAL_SUBMIT)
+  ctest_submit (PARTS Configure Notes)
+endif()
 ctest_build (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND)
+if(LOCAL_SUBMIT)
+  ctest_submit (PARTS Build)
+endif()
 ctest_test (BUILD "${CTEST_BINARY_DIRECTORY}" APPEND ${ctest_test_args} RETURN_VALUE res)
+if(LOCAL_SUBMIT)
+  ctest_submit (PARTS Test)
+endif()
 if(res GREATER 0)
   message (FATAL_ERROR "tests FAILED")
 endif()
diff --git a/release_docs/USING_HDF5_VS.txt b/release_docs/USING_HDF5_VS.txt
index 146782a..3aaa56d 100644
--- a/release_docs/USING_HDF5_VS.txt
+++ b/release_docs/USING_HDF5_VS.txt
@@ -54,11 +54,11 @@ Using Visual Studio 2008 with HDF5 Libraries built with Visual Studio 2008
           and select "x64".
 
       2.2 Find the box "Show directories for", choose "Include files", add the
-          header path (i.e. c:\Program Files\HDF_Group\HDF5\1.8.x\include)
+          header path (i.e. c:\Program Files\HDF_Group\HDF5\1.10.x\include)
           to the included directories.
 
       2.3 Find the box "Show directories for", choose "Library files", add the
-          library path (i.e. c:\Program Files\HDF_Group\HDF5\1.8.x\lib)
+          library path (i.e. c:\Program Files\HDF_Group\HDF5\1.10.x\lib)
           to the library directories.
 
       2.4 If using Fortran libraries, you will also need to setup the path
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0fbd32b..03c2773 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -791,7 +791,7 @@ set (H5_GENERATED_HEADERS
     ${HDF5_SRC_DIR}/H5overflow.h
 )
 
-option (HDF5_GENERATE_HEADERS "Rebuild Generated Files" ON)
+option (HDF5_GENERATE_HEADERS "Rebuild Generated Files" OFF)
 mark_as_advanced (HDF5_GENERATE_HEADERS)
 if (HDF5_GENERATE_HEADERS)
   set_source_files_properties(${H5_GENERATED_HEADERS} PROPERTIES GENERATED TRUE)
@@ -868,11 +868,11 @@ set_target_properties (${HDF5_LIB_TARGET} PROPERTIES
     INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
 )
 
-option (HDF5_ENABLE_DEBUG_APIS "Turn on debugging in all packages" OFF)
+option (HDF5_ENABLE_DEBUG_APIS "Turn on extra debug output in all packages" OFF)
 if (HDF5_ENABLE_DEBUG_APIS)
   set_target_properties (${HDF5_LIB_TARGET} PROPERTIES
       COMPILE_DEFINITIONS
-          "H5Z_DEBUG;H5VM_DEBUG;H5T_DEBUG;H5S_DEBUG;H5P_DEBUG;H5O_DEBUG;H5MM_DEBUG;H5MF_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5HG_DEBUG;H5G_DEBUG;H5F_DEBUG;H5E_DEBUG;H5D_DEBUG;H5B_DEBUG;H5AC_DEBUG"
+          "H5Z_DEBUG;H5T_DEBUG;H5ST_DEBUG;H5S_DEBUG;H5O_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5F_DEBUG;H5D_DEBUG;H5B2_DEBUG;H5AC_DEBUG"
   )
 endif (HDF5_ENABLE_DEBUG_APIS)
 set (install_targets ${HDF5_LIB_TARGET})
@@ -906,7 +906,7 @@ if (BUILD_SHARED_LIBS)
     target_link_libraries (${HDF5_LIBSH_TARGET} ${MPI_C_LIBRARIES})
   endif (H5_HAVE_PARALLEL AND MPI_C_FOUND)
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (${HDF5_LIBSH_TARGET} ${HDF5_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_LIBSH_TARGET} ${HDF5_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_LIBSH_TARGET} PROPERTIES
       FOLDER libraries
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
@@ -924,7 +924,7 @@ if (BUILD_SHARED_LIBS)
   if (HDF5_ENABLE_DEBUG_APIS)
     set_property (TARGET ${HDF5_LIBSH_TARGET}
         APPEND PROPERTY COMPILE_DEFINITIONS
-            "H5Z_DEBUG;H5VM_DEBUG;H5T_DEBUG;H5S_DEBUG;H5P_DEBUG;H5O_DEBUG;H5MM_DEBUG;H5MF_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5HG_DEBUG;H5G_DEBUG;H5F_DEBUG;H5E_DEBUG;H5D_DEBUG;H5B_DEBUG;H5AC_DEBUG"
+            "H5Z_DEBUG;H5T_DEBUG;H5ST_DEBUG;H5S_DEBUG;H5O_DEBUG;H5I_DEBUG;H5HL_DEBUG;H5F_DEBUG;H5D_DEBUG;H5B2_DEBUG;H5AC_DEBUG"
     )
   endif (HDF5_ENABLE_DEBUG_APIS)
   set (install_targets ${install_targets} ${HDF5_LIBSH_TARGET})
diff --git a/src/H5.c b/src/H5.c
index f96d160..41fb3ba 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -193,7 +193,8 @@ H5_init_library(void)
 
         /* Normal library termination code */
         (void)HDatexit(H5_term_library);
-	H5_dont_atexit_g = TRUE;
+
+        H5_dont_atexit_g = TRUE;
     } /* end if */
 
     /*
@@ -552,30 +553,29 @@ done:
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5_debug_mask
+ * Function:    H5_debug_mask
  *
- * Purpose:	Set runtime debugging flags according to the string S.  The
- *		string should contain file numbers and package names
- *		separated by other characters. A file number applies to all
- *		following package names up to the next file number. The
- *		initial file number is `2' (the standard error stream). Each
- *		package name can be preceded by a `+' or `-' to add or remove
- *		the package from the debugging list (`+' is the default). The
- *		special name `all' means all packages.
+ * Purpose:     Set runtime debugging flags according to the string S.  The
+ *              string should contain file numbers and package names
+ *              separated by other characters. A file number applies to all
+ *              following package names up to the next file number. The
+ *              initial file number is `2' (the standard error stream). Each
+ *              package name can be preceded by a `+' or `-' to add or remove
+ *              the package from the debugging list (`+' is the default). The
+ *              special name `all' means all packages.
  *
- *		The name `trace' indicates that API tracing is to be turned
- *		on or off.
+ *              The name `trace' indicates that API tracing is to be turned
+ *              on or off.
  *
- * Return:	void
+ *              The name 'ttop' indicates that only top-level API calls
+ *              should be shown. This also turns on tracing as if the
+ *              'trace' word was shown.
  *
- * Programmer:	Robb Matzke
+ * Return:      void
+ *
+ * Programmer:  Robb Matzke
  *              Wednesday, August 19, 1998
  *
- * Modifications:
- *              Robb Matzke, 2002-08-08
- *              Accepts the `ttop' word. If enabled then show only the
- *              top level API calls, otherwise show all API calls.  Also
- *              turns on tracing as if the `trace' word was present.
  *-------------------------------------------------------------------------
  */
 static void
@@ -587,55 +587,57 @@ H5_debug_mask(const char *s)
     hbool_t	clear;
 
     while (s && *s) {
-	if (HDisalpha(*s) || '-'==*s || '+'==*s) {
-	    /* Enable or Disable debugging? */
-	    if ('-'==*s) {
-		clear = TRUE;
-		s++;
-	    } else if ('+'==*s) {
-		clear = FALSE;
-		s++;
-	    } else {
-		clear = FALSE;
-	    }
-
-	    /* Get the name */
-	    for (i=0; HDisalpha(*s); i++, s++)
-		if (i<sizeof pkg_name)
+
+        if (HDisalpha(*s) || '-'==*s || '+'==*s) {
+
+            /* Enable or Disable debugging? */
+            if ('-'==*s) {
+                clear = TRUE;
+                s++;
+            } else if ('+'==*s) {
+                clear = FALSE;
+                s++;
+            } else {
+                clear = FALSE;
+            } /* end if */
+
+            /* Get the name */
+            for (i=0; HDisalpha(*s); i++, s++)
+                if (i<sizeof pkg_name)
                     pkg_name[i] = *s;
-	    pkg_name[MIN(sizeof(pkg_name)-1, i)] = '\0';
+            pkg_name[MIN(sizeof(pkg_name)-1, i)] = '\0';
 
-	    /* Trace, all, or one? */
-	    if (!HDstrcmp(pkg_name, "trace")) {
-		H5_debug_g.trace = clear ? NULL : stream;
+            /* Trace, all, or one? */
+            if (!HDstrcmp(pkg_name, "trace")) {
+                H5_debug_g.trace = clear ? NULL : stream;
             } else if (!HDstrcmp(pkg_name, "ttop")) {
                 H5_debug_g.trace = stream;
                 H5_debug_g.ttop = (hbool_t)!clear;
             } else if (!HDstrcmp(pkg_name, "ttimes")) {
                 H5_debug_g.trace = stream;
                 H5_debug_g.ttimes = (hbool_t)!clear;
-	    } else if (!HDstrcmp(pkg_name, "all")) {
-		for (i=0; i<(size_t)H5_NPKGS; i++)
-		    H5_debug_g.pkg[i].stream = clear ? NULL : stream;
-	    } else {
-		for (i=0; i<(size_t)H5_NPKGS; i++) {
-		    if (!HDstrcmp(H5_debug_g.pkg[i].name, pkg_name)) {
-			H5_debug_g.pkg[i].stream = clear ? NULL : stream;
-			break;
-		    }
-		}
-		if (i>=(size_t)H5_NPKGS)
-		    fprintf(stderr, "HDF5_DEBUG: ignored %s\n", pkg_name);
-	    }
-
-	} else if (HDisdigit(*s)) {
-	    int fd = (int)HDstrtol(s, &rest, 0);
-	    H5_debug_open_stream_t *open_stream;
-
-	    if((stream = HDfdopen(fd, "w")) != NULL) {
-	        (void)HDsetvbuf(stream, NULL, _IOLBF, (size_t)0);
-
-	        if(NULL == (open_stream = (H5_debug_open_stream_t *)H5MM_malloc(sizeof(H5_debug_open_stream_t)))) {
+            } else if (!HDstrcmp(pkg_name, "all")) {
+                for (i=0; i<(size_t)H5_NPKGS; i++)
+                    H5_debug_g.pkg[i].stream = clear ? NULL : stream;
+            } else {
+                for (i=0; i<(size_t)H5_NPKGS; i++) {
+                    if (!HDstrcmp(H5_debug_g.pkg[i].name, pkg_name)) {
+                        H5_debug_g.pkg[i].stream = clear ? NULL : stream;
+                        break;
+		            } /* end if */
+                } /* end for */
+                if (i>=(size_t)H5_NPKGS)
+                    fprintf(stderr, "HDF5_DEBUG: ignored %s\n", pkg_name);
+            } /* end if-else */
+
+        } else if (HDisdigit(*s)) {
+            int fd = (int)HDstrtol(s, &rest, 0);
+            H5_debug_open_stream_t *open_stream;
+
+            if((stream = HDfdopen(fd, "w")) != NULL) {
+                (void)HDsetvbuf(stream, NULL, _IOLBF, (size_t)0);
+
+                if(NULL == (open_stream = (H5_debug_open_stream_t *)H5MM_malloc(sizeof(H5_debug_open_stream_t)))) {
                     (void)HDfclose(stream);
                     return;
                 } /* end if */
@@ -644,11 +646,15 @@ H5_debug_mask(const char *s)
                 open_stream->next = H5_debug_g.open_stream;
                 H5_debug_g.open_stream = open_stream;
             } /* end if */
-	    s = rest;
-	} else {
-	    s++;
-	}
-    }
+
+            s = rest;
+        } else {
+            s++;
+        } /* end if-else */
+    } /* end while */
+
+    return;
+
 } /* end H5_debug_mask() */
 
 #ifdef H5_HAVE_PARALLEL
@@ -947,7 +953,6 @@ H5allocate_memory(size_t size, hbool_t clear)
         ret_value = H5MM_malloc(size);
 
     FUNC_LEAVE_API(ret_value)
-
 } /* end H5allocate_memory() */
 
 

@@ -986,7 +991,6 @@ H5resize_memory(void *mem, size_t size)
     ret_value = H5MM_realloc(mem, size);
 
     FUNC_LEAVE_API(ret_value)
-
 } /* end H5resize_memory() */
 
 

@@ -1009,10 +1013,9 @@ H5free_memory(void *mem)
     H5TRACE1("e", "*x", mem);
 
     /* At this time, it is impossible for this to fail. */
-    HDfree(mem);
+    H5MM_xfree(mem);
 
     FUNC_LEAVE_API(SUCCEED)
-
 } /* end H5free_memory() */
 
 

diff --git a/src/H5A.c b/src/H5A.c
index 56f6307..e5a7ae5 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -252,7 +252,7 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
     H5G_loc_t           loc;                    /* Object location */
     H5T_t		*type;                  /* Datatype to use for attribute */
     H5S_t		*space;                 /* Dataspace to use for attribute */
-    hid_t               dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t               dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t		ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -273,9 +273,8 @@ H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Go do the real work for attaching the attribute to the object */
     if(NULL == (attr = H5A_create(&loc, attr_name, type, space, acpl_id, dxpl_id)))
@@ -337,7 +336,7 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
     hbool_t             loc_found = FALSE;      /* Entry at 'obj_name' found */
     H5T_t		*type;                  /* Datatype to use for attribute */
     H5S_t		*space;                 /* Dataspace to use for attribute */
-    hid_t               dxpl_id;                /* dxpl used by library */
+    hid_t               dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t		ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -365,23 +364,15 @@ H5Acreate_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
     obj_loc.path = &obj_path;
     H5G_loc_reset(&obj_loc);
 
-    dxpl_id = H5AC_ind_dxpl_id;
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Find the object's location */
     if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
     loc_found = TRUE;
 
-    dxpl_id = H5AC_dxpl_id;
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Go do the real work for attaching the attribute to the dataset */
     if(NULL == (attr = H5A_create(&obj_loc, attr_name, type, space, acpl_id, dxpl_id)))
 	HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
@@ -424,7 +415,7 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
 {
     H5G_loc_t    	loc;            /* Object location */
     H5A_t               *attr = NULL;   /* Attribute opened */
-    hid_t               dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t               dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t		ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -439,9 +430,8 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t aapl_id)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Read in attribute from object header */
     if(NULL == (attr = H5O_attr_open_by_name(loc.oloc, attr_name, dxpl_id)))
@@ -492,7 +482,7 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
 {
     H5G_loc_t    	loc;            /* Object location */
     H5A_t               *attr = NULL;   /* Attribute opened */
-    hid_t               dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t               dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t		ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -514,9 +504,8 @@ H5Aopen_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the attribute on the object header */
     if(NULL == (attr = H5A_open_by_name(&loc, obj_name, attr_name, lapl_id, dxpl_id)))
@@ -566,7 +555,7 @@ H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
 {
     H5A_t       *attr = NULL;   /* Attribute opened */
     H5G_loc_t	loc;	        /* Object location */
-    hid_t       dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t	ret_value;      /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -591,9 +580,8 @@ H5Aopen_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not link access property list ID")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&aapl_id, H5P_ATTRIBUTE_ACCESS, H5P_ATTRIBUTE_ACCESS_DEFAULT, 
-                               &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the attribute in the object header */
     if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
@@ -634,6 +622,8 @@ H5Awrite(hid_t attr_id, hid_t dtype_id, const void *buf)
 {
     H5A_t *attr;                /* Attribute object for ID */
     H5T_t *mem_type;            /* Memory datatype */
+    hid_t  dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
+    hid_t  aapl_id = H5P_DEFAULT;  /* temp access plist */
     herr_t ret_value;           /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -647,8 +637,12 @@ H5Awrite(hid_t attr_id, hid_t dtype_id, const void *buf)
     if(NULL == buf)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, attr_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Go write the actual data to the attribute */
-    if((ret_value = H5A__write(attr, mem_type, buf, H5AC_dxpl_id)) < 0)
+    if((ret_value = H5A__write(attr, mem_type, buf, dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute")
 
 done:
@@ -677,6 +671,8 @@ H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
 {
     H5A_t *attr;                /* Attribute object for ID */
     H5T_t *mem_type;            /* Memory datatype */
+    hid_t  dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
+    hid_t  aapl_id = H5P_DEFAULT;  /* temp access plist */
     herr_t ret_value;           /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -690,8 +686,12 @@ H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
     if(NULL == buf)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&aapl_id, H5P_CLS_AACC, &dxpl_id, attr_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Go write the actual data to the attribute */
-    if((ret_value = H5A__read(attr, mem_type, buf, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5A__read(attr, mem_type, buf, dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_READERROR, FAIL, "unable to read attribute")
 
 done:
@@ -904,7 +904,7 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
 {
     H5G_loc_t   loc;            /* Object location */
     H5A_t	*attr = NULL;   /* Attribute object for name */
-    hid_t       dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     ssize_t	ret_value;      /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -924,8 +924,8 @@ H5Aget_name_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the attribute on the object header */
     if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
@@ -1042,7 +1042,7 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
 {
     H5G_loc_t   loc;                    /* Object location */
     H5A_t	*attr = NULL;           /* Attribute object for name */
-    hid_t       dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1061,8 +1061,8 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid info pointer")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the attribute on the object header */
     if(NULL == (attr = H5A_open_by_name(&loc, obj_name, attr_name, lapl_id, dxpl_id)))
@@ -1101,7 +1101,7 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
 {
     H5G_loc_t   loc;                    /* Object location */
     H5A_t	*attr = NULL;           /* Attribute object for name */
-    hid_t       dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1123,8 +1123,8 @@ H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid info pointer")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the attribute on the object header */
     if(NULL == (attr = H5A_open_by_idx(&loc, obj_name, idx_type, order, n, lapl_id, dxpl_id)))
@@ -1172,13 +1172,13 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
 
     /* Avoid thrashing things if the names are the same */
     if(HDstrcmp(old_name, new_name)) {
-        H5G_loc_t	loc;	                /* Object location */
+        H5G_loc_t loc;                /* Object location */
   
         if(H5G_loc(loc_id, & loc) < 0)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
         /* Call private attribute rename routine */
-        if(H5O_attr_rename(loc.oloc, H5AC_dxpl_id, old_name, new_name) < 0)
+        if(H5O_attr_rename(loc.oloc, H5AC_ind_read_dxpl_id, old_name, new_name) < 0)
             HGOTO_ERROR(H5E_ATTR, H5E_CANTRENAME, FAIL, "can't rename attribute")
     } /* end if */
 
@@ -1204,7 +1204,6 @@ herr_t
 H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
     const char *new_attr_name, hid_t lapl_id)
 {
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by the library */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1221,13 +1220,14 @@ H5Arename_by_name(hid_t loc_id, const char *obj_name, const char *old_attr_name,
     if(!new_attr_name || !*new_attr_name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no new attribute name")
 
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Avoid thrashing things if the names are the same */
     if(HDstrcmp(old_attr_name, new_attr_name)) {
         H5G_loc_t loc;                /* Object location */
+        hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by the library */
+
+        /* Verify access property list and get correct dxpl */
+        if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
         if(H5G_loc(loc_id, & loc) < 0)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
@@ -1309,7 +1309,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
 
     /* Call attribute iteration routine */
     last_attr = start_idx = (idx ? *idx : 0);
-    if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_dxpl_id, idx_type, order, start_idx, &last_attr, &attr_op, op_data)) < 0)
+    if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_read_dxpl_id, idx_type, order, start_idx, &last_attr, &attr_op, op_data)) < 0)
         HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
 
     /* Set the last attribute information */
@@ -1378,7 +1378,7 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
     H5A_attr_iter_op_t attr_op; /* Attribute operator */
     hsize_t	start_idx;      /* Index of attribute to start iterating at */
     hsize_t	last_attr;      /* Index of last attribute examined */
-    hid_t       dxpl_id  = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id  = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t	ret_value;      /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1398,8 +1398,8 @@ H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     obj_loc.oloc = &obj_oloc;
@@ -1473,7 +1473,7 @@ H5Adelete(hid_t loc_id, const char *name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Delete the attribute from the location */
-    if(H5O_attr_remove(loc.oloc, name, H5AC_dxpl_id) < 0)
+    if(H5O_attr_remove(loc.oloc, name, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
 
 done:
@@ -1506,7 +1506,7 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
     H5G_name_t  obj_path;            	/* Opened object group hier. path */
     H5O_loc_t   obj_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Entry at 'obj_name' found */
-    hid_t       dxpl_id;                /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1522,10 +1522,9 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
     if(!attr_name || !*attr_name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
 
-    dxpl_id = H5AC_ind_dxpl_id;
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     obj_loc.oloc = &obj_oloc;
@@ -1537,11 +1536,6 @@ H5Adelete_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
         HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
     loc_found = TRUE;
 
-    dxpl_id = H5AC_dxpl_id;
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Delete the attribute from the location */
     if(H5O_attr_remove(obj_loc.oloc, attr_name, dxpl_id) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
@@ -1588,7 +1582,7 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
     H5G_name_t  obj_path;            	/* Opened object group hier. path */
     H5O_loc_t   obj_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Entry at 'obj_name' found */
-    hid_t       dxpl_id;                /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1606,10 +1600,9 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
     if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
-    dxpl_id = H5AC_ind_dxpl_id;
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     obj_loc.oloc = &obj_oloc;
@@ -1621,11 +1614,6 @@ H5Adelete_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
     loc_found = TRUE;
 
-    dxpl_id = H5AC_dxpl_id;
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Delete the attribute from the location */
     if(H5O_attr_remove_by_idx(obj_loc.oloc, idx_type, order, n, dxpl_id) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute")
@@ -1707,7 +1695,7 @@ H5Aexists(hid_t obj_id, const char *attr_name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
 
     /* Check if the attribute exists */
-    if((ret_value = H5O_attr_exists(loc.oloc, attr_name, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5O_attr_exists(loc.oloc, attr_name, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
 
 done:
@@ -1733,7 +1721,7 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
     hid_t lapl_id)
 {
     H5G_loc_t   loc;                    /* Object location */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id;     /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;     /* dxpl used by library */
     htri_t	ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1750,8 +1738,8 @@ H5Aexists_by_name(hid_t loc_id, const char *obj_name, const char *attr_name,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no attribute name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     if((ret_value = H5A_exists_by_name(loc, obj_name, attr_name, lapl_id, dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "unable to determine if attribute exists")
diff --git a/src/H5AC.c b/src/H5AC.c
index c10ae39..456be4a 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -80,23 +80,28 @@ static herr_t H5AC__verify_tag(hid_t dxpl_id, const H5AC_class_t * type);
 /* Package initialization variable */
 hbool_t H5_PKG_INIT_VAR = FALSE;
 
-
 /*****************************/
 /* Library Private Variables */
 /*****************************/
 
-/* Default dataset transfer property list for metadata I/O calls */
-/* (Collective set) */
-/* (Global variable definition, declaration is in H5ACprivate.h also) */
-hid_t H5AC_dxpl_id = (-1);
+/* Default dataset transfer property list for metadata I/O calls (coll write, ind read) */
+hid_t H5AC_ind_read_dxpl_id = (-1);
+#ifdef H5_HAVE_PARALLEL
+/* collective metadata read property */
+hid_t H5AC_coll_read_dxpl_id = (-1);
+#endif /* H5_HAVE_PARALLEL */
+
+/* DXPL to be used in operations that will not result in I/O calls */
+hid_t H5AC_noio_dxpl_id = (-1);
 
-/* Dataset transfer property list for independent metadata I/O calls */
-/* (Global variable definition, declaration is in H5ACprivate.h also) */
-H5P_genplist_t *H5AC_ind_dxpl_g = NULL;
-hid_t H5AC_ind_dxpl_id = (-1);
+/* Default DXPL to be used for raw data I/O operations when one is not
+   provided by the user (fill values in H5Dcreate) */
+hid_t H5AC_rawdata_dxpl_id = (-1);
 
-hid_t H5AC_coll_write_coll_read_dxpl_id=(-1);
-hid_t H5AC_ind_write_coll_read_dxpl_id=(-1);
+#ifdef H5_HAVE_PARALLEL
+/* Environment variable for collective API sanity checks */
+hbool_t H5_coll_api_sanity_check_g = false;
+#endif /* H5_HAVE_PARALLEL */
 
 /*******************/
 /* Local Variables */
@@ -178,99 +183,101 @@ done:
 herr_t
 H5AC__init_package(void)
 {
-#ifdef H5_HAVE_PARALLEL
     H5P_genplist_t  *xfer_plist;    /* Dataset transfer property list object */
-    unsigned coll_meta_write;       /* "collective metadata write" property value */
+#ifdef H5_HAVE_PARALLEL
     H5P_coll_md_read_flag_t coll_meta_read;
 #endif /* H5_HAVE_PARALLEL */
+#ifdef H5_DEBUG_BUILD
+    H5FD_dxpl_type_t  dxpl_type;    /* Property indicating the type of the internal dxpl */
+#endif /* H5_DEBUG_BUILD */
     herr_t ret_value = SUCCEED;     /* Return value */
 
     FUNC_ENTER_PACKAGE
 
 #ifdef H5_HAVE_PARALLEL
-    /* Sanity check */
-    HDassert(H5P_CLS_DATASET_XFER_g != NULL);
+    /* check whether to enable strict collective function calling
+       sanity checks using MPI barriers */
+    {
+        const char *s;  /* String for environment variables */
+
+        s = HDgetenv("H5_COLL_API_SANITY_CHECK");
+        if(s && HDisdigit(*s)) {
+            H5_coll_api_sanity_check_g = (hbool_t)HDstrtol(s, NULL, 0);
+        }
+    }
+#endif /* H5_HAVE_PARALLEL */
 
-    /* Get an ID for the collective H5AC dxpl */
-    if((H5AC_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
+#if defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD)
+    /* Get an ID for the internal independent metadata dxpl */
+    if((H5AC_ind_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
         HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
 
-    /* Get the property list object */
-    if(NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_dxpl_id)))
-        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
-    /* Insert 'collective metadata write' property */
-    coll_meta_write = 1;
-    if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
-            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+    /* Get an ID for the no I/O internal dxpl */
+    if((H5AC_noio_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
 
-    /* Get an ID for the independent H5AC dxpl */
-    if((H5AC_ind_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
+    /* Get an ID for the raw data (H5AC) dxpl */
+    if((H5AC_rawdata_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
         HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
 
+    /* if this is a debug build, set the dxpl type flag on the
+       independent metadata dxpl and create the noio and raw data internal dxpls */
+#ifdef H5_DEBUG_BUILD
     /* Get the property list object */
-    if(NULL == (H5AC_ind_dxpl_g = (H5P_genplist_t *)H5I_object(H5AC_ind_dxpl_id)))
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_ind_read_dxpl_id)))
         HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
-    /* Insert 'collective metadata write' property */
-    coll_meta_write = 0;
-    if(H5P_insert(H5AC_ind_dxpl_g, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
-            NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
-    /* Get an ID for H5AC_coll_write_coll_read_dxpl_id */
-    if((H5AC_coll_write_coll_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
-        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
+    /* Insert the dxpl type property  */
+    dxpl_type = H5FD_METADATA_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
 
     /* Get the property list object */
-    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_coll_write_coll_read_dxpl_id)))
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_noio_dxpl_id)))
         HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+    /* Insert the dxpl type property  */
+    dxpl_type = H5FD_NOIO_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
 
-    /* Insert 'collective metadata write' property */
-    coll_meta_write = 1;
-    if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
-                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
-    /* set 'collective metadata read' property */
-    coll_meta_read = H5P_USER_TRUE;
-    if(H5P_set(xfer_plist, H5_COLL_MD_READ_FLAG_NAME, &coll_meta_read) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set collective metadata read flag")
-
-
-    /* Get an ID for H5AC_ind_write_coll_read_dxpl_id */
-    if((H5AC_ind_write_coll_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
+    /* Get the property list object */
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_rawdata_dxpl_id)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+    /* Insert the dxpl type property  */
+    dxpl_type = H5FD_RAWDATA_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
+#endif /* H5_DEBUG_BUILD */
+
+    /* if this is a parallel build, create an internal dxpl for
+       collective metadata reads */
+#ifdef H5_HAVE_PARALLEL
+    /* Get an ID for H5AC_coll_read_dxpl_id */
+    if((H5AC_coll_read_dxpl_id = H5P_create_id(H5P_CLS_DATASET_XFER_g, FALSE)) < 0)
         HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
-
     /* Get the property list object */
-    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_ind_write_coll_read_dxpl_id)))
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(H5AC_coll_read_dxpl_id)))
         HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
-    /* Insert 'collective metadata write' property */
-    coll_meta_write = 0;
-    if(H5P_insert(xfer_plist, H5AC_COLLECTIVE_META_WRITE_NAME, H5AC_COLLECTIVE_META_WRITE_SIZE, &coll_meta_write,
-                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
     /* set 'collective metadata read' property */
     coll_meta_read = H5P_USER_TRUE;
     if(H5P_set(xfer_plist, H5_COLL_MD_READ_FLAG_NAME, &coll_meta_read) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set collective metadata read flag")
 
-#else /* H5_HAVE_PARALLEL */
-    /* Sanity check */
-    HDassert(H5P_LST_DATASET_XFER_ID_g!=(-1));
-
-    H5AC_dxpl_id = H5P_DATASET_XFER_DEFAULT;
-    H5AC_ind_dxpl_id = H5P_DATASET_XFER_DEFAULT;
-    H5AC_coll_write_coll_read_dxpl_id = H5P_DATASET_XFER_DEFAULT;
-    H5AC_ind_write_coll_read_dxpl_id = H5P_DATASET_XFER_DEFAULT;
-
-    /* Get the property list objects for the IDs */
-    if(NULL == (H5AC_ind_dxpl_g = (H5P_genplist_t *)H5I_object(H5AC_ind_dxpl_id)))
-        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list object")
+    /* if we have a debug build, set the dxpl type to metadata on the
+       collective metadata dxpl */
+#ifdef H5_DEBUG_BUILD
+    /* set metadata dxpl type */
+    dxpl_type = H5FD_METADATA_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTSET, FAIL, "can't set dxpl type property")
+#endif /* H5_DEBUG_BUILD */
 #endif /* H5_HAVE_PARALLEL */
 
+#else /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
+    H5AC_ind_read_dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    H5AC_noio_dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    H5AC_rawdata_dxpl_id = H5P_DATASET_XFER_DEFAULT;
+#endif /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
+
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5AC__init_package() */
@@ -298,28 +305,34 @@ H5AC_term_package(void)
     FUNC_ENTER_NOAPI_NOINIT_NOERR
 
     if(H5_PKG_INIT_VAR) {
+        if(H5AC_ind_read_dxpl_id > 0 || H5AC_noio_dxpl_id > 0 || H5AC_rawdata_dxpl_id > 0
 #ifdef H5_HAVE_PARALLEL
-        if(H5AC_dxpl_id > 0 || H5AC_ind_dxpl_id > 0 || 
-           H5AC_coll_write_coll_read_dxpl_id > 0 ||
-           H5AC_ind_write_coll_read_dxpl_id > 0) {
+           || H5AC_coll_read_dxpl_id > 0
+#endif /* H5_HAVE_PARALLEL */
+           ) {
+#if defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD)
             /* Indicate more work to do */
             n = 1; /* H5I */
 
-            /* Close H5AC dxpl */
-            if(H5I_dec_ref(H5AC_dxpl_id) < 0 || H5I_dec_ref(H5AC_ind_dxpl_id) < 0 ||
-               H5I_dec_ref(H5AC_coll_write_coll_read_dxpl_id) < 0 ||
-               H5I_dec_ref(H5AC_ind_write_coll_read_dxpl_id) < 0)
-                H5E_clear_stack(NULL); /*ignore error*/
-        } /* end if */
+            /* Close H5AC dxpls */
+            if(H5I_dec_ref(H5AC_ind_read_dxpl_id) < 0 ||
+               H5I_dec_ref(H5AC_noio_dxpl_id) < 0 ||
+               H5I_dec_ref(H5AC_rawdata_dxpl_id) < 0
+#ifdef H5_HAVE_PARALLEL
+               || H5I_dec_ref(H5AC_coll_read_dxpl_id) < 0
 #endif /* H5_HAVE_PARALLEL */
+               )
+                H5E_clear_stack(NULL); /*ignore error*/
+#endif /* defined(H5_HAVE_PARALLEL) || defined(H5_DEBUG_BUILD) */
 
-        /* Reset static IDs */
-        H5AC_dxpl_id = (-1);
-        H5AC_ind_dxpl_id = (-1);
+            /* Reset static IDs */
+            H5AC_ind_read_dxpl_id = (-1);
+            H5AC_noio_dxpl_id = (-1);
+            H5AC_rawdata_dxpl_id = (-1);
 #ifdef H5_HAVE_PARALLEL
-        H5AC_coll_write_coll_read_dxpl_id = (-1);
-        H5AC_ind_write_coll_read_dxpl_id = (-1);
+            H5AC_coll_read_dxpl_id = (-1);
 #endif /* H5_HAVE_PARALLEL */
+        } /* end if */
 
         /* Reset interface initialization flag */
         if(0 == n)
@@ -931,7 +944,7 @@ H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t add
 
         /* Check if we should try to flush */
         if(aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold)
-            if(H5AC__run_sync_point(f, H5AC_dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
+            if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
                 HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point.")
     } /* end if */
 }
@@ -1044,7 +1057,8 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5AC_move_entry(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr, haddr_t new_addr)
+H5AC_move_entry(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr, 
+                haddr_t new_addr, hid_t dxpl_id)
 {
 #if H5AC__TRACE_FILE_ENABLED
     char          	trace[128] = "";
@@ -1094,7 +1108,7 @@ H5AC_move_entry(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr, haddr_t ne
 #ifdef H5_HAVE_PARALLEL
     /* Check if we should try to flush */
     if(NULL != aux_ptr && aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold)
-        if(H5AC__run_sync_point(f, H5AC_dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
+        if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
             HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point.")
 #endif /* H5_HAVE_PARALLEL */
 
@@ -1699,7 +1713,7 @@ H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
 #ifdef H5_HAVE_PARALLEL
     /* Check if we should try to flush */
     if((aux_ptr != NULL) && (aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold))
-        if(H5AC__run_sync_point(f, H5AC_dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
+        if(H5AC__run_sync_point(f, dxpl_id, H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) < 0)
             HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't run sync point.")
 #endif /* H5_HAVE_PARALLEL */
 
diff --git a/src/H5ACmpio.c b/src/H5ACmpio.c
index 8655a6f..e33fc8e 100644
--- a/src/H5ACmpio.c
+++ b/src/H5ACmpio.c
@@ -159,7 +159,7 @@ H5AC__set_sync_point_done_callback(H5C_t * cache_ptr,
 
     /* Sanity checks */
     HDassert(cache_ptr);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
 
@@ -192,7 +192,7 @@ H5AC__set_write_done_callback(H5C_t * cache_ptr, void (* write_done)(void))
 
     /* Sanity checks */
     HDassert(cache_ptr);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
 
@@ -231,7 +231,7 @@ H5AC_add_candidate(H5AC_t * cache_ptr, haddr_t addr)
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
@@ -295,7 +295,7 @@ H5AC__broadcast_candidate_list(H5AC_t *cache_ptr, int *num_entries_ptr,
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank == 0);
@@ -427,7 +427,7 @@ H5AC__broadcast_clean_list(H5AC_t * cache_ptr)
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank == 0);
@@ -624,7 +624,7 @@ H5AC__copy_candidate_list_to_buffer(const H5AC_t *cache_ptr, int *num_entries_pt
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
@@ -700,7 +700,7 @@ H5AC__log_deleted_entry(const H5AC_info_t *entry_ptr)
     addr = entry_ptr->addr;
     cache_ptr = entry_ptr->cache_ptr;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank == 0);
@@ -756,7 +756,7 @@ H5AC__log_dirtied_entry(const H5AC_info_t *entry_ptr)
     HDassert(entry_ptr->is_dirty == FALSE);
     cache_ptr = entry_ptr->cache_ptr;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
 
@@ -839,7 +839,7 @@ H5AC__log_flushed_entry(H5C_t *cache_ptr, haddr_t addr, hbool_t was_dirty,
 
     /* Sanity check */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank == 0);
@@ -907,7 +907,7 @@ H5AC__log_inserted_entry(const H5AC_info_t *entry_ptr)
     HDassert(entry_ptr);
     cache_ptr = entry_ptr->cache_ptr;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
 
@@ -1010,7 +1010,7 @@ H5AC__log_moved_entry(const H5F_t *f, haddr_t old_addr, haddr_t new_addr)
     HDassert(f->shared);
     cache_ptr = (H5AC_t *)f->shared->cache;
     HDassert(cache_ptr);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
 
@@ -1188,7 +1188,7 @@ H5AC__propagate_and_apply_candidate_list(H5F_t  *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
@@ -1352,7 +1352,7 @@ H5AC__propagate_flushed_and_still_clean_entries_list(H5F_t  *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
@@ -1477,7 +1477,7 @@ H5AC__receive_and_apply_clean_list(H5F_t *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank != 0);
@@ -1537,7 +1537,7 @@ H5AC__receive_candidate_list(const H5AC_t *cache_ptr, int *num_entries_ptr,
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->mpi_rank != 0);
@@ -1621,7 +1621,7 @@ H5AC__rsp__dist_md_write__flush(H5F_t *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
@@ -1761,7 +1761,7 @@ H5AC__rsp__dist_md_write__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
@@ -1836,7 +1836,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
@@ -1874,7 +1874,7 @@ H5AC__rsp__p0_only__flush(H5F_t *f, hid_t dxpl_id)
     } /* end if */
 
     /* Propagate cleaned entries to other ranks. */
-    if(H5AC__propagate_flushed_and_still_clean_entries_list(f, H5AC_dxpl_id) < 0)
+    if(H5AC__propagate_flushed_and_still_clean_entries_list(f, dxpl_id) < 0)
         HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't propagate clean entries list.")
 
 done:
@@ -1938,7 +1938,7 @@ H5AC__rsp__p0_only__flush_to_min_clean(H5F_t *f, hid_t dxpl_id)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY);
@@ -2047,7 +2047,7 @@ H5AC__run_sync_point(H5F_t *f, hid_t dxpl_id, int sync_point_op)
     HDassert(f != NULL);
     cache_ptr = f->shared->cache;
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert((sync_point_op == H5AC_SYNC_POINT_OP__FLUSH_TO_MIN_CLEAN) ||
@@ -2065,6 +2065,14 @@ HDfprintf(stdout, "%d:H5AC_propagate...:%u: (u/uu/i/iu/r/ru) = %zu/%u/%zu/%u/%zu
     aux_ptr->rename_dirty_bytes_updates);
 #endif /* H5AC_DEBUG_DIRTY_BYTES_CREATION */
 
+    /* clear collective access flag on half of the entries in the
+       cache and mark them as independent in case they need to be
+       evicted later. All ranks are guranteed to mark the same entries
+       since we don't modify the order of the collectively accessed
+       entries except through collective access. */
+    if(H5C_clear_coll_entries(cache_ptr, TRUE) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5C_clear_coll_entries() failed.")
+
     switch(aux_ptr->metadata_write_strategy) {
         case H5AC_METADATA_WRITE_STRATEGY__PROCESS_0_ONLY:
 	    switch(sync_point_op) {
@@ -2171,7 +2179,7 @@ H5AC__tidy_cache_0_lists(H5AC_t *cache_ptr, int num_candidates,
 
     /* Sanity checks */
     HDassert(cache_ptr != NULL);
-    aux_ptr = H5C_get_aux_ptr(cache_ptr);
+    aux_ptr = (H5AC_aux_t *)H5C_get_aux_ptr(cache_ptr);
     HDassert(aux_ptr != NULL);
     HDassert(aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC);
     HDassert(aux_ptr->metadata_write_strategy == H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED);
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 822dc8a..15c9756 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -195,31 +195,20 @@ typedef H5C_cache_entry_t		H5AC_info_t;
 /* Typedef for metadata cache (defined in H5Cpkg.h) */
 typedef H5C_t	H5AC_t;
 
-/* Metadata specific properties for FAPL */
-/* (Only used for parallel I/O) */
-#ifdef H5_HAVE_PARALLEL
-/* Definitions for "collective metadata write" property */
-#define H5AC_COLLECTIVE_META_WRITE_NAME         "H5AC_collective_metadata_write"
-#define H5AC_COLLECTIVE_META_WRITE_SIZE         sizeof(unsigned)
-#define H5AC_COLLECTIVE_META_WRITE_DEF          0
-#endif /* H5_HAVE_PARALLEL */
-
 #define H5AC_RING_NAME  "H5AC_ring_type"
 
-/* Dataset transfer property list for flush calls */
-/* (Collective set, "block before metadata write" set and "library internal" set) */
-/* (Global variable declaration, definition is in H5AC.c) */
-extern hid_t H5AC_dxpl_id;
-
-/* Dataset transfer property list for independent metadata I/O calls */
-/* (just "library internal" set - i.e. independent transfer mode) */
-/* (Global variable declaration, definition is in H5AC.c) */
-H5_DLLVAR H5P_genplist_t *H5AC_ind_dxpl_g;
-H5_DLLVAR hid_t H5AC_ind_dxpl_id;
+/* Dataset transfer property lists for metadata calls */
+H5_DLLVAR hid_t H5AC_ind_read_dxpl_id;
+#ifdef H5_HAVE_PARALLEL
+H5_DLLVAR hid_t H5AC_coll_read_dxpl_id;
+#endif /* H5_HAVE_PARALLEL */
 
-H5_DLLVAR hid_t H5AC_coll_write_coll_read_dxpl_id;
-H5_DLLVAR hid_t H5AC_ind_write_coll_read_dxpl_id;
+/* DXPL to be used in operations that will not result in I/O calls */
+H5_DLLVAR hid_t H5AC_noio_dxpl_id;
 
+/* DXPL to be used for raw data I/O operations when one is not
+   provided by the user (fill values in H5Dcreate) */
+H5_DLLVAR hid_t H5AC_rawdata_dxpl_id;
 
 /* Default cache configuration. */
 
@@ -361,7 +350,7 @@ H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
 H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id);
 H5_DLL herr_t H5AC_mark_entry_dirty(void *thing);
 H5_DLL herr_t H5AC_move_entry(H5F_t *f, const H5AC_class_t *type,
-    haddr_t old_addr, haddr_t new_addr);
+    haddr_t old_addr, haddr_t new_addr, hid_t dxpl_id);
 H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
 H5_DLL herr_t H5AC_evict(H5F_t *f, hid_t dxpl_id);
 H5_DLL herr_t H5AC_expunge_entry(H5F_t *f, hid_t dxpl_id,
diff --git a/src/H5Abtree2.c b/src/H5Abtree2.c
index 972fb0b..a9c77d2 100644
--- a/src/H5Abtree2.c
+++ b/src/H5Abtree2.c
@@ -80,7 +80,7 @@ typedef struct H5A_fh_ud_cmp_t {
 
 /* v2 B-tree driver callbacks for 'creation order' index */
 static herr_t H5A__dense_btree2_corder_store(void *native, const void *udata);
-static herr_t H5A__dense_btree2_corder_compare(const void *rec1, const void *rec2);
+static herr_t H5A__dense_btree2_corder_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5A__dense_btree2_corder_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5A__dense_btree2_corder_decode(const uint8_t *raw, void *native,
@@ -90,7 +90,7 @@ static herr_t H5A__dense_btree2_corder_debug(FILE *stream, int indent, int fwidt
 
 /* v2 B-tree driver callbacks for 'name' index */
 static herr_t H5A__dense_btree2_name_store(void *native, const void *udata);
-static herr_t H5A__dense_btree2_name_compare(const void *rec1, const void *rec2);
+static herr_t H5A__dense_btree2_name_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5A__dense_btree2_name_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5A__dense_btree2_name_decode(const uint8_t *raw, void *native,
@@ -116,9 +116,7 @@ const H5B2_class_t H5A_BT2_NAME[1]={{  /* B-tree class information */
     H5A__dense_btree2_name_compare,     /* Record comparison callback */
     H5A__dense_btree2_name_encode,      /* Record encoding callback */
     H5A__dense_btree2_name_decode,      /* Record decoding callback */
-    H5A__dense_btree2_name_debug,       /* Record debugging callback */
-    NULL,                              /* Create debugging context */
-    NULL                               /* Destroy debugging context */
+    H5A__dense_btree2_name_debug        /* Record debugging callback */
 }};
 
 /* v2 B-tree class for indexing 'creation order' field of attributes */
@@ -132,9 +130,7 @@ const H5B2_class_t H5A_BT2_CORDER[1]={{ /* B-tree class information */
     H5A__dense_btree2_corder_compare,   /* Record comparison callback */
     H5A__dense_btree2_corder_encode,    /* Record encoding callback */
     H5A__dense_btree2_corder_decode,    /* Record decoding callback */
-    H5A__dense_btree2_corder_debug,     /* Record debugging callback */
-    NULL,                              /* Create debugging context */
-    NULL                               /* Destroy debugging context */
+    H5A__dense_btree2_corder_debug      /* Record debugging callback */
 }};
 
 
@@ -249,13 +245,13 @@ H5A__dense_btree2_name_store(void *_nrecord, const void *_udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec, int *result)
 {
     const H5A_bt2_ud_common_t *bt2_udata = (const H5A_bt2_ud_common_t *)_bt2_udata;
     const H5A_dense_bt2_name_rec_t *bt2_rec = (const H5A_dense_bt2_name_rec_t *)_bt2_rec;
-    herr_t ret_value = FAIL;            /* Return value */
+    herr_t ret_value = SUCCEED;            /* Return value */
 
-    FUNC_ENTER_STATIC_NOERR
+    FUNC_ENTER_STATIC
 
     /* Sanity check */
     HDassert(bt2_udata);
@@ -263,13 +259,12 @@ H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
 
     /* Check hash value */
     if(bt2_udata->name_hash < bt2_rec->hash)
-        ret_value = (-1);
+        *result = (-1);
     else if(bt2_udata->name_hash > bt2_rec->hash)
-        ret_value = 1;
+        *result = 1;
     else {
         H5A_fh_ud_cmp_t fh_udata;       /* User data for fractal heap 'op' callback */
         H5HF_t *fheap;                  /* Fractal heap handle to use for finding object */
-        herr_t status;                  /* Status from fractal heap 'op' routine */
 
         /* Sanity check */
         HDassert(bt2_udata->name_hash == bt2_rec->hash);
@@ -294,13 +289,14 @@ H5A__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
         HDassert(fheap);
 
         /* Check if the user's attribute and the B-tree's attribute have the same name */
-        status = H5HF_op(fheap, bt2_udata->dxpl_id, &bt2_rec->id, H5A__dense_fh_name_cmp, &fh_udata);
-        HDassert(status >= 0);
+        if(H5HF_op(fheap, bt2_udata->dxpl_id, &bt2_rec->id, H5A__dense_fh_name_cmp, &fh_udata) < 0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
 
         /* Callback will set comparison value */
-        ret_value = fh_udata.cmp;
+        *result = fh_udata.cmp;
     } /* end else */
 
+done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5A__dense_btree2_name_compare() */
 
@@ -441,11 +437,10 @@ H5A__dense_btree2_corder_store(void *_nrecord, const void *_udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5A__dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5A__dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec, int *result)
 {
     const H5A_bt2_ud_common_t *bt2_udata = (const H5A_bt2_ud_common_t *)_bt2_udata;
     const H5A_dense_bt2_corder_rec_t *bt2_rec = (const H5A_dense_bt2_corder_rec_t *)_bt2_rec;
-    herr_t ret_value = FAIL;    /* Return value */
 
     FUNC_ENTER_STATIC_NOERR
 
@@ -455,13 +450,13 @@ H5A__dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
 
     /* Check creation order value */
     if(bt2_udata->corder < bt2_rec->corder)
-        ret_value = -1;
+        *result = -1;
     else if(bt2_udata->corder > bt2_rec->corder)
-        ret_value = 1;
+        *result = 1;
     else
-        ret_value = 0;
+        *result = 0;
 
-    FUNC_LEAVE_NOAPI(ret_value)
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5A__dense_btree2_corder_compare() */
 
 

diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c
index ae0f041..a4713a7 100644
--- a/src/H5Adeprec.c
+++ b/src/H5Adeprec.c
@@ -138,7 +138,7 @@ H5Acreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
 
     /* Go do the real work for attaching the attribute to the dataset */
-    if(NULL==(attr = H5A_create(&loc, name, type, space, plist_id, H5AC_dxpl_id)))
+    if(NULL==(attr = H5A_create(&loc, name, type, space, plist_id, H5AC_ind_read_dxpl_id)))
 	HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
 
     /* Register the new attribute and get an ID for it */
@@ -191,7 +191,7 @@ H5Aopen_name(hid_t loc_id, const char *name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no 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)))
+    if(NULL == (attr = H5A_open_by_name(&loc, ".", name, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
         HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute: '%s'", name)
 
     /* Register the attribute and get an ID for it */
@@ -247,7 +247,7 @@ H5Aopen_idx(hid_t loc_id, unsigned idx)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
     /* Open the attribute in the object header */
-    if(NULL == (attr = H5A_open_by_idx(&loc, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)idx, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id)))
+    if(NULL == (attr = H5A_open_by_idx(&loc, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)idx, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
         HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open attribute")
 
     /* Register the attribute and get an ID for it */
@@ -333,7 +333,7 @@ H5Aget_num_attrs(hid_t loc_id)
     } /*lint !e788 All appropriate cases are covered */
 
     /* Look up the # of attributes for the object */
-    if((ret_value = H5O_attr_count(loc, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5O_attr_count(loc, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTCOUNT, FAIL, "can't get attribute count for object")
 
 done:
@@ -399,7 +399,7 @@ H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op, void *op_data)
 
     /* Call attribute iteration routine */
     last_attr = start_idx = (hsize_t)(attr_num ? *attr_num : 0);
-    if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_dxpl_id, H5_INDEX_CRT_ORDER, H5_ITER_INC, start_idx, &last_attr, &attr_op, op_data)) < 0)
+    if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_read_dxpl_id, H5_INDEX_CRT_ORDER, H5_ITER_INC, start_idx, &last_attr, &attr_op, op_data)) < 0)
         HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
 
     /* Set the last attribute information */
diff --git a/src/H5Aint.c b/src/H5Aint.c
index 80761b6..0ad5929 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -161,7 +161,7 @@ H5A_create(const H5G_loc_t *loc, const char *name, const H5T_t *type,
      *  name, but it's going to be hard to unwind all the special cases on
      *  failure, so just check first, for now - QAK)
      */
-    if((exists = H5O_attr_exists(loc->oloc, name, H5AC_ind_dxpl_id)) < 0)
+    if((exists = H5O_attr_exists(loc->oloc, name, dxpl_id)) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "error checking attributes")
     else if(exists > 0)
         HGOTO_ERROR(H5E_ATTR, H5E_ALREADYEXISTS, NULL, "attribute already exists")
@@ -2105,7 +2105,7 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
 
             HDmemcpy(attr_dst->shared->data, buf, attr_dst->shared->data_size);
 
-            if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
+            if(H5D_vlen_reclaim(tid_mem, buf_space, dxpl_id, reclaim_buf) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_BADITER, NULL, "unable to reclaim variable-length data")
         }  /* end if */
         else {
@@ -2396,7 +2396,7 @@ H5A_rename_by_name(H5G_loc_t loc, const char *obj_name, const char *old_attr_nam
         H5G_loc_reset(&obj_loc);
 
         /* Find the object's location */
-        if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, H5AC_ind_dxpl_id) < 0)
+        if(H5G_loc_find(&loc, obj_name, &obj_loc/*out*/, lapl_id, dxpl_id) < 0)
             HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "object not found")
         loc_found = TRUE;
 
diff --git a/src/H5Atest.c b/src/H5Atest.c
index d57bbe1..3dcca87 100644
--- a/src/H5Atest.c
+++ b/src/H5Atest.c
@@ -140,7 +140,7 @@ H5A_get_shared_rc_test(hid_t attr_id, hsize_t *ref_count)
     HDassert(H5O_msg_is_shared(H5O_ATTR_ID, attr));
 
     /* Retrieve ref count for shared or shareable attribute */
-    if(H5SM_get_refcount(attr->oloc.file, H5AC_ind_dxpl_id, H5O_ATTR_ID,
+    if(H5SM_get_refcount(attr->oloc.file, H5AC_ind_read_dxpl_id, H5O_ATTR_ID,
             &attr->sh_loc, ref_count) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't retrieve shared message ref count")
 
diff --git a/src/H5B.c b/src/H5B.c
index 3b34c4d..1208f3c 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -653,7 +653,7 @@ H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void
     bt_ud.bt = NULL;  /* Make certain future references will be caught */
 
     /* Move the location of the old root on the disk */
-    if(H5AC_move_entry(f, H5AC_BT, bt_ud.addr, old_root_addr) < 0)
+    if(H5AC_move_entry(f, H5AC_BT, bt_ud.addr, old_root_addr, dxpl_id) < 0)
 	HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to move B-tree root node")
     bt_ud.addr = old_root_addr;
 
@@ -1734,14 +1734,13 @@ H5B_shared_new(const H5F_t *f, const H5B_class_t *type, size_t sizeof_rkey)
 	    (shared->two_k + 1) * shared->sizeof_rkey);	/*keys		*/
     HDassert(shared->sizeof_rnode);
 
-    /* Allocate shared buffers */
+    /* Allocate and clear shared buffers */
     if(NULL == (shared->page = H5FL_BLK_MALLOC(page, shared->sizeof_rnode)))
-	HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for B-tree page")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(shared->page, 0, shared->sizeof_rnode);
-#endif /* H5_CLEAR_MEMORY */
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for B-tree page")
+    HDmemset(shared->page, 0, shared->sizeof_rnode);
+
     if(NULL == (shared->nkey = H5FL_SEQ_MALLOC(size_t, (size_t)(shared->two_k + 1))))
-	HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for B-tree native keys")
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "memory allocation failed for B-tree native keys")
 
     /* Initialize the offsets into the native key buffer */
     for(u = 0; u < (shared->two_k + 1); u++)
diff --git a/src/H5B2.c b/src/H5B2.c
index bdc79bd..ff27d87 100644
--- a/src/H5B2.c
+++ b/src/H5B2.c
@@ -89,6 +89,7 @@ extern const H5B2_class_t H5A_BT2_NAME[1];
 extern const H5B2_class_t H5A_BT2_CORDER[1];
 extern const H5B2_class_t H5D_BT2[1];
 extern const H5B2_class_t H5D_BT2_FILT[1];
+extern const H5B2_class_t H5B2_TEST2[1];
 
 const H5B2_class_t *const H5B2_client_class_g[] = {
     H5B2_TEST,			/* 0 - H5B2_TEST_ID 			*/
@@ -103,6 +104,7 @@ const H5B2_class_t *const H5B2_client_class_g[] = {
     H5A_BT2_CORDER,		/* 9 - H5B2_ATTR_DENSE_CORDER_ID 	*/
     H5D_BT2,			/* 10 - H5B2_CDSET_ID                   */
     H5D_BT2_FILT,		/* 11 - H5B2_CDSET_FILT_ID              */
+    H5B2_TEST2 			/* 12 - H5B2_TEST_ID 			*/
 };
 
 
@@ -287,36 +289,88 @@ H5B2_insert(H5B2_t *bt2, hid_t dxpl_id, void *udata)
     /* Get the v2 B-tree header */
     hdr = bt2->hdr;
 
+    /* Insert the record */
+    if(H5B2__insert_hdr(hdr, dxpl_id, udata) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_insert() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2_update
+ *
+ * Purpose:	Insert or modify a record to the B-tree.
+ *		If the record exists already, it is modified as if H5B2_modify
+ *		was called).  If it doesn't exist, it is inserted as if
+ *		H5B2_insert was called.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at hdfgroup.org
+ *		Dec 23 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op, void *op_data)
+{
+    H5B2_hdr_t	*hdr;           /* Pointer to the B-tree header */
+    H5B2_update_status_t status = H5B2_UPDATE_UNKNOWN;   /* Whether the record was inserted/modified */
+    herr_t ret_value = SUCCEED; /* Return value */
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+    /* Check arguments. */
+    HDassert(bt2);
+    HDassert(udata);
+
+    /* Set the shared v2 B-tree header's file context for this operation */
+    bt2->hdr->f = bt2->f;
+
+    /* Get the v2 B-tree header */
+    hdr = bt2->hdr;
+
     /* Check if the root node is allocated yet */
     if(!H5F_addr_defined(hdr->root.addr)) {
         /* Create root node as leaf node in B-tree */
         if(H5B2__create_leaf(hdr, dxpl_id, hdr, &(hdr->root)) < 0)
 	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
     } /* end if */
-    /* Check if we need to split the root node (equiv. to a 1->2 node split) */
-    else if(hdr->root.node_nrec == hdr->node_info[hdr->depth].split_nrec) {
-        /* Split root node */
-        if(H5B2__split_root(hdr, dxpl_id) < 0)
-            HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split root node")
-    } /* end if */
 
     /* Attempt to insert record into B-tree */
     if(hdr->depth > 0) {
-        if(H5B2__insert_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
-            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
+        if(H5B2__update_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in B-tree internal node")
     } /* end if */
     else {
-        if(H5B2__insert_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
-            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
+        if(H5B2__update_leaf(hdr, dxpl_id, &hdr->root, &status, H5B2_POS_ROOT, hdr, udata, op, op_data) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in B-tree leaf node")
     } /* end else */
 
-    /* Mark B-tree header as dirty */
-    if(H5B2__hdr_dirty(hdr) < 0)
-        HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
+    /* Sanity check */
+    HDassert(H5B2_UPDATE_UNKNOWN != status);
+
+    /* Use insert algorithm if nodes to leaf full */
+    if(H5B2_UPDATE_INSERT_CHILD_FULL == status) {
+        if(H5B2__insert_hdr(hdr, dxpl_id, udata) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree")
+    } /* end if */
+    else if(H5B2_UPDATE_SHADOW_DONE == status || H5B2_UPDATE_INSERT_DONE == status) {
+        /* Mark B-tree header as dirty */
+        if(H5B2__hdr_dirty(hdr) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
+    } /* end else-if */
+    else {
+        /* Sanity check */
+        HDassert(H5B2_UPDATE_MODIFY_DONE == status);
+    } /* end else */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2_insert() */
+} /* H5B2_update() */
 
 

 /*-------------------------------------------------------------------------
@@ -454,22 +508,26 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
      *  find candidates or avoid further searching.
      */
     if(hdr->min_native_rec != NULL) {
-	if((cmp = (hdr->cls->compare)(udata, hdr->min_native_rec)) < 0)
-	    HGOTO_DONE(FALSE) 	/* Less than the least record--not found */ 
-	else if(cmp == 0) { /* Record is found */
-	    if(op && (op)(hdr->min_native_rec, op_data) < 0)
+        if((hdr->cls->compare)(udata, hdr->min_native_rec, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        if(cmp < 0)
+            HGOTO_DONE(FALSE) 	/* Less than the least record--not found */ 
+        else if(cmp == 0) { /* Record is found */
+	        if(op && (op)(hdr->min_native_rec, op_data) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
-	    HGOTO_DONE(TRUE)
-	} /* end if */
+	        HGOTO_DONE(TRUE)
+	    } /* end if */
     } /* end if */
     if(hdr->max_native_rec != NULL) {
-	if((cmp = (hdr->cls->compare)(udata, hdr->max_native_rec)) > 0)
-	    HGOTO_DONE(FALSE) 	/* Greater than the greatest record--not found */
-	else if(cmp == 0) { /* Record is found */
-	    if(op && (op)(hdr->max_native_rec, op_data) < 0)
+	    if((hdr->cls->compare)(udata, hdr->max_native_rec, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        if(cmp > 0)
+            HGOTO_DONE(FALSE) 	/* Less than the least record--not found */ 
+	    else if(cmp == 0) { /* Record is found */
+	        if(op && (op)(hdr->max_native_rec, op_data) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "'found' callback failed for B-tree find operation")
-	    HGOTO_DONE(TRUE)
-	} /* end if */
+	        HGOTO_DONE(TRUE)
+	    } /* end if */
     } /* end if */
 
     /* Current depth of the tree */
@@ -498,10 +556,15 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
         } /* end if */
 
         /* Locate node pointer for child */
-        cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                               udata, &idx, &cmp) < 0) {
+            /* Unlock current node before failing */
+            H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        } /* end if */
+
         if(cmp > 0)
             idx++;
-
         if(cmp != 0) {
             /* Get node pointer for next node to search */
             next_node_ptr=internal->node_ptrs[idx];
@@ -572,7 +635,12 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
         } /* end if */
 
         /* Locate record */
-        cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, 
+                               udata, &idx, &cmp) < 0) {
+            /* unlock current node before failing */
+            H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        }
 
         if(cmp != 0) {
             /* Unlock leaf node */
@@ -598,7 +666,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
                 if(idx == 0) {
                     if(H5B2_POS_LEFT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                         if(hdr->min_native_rec == NULL)
-                            if(NULL == (hdr->min_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                            if(NULL == (hdr->min_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                                 HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree min record info")
                         HDmemcpy(hdr->min_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
                     } /* end if */
@@ -606,7 +674,7 @@ H5B2_find(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
                 if(idx == (unsigned)(leaf->nrec - 1)) {
                     if(H5B2_POS_RIGHT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                         if(hdr->max_native_rec == NULL)
-                            if(NULL == (hdr->max_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                            if(NULL == (hdr->max_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                                 HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree max record info")
                         HDmemcpy(hdr->max_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
                     } /* end if */
@@ -1153,7 +1221,13 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
         } /* end if */
 
         /* Locate node pointer for child */
-        cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                               udata, &idx, &cmp) < 0) {
+            /* Unlock current node */
+            H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET);
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        }
+
         if(cmp > 0)
             idx++;
 
@@ -1236,7 +1310,11 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
         } /* end if */
 
         /* Locate record */
-        cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, 
+                               udata, &idx, &cmp) < 0) {
+            H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET);
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        }
 
         if(cmp != 0) {
             /* Unlock leaf node */
@@ -1272,7 +1350,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
                 if(idx == 0) {
                     if(H5B2_POS_LEFT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                         if(hdr->min_native_rec == NULL)
-                            if(NULL == (hdr->min_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                            if(NULL == (hdr->min_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                                 HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree min record info")
                         HDmemcpy(hdr->min_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
                     } /* end if */
@@ -1280,7 +1358,7 @@ H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
                 if(idx == (unsigned)(leaf->nrec - 1)) {
                     if(H5B2_POS_RIGHT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                         if(hdr->max_native_rec == NULL)
-                            if(NULL == (hdr->max_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                            if(NULL == (hdr->max_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                                 HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree max record info")
                         HDmemcpy(hdr->max_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
                     } /* end if */
diff --git a/src/H5B2cache.c b/src/H5B2cache.c
index 2c40761..928a7ee 100644
--- a/src/H5B2cache.c
+++ b/src/H5B2cache.c
@@ -890,10 +890,8 @@ H5B2__cache_int_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED le
     /* Sanity check */
     HDassert((size_t)(image - (uint8_t *)_image) <= len);
 
-#ifdef H5_CLEAR_MEMORY
     /* Clear rest of internal node */
     HDmemset(image, 0, len - (size_t)(image - (uint8_t *)_image));
-#endif /* H5_CLEAR_MEMORY */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1300,10 +1298,8 @@ H5B2__cache_leaf_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED l
     /* Sanity check */
     HDassert((size_t)(image - (uint8_t *)_image) <= len);
 
-#ifdef H5_CLEAR_MEMORY
     /* Clear rest of leaf node */
     HDmemset(image, 0, len - (size_t)(image - (uint8_t *)_image));
-#endif /* H5_CLEAR_MEMORY */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5B2dbg.c b/src/H5B2dbg.c
index b0e9ba2..bc1edd7 100644
--- a/src/H5B2dbg.c
+++ b/src/H5B2dbg.c
@@ -92,7 +92,6 @@ H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
     const H5B2_class_t *type, haddr_t obj_addr)
 {
     H5B2_hdr_t	*hdr = NULL;            /* B-tree header info */
-    void        *dbg_ctx = NULL;	/* v2 B-tree debugging context */
     unsigned    u;                      /* Local index variable */
     char        temp_str[128];          /* Temporary string, for formatting */
     herr_t      ret_value = SUCCEED;    /* Return value */
@@ -109,17 +108,9 @@ H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
     HDassert(indent >= 0);
     HDassert(fwidth >= 0);
     HDassert(type);
-    HDassert((type->crt_dbg_ctx && type->dst_dbg_ctx) ||
-        (NULL == type->crt_dbg_ctx && NULL == type->dst_dbg_ctx));
-
-    /* Check for debugging context callback available */
-    if(type->crt_dbg_ctx)
-        /* Create debugging context */
-        if(NULL == (dbg_ctx = (type->crt_dbg_ctx)(f, dxpl_id, obj_addr)))
-	    HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "unable to create v2 B-tree debugging context")
 
     /* Load the B-tree header  */
-    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, addr, f, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree header")
 
     /* Set file pointer for this B-tree operation */
@@ -171,8 +162,6 @@ H5B2__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
     } /* end for */
 
 done:
-    if(dbg_ctx && (type->dst_dbg_ctx)(dbg_ctx) < 0)
-        HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, FAIL, "unable to release v2 B-tree debugging context")
     if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
         HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release v2 B-tree header")
 
@@ -199,7 +188,6 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
 {
     H5B2_hdr_t	*hdr = NULL;            /* B-tree header */
     H5B2_internal_t	*internal = NULL;   /* B-tree internal node */
-    void        *dbg_ctx = NULL;	/* v2 B-tree debugging context */
     unsigned	u;                      /* Local index variable */
     char        temp_str[128];          /* Temporary string, for formatting */
     herr_t      ret_value=SUCCEED;      /* Return value */
@@ -215,21 +203,12 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
     HDassert(indent >= 0);
     HDassert(fwidth >= 0);
     HDassert(type);
-    HDassert((type->crt_dbg_ctx && type->dst_dbg_ctx) ||
-        (NULL == type->crt_dbg_ctx && NULL == type->dst_dbg_ctx));
     HDassert(H5F_addr_defined(hdr_addr));
     HDassert(H5F_addr_defined(obj_addr));
     HDassert(nrec > 0);
 
-    /* Check for debugging context callback available */
-    if(type->crt_dbg_ctx) {
-        /* Create debugging context */
-        if(NULL == (dbg_ctx = (type->crt_dbg_ctx)(f, dxpl_id, obj_addr)))
-	    HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "unable to create v2 B-tree debugging context")
-    } /* end if */
-
     /* Load the B-tree header */
-    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load v2 B-tree header")
 
     /* Set file pointer for this B-tree operation */
@@ -279,7 +258,7 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
         HDfprintf(stream, "%*s%-*s\n", indent + 3, "", MAX(0, fwidth - 3),
                   temp_str);
         HDassert(H5B2_INT_NREC(internal, hdr, u));
-        (void)(type->debug)(stream, indent + 6, MAX (0, fwidth-6), H5B2_INT_NREC(internal, hdr, u), dbg_ctx);
+        (void)(type->debug)(stream, indent + 6, MAX (0, fwidth-6), H5B2_INT_NREC(internal, hdr, u), hdr->cb_ctx);
     } /* end for */
 
     /* Print final node pointer */
@@ -291,8 +270,6 @@ H5B2__int_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
               internal->node_ptrs[u].addr);
 
 done:
-    if(dbg_ctx && (type->dst_dbg_ctx)(dbg_ctx) < 0)
-        HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, FAIL, "unable to release v2 B-tree debugging context")
     if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
         HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release v2 B-tree header")
     if(internal && H5AC_unprotect(f, dxpl_id, H5AC_BT2_INT, addr, internal, H5AC__NO_FLAGS_SET) < 0)
@@ -321,7 +298,6 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
 {
     H5B2_hdr_t	*hdr = NULL;            /* B-tree header */
     H5B2_leaf_t	*leaf = NULL;           /* B-tree leaf node */
-    void        *dbg_ctx = NULL;	/* v2 B-tree debugging context */
     unsigned	u;                      /* Local index variable */
     char        temp_str[128];          /* Temporary string, for formatting */
     herr_t      ret_value = SUCCEED;    /* Return value */
@@ -337,20 +313,12 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
     HDassert(indent >= 0);
     HDassert(fwidth >= 0);
     HDassert(type);
-    HDassert((type->crt_dbg_ctx && type->dst_dbg_ctx) ||
-        (NULL == type->crt_dbg_ctx && NULL == type->dst_dbg_ctx));
     HDassert(H5F_addr_defined(hdr_addr));
     HDassert(H5F_addr_defined(obj_addr));
     HDassert(nrec > 0);
 
-    /* Check for debugging context callback available */
-    if(type->crt_dbg_ctx)
-        /* Create debugging context */
-        if(NULL == (dbg_ctx = (type->crt_dbg_ctx)(f, dxpl_id, obj_addr)))
-	    HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "unable to create v2 B-tree debugging context")
-
     /* Load the B-tree header */
-    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, dbg_ctx, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (hdr = H5B2__hdr_protect(f, dxpl_id, hdr_addr, f, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect v2 B-tree header")
 
     /* Set file pointer for this B-tree operation */
@@ -391,12 +359,10 @@ H5B2__leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent
         HDfprintf(stream, "%*s%-*s\n", indent + 3, "", MAX(0, fwidth - 3),
                   temp_str);
         HDassert(H5B2_LEAF_NREC(leaf, hdr, u));
-        (void)(type->debug)(stream, indent + 6, MAX (0, fwidth-6), H5B2_LEAF_NREC(leaf, hdr, u), dbg_ctx);
+        (void)(type->debug)(stream, indent + 6, MAX (0, fwidth-6), H5B2_LEAF_NREC(leaf, hdr, u), hdr->cb_ctx);
     } /* end for */
 
 done:
-    if(dbg_ctx && (type->dst_dbg_ctx)(dbg_ctx) < 0)
-        HDONE_ERROR(H5E_BTREE, H5E_CANTRELEASE, FAIL, "unable to release v2 B-tree debugging context")
     if(hdr && H5B2__hdr_unprotect(hdr, dxpl_id, H5AC__NO_FLAGS_SET) < 0)
         HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree header")
     if(leaf && H5AC_unprotect(f, dxpl_id, H5AC_BT2_LEAF, addr, leaf, H5AC__NO_FLAGS_SET) < 0)
diff --git a/src/H5B2hdr.c b/src/H5B2hdr.c
index 0676f30..578eeb9 100644
--- a/src/H5B2hdr.c
+++ b/src/H5B2hdr.c
@@ -153,9 +153,7 @@ H5B2__hdr_init(H5B2_hdr_t *hdr, const H5B2_create_t *cparam, void *ctx_udata,
     /* Allocate "page" for node I/O */
     if(NULL == (hdr->page = H5FL_BLK_MALLOC(node_page, hdr->node_size)))
         HGOTO_ERROR(H5E_BTREE, H5E_NOSPACE, FAIL, "memory allocation failed")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(hdr->page, 0, hdr->node_size);
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(hdr->page, 0, hdr->node_size);
 
     /* Allocate array of node info structs */
     if(NULL == (hdr->node_info = H5FL_SEQ_MALLOC(H5B2_node_info_t, (size_t)(hdr->depth + 1))))
diff --git a/src/H5B2int.c b/src/H5B2int.c
index 01b747f..3e3c487 100644
--- a/src/H5B2int.c
+++ b/src/H5B2int.c
@@ -80,9 +80,10 @@ static herr_t H5B2__swap_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
     H5B2_internal_t *internal, unsigned *internal_flags_ptr, unsigned idx,
     void *swap_loc);
 static herr_t H5B2__shadow_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
-    uint16_t depth, H5B2_node_ptr_t *curr_node_ptr, H5B2_internal_t **internal);
+    uint16_t depth, H5B2_node_ptr_t *curr_node_ptr, H5B2_internal_t **internal,
+    hbool_t *was_shadowed);
 static herr_t H5B2__shadow_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
-    H5B2_node_ptr_t *curr_node_ptr, H5B2_leaf_t **leaf);
+    H5B2_node_ptr_t *curr_node_ptr, H5B2_leaf_t **leaf, hbool_t *was_shadowed);
 static herr_t H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
     H5B2_node_ptr_t *node_ptr, uint16_t depth);
 #ifdef H5B2_DEBUG
@@ -138,28 +139,33 @@ H5FL_SEQ_EXTERN(H5B2_node_info_t);
  *
  *-------------------------------------------------------------------------
  */
-int
+herr_t
 H5B2__locate_record(const H5B2_class_t *type, unsigned nrec, size_t *rec_off,
-    const uint8_t *native, const void *udata, unsigned *idx)
+                    const uint8_t *native, const void *udata, unsigned *idx, int *cmp)
 {
     unsigned	lo = 0, hi;     /* Low & high index values */
     unsigned    my_idx = 0;     /* Final index value */
-    int         cmp = -1;       /* Key comparison value */
+    herr_t      ret_value = SUCCEED;
+
+    FUNC_ENTER_PACKAGE
 
-    FUNC_ENTER_PACKAGE_NOERR
+    *cmp = -1;
 
     hi = nrec;
-    while(lo < hi && cmp) {
-	my_idx = (lo + hi) / 2;
-	if((cmp = (type->compare)(udata, native + rec_off[my_idx])) < 0)
-	    hi = my_idx;
-	else
-	    lo = my_idx + 1;
-    }
+    while(lo < hi && *cmp) {
+        my_idx = (lo + hi) / 2;
+        if((type->compare)(udata, native + rec_off[my_idx], cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        if(*cmp < 0)
+            hi = my_idx;
+        else
+            lo = my_idx + 1;
+    } /* end while */
 
     *idx = my_idx;
 
-    FUNC_LEAVE_NOAPI(cmp)
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5B2__locate_record */
 
 

@@ -232,7 +238,7 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow the left node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_int) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_int, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx].addr;
         } /* end if */
@@ -268,7 +274,7 @@ H5B2__split1(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow the left node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx].addr;
         } /* end if */
@@ -571,9 +577,9 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow both nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx + 1]), &right_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx + 1]), &right_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx].addr;
             right_addr = internal->node_ptrs[idx + 1].addr;
@@ -606,9 +612,9 @@ H5B2__redistribute2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow both nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), &right_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), &right_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             left_addr = internal->node_ptrs[idx].addr;
             right_addr = internal->node_ptrs[idx + 1].addr;
@@ -881,10 +887,6 @@ done:
     if(right_child && H5AC_unprotect(hdr->f, dxpl_id, child_class, right_addr, right_child, right_child_flags) < 0)
         HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree child node")
 
-    /* Release grandchild node if protected (only on error) */
-    if(grandchild && H5AC_unprotect(hdr->f, dxpl_id, grandchild_class, left_node_ptrs[u].addr, grandchild, H5AC__NO_FLAGS_SET) < 0)
-        HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
-
     /* Unprotect the grandchild on error */
     if(grandchild) {
         HDassert(ret_value < 0);
@@ -964,11 +966,11 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow all nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx - 1]), &left_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx - 1]), &left_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &middle_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &middle_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx + 1]), &right_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx + 1]), &right_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx - 1].addr;
             middle_addr = internal->node_ptrs[idx].addr;
@@ -1010,11 +1012,11 @@ H5B2__redistribute3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow all nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx - 1]), &left_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx - 1]), &left_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &middle_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &middle_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), &right_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx + 1]), &right_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             left_addr = internal->node_ptrs[idx - 1].addr;
             middle_addr = internal->node_ptrs[idx].addr;
@@ -1611,7 +1613,7 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow the left node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &left_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx].addr;
         } /* end if */
@@ -1643,7 +1645,7 @@ H5B2__merge2(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow the left node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &left_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             left_addr = internal->node_ptrs[idx].addr;
         } /* end if */
@@ -1861,9 +1863,9 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow left and middle nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx - 1]), &left_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx - 1]), &left_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
-            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &middle_internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &(internal->node_ptrs[idx]), &middle_internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             left_addr = internal->node_ptrs[idx - 1].addr;
             middle_addr = internal->node_ptrs[idx].addr;
@@ -1904,9 +1906,9 @@ H5B2__merge3(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
         /* Shadow left and middle nodes if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx - 1]), &left_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx - 1]), &left_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
-            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &middle_leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, &(internal->node_ptrs[idx]), &middle_leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             left_addr = internal->node_ptrs[idx - 1].addr;
             middle_addr = internal->node_ptrs[idx].addr;
@@ -2261,6 +2263,62 @@ done:
 
 

 /*-------------------------------------------------------------------------
+ * Function:	H5B2__insert_hdr
+ *
+ * Purpose:	Adds a new record to the B-tree.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at hdfgroup.org
+ *		Dec 23 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2__insert_hdr(H5B2_hdr_t *hdr, hid_t dxpl_id, void *udata)
+{
+    herr_t	ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_PACKAGE
+
+    /* Check arguments. */
+    HDassert(hdr);
+    HDassert(udata);
+
+    /* Check if the root node is allocated yet */
+    if(!H5F_addr_defined(hdr->root.addr)) {
+        /* Create root node as leaf node in B-tree */
+        if(H5B2__create_leaf(hdr, dxpl_id, hdr, &(hdr->root)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
+    } /* end if */
+    /* Check if we need to split the root node (equiv. to a 1->2 node split) */
+    else if(hdr->root.node_nrec == hdr->node_info[hdr->depth].split_nrec) {
+        /* Split root node */
+        if(H5B2__split_root(hdr, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to split root node")
+    } /* end if */
+
+    /* Attempt to insert record into B-tree */
+    if(hdr->depth > 0) {
+        if(H5B2__insert_internal(hdr, dxpl_id, hdr->depth, NULL, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree internal node")
+    } /* end if */
+    else {
+        if(H5B2__insert_leaf(hdr, dxpl_id, &hdr->root, H5B2_POS_ROOT, hdr, udata) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into B-tree leaf node")
+    } /* end else */
+
+    /* Mark B-tree header as dirty */
+    if(H5B2__hdr_dirty(hdr) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTMARKDIRTY, FAIL, "unable to mark B-tree header dirty")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2__insert_hdr() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	H5B2__insert_leaf
  *
  * Purpose:	Adds a new record to a B-tree leaf node.
@@ -2278,6 +2336,7 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     H5B2_nodepos_t curr_pos, void *parent, void *udata)
 {
     H5B2_leaf_t *leaf;                  /* Pointer to leaf node */
+    unsigned leaf_flags = H5AC__NO_FLAGS_SET;   /* Flags for unprotecting the leaf node */
     int         cmp;                    /* Comparison value of records */
     unsigned    idx;                    /* Location of record which matches key */
     herr_t	ret_value = SUCCEED;    /* Return value */
@@ -2293,11 +2352,6 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, parent, curr_node_ptr->node_nrec, H5AC__NO_FLAGS_SET)))
         HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
 
-    /* Shadow the node if doing SWMR writes */
-    if(hdr->swmr_write)
-        if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf) < 0)
-            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
-
     /* Must have a leaf node with enough space to insert a record now */
     HDassert(curr_node_ptr->node_nrec < hdr->node_info[0].max_nrec);
 
@@ -2310,7 +2364,9 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
         idx = 0;
     else {
         /* Find correct location to insert this record */
-        if((cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx)) == 0)
+        if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        if(cmp == 0)
             HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
         if(cmp > 0)
             idx++;
@@ -2324,6 +2380,9 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     if((hdr->cls->store)(H5B2_LEAF_NREC(leaf, hdr, idx), udata) < 0)
         HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into leaf node")
 
+    /* Mark the node as dirty */
+    leaf_flags |= H5AC__DIRTIED_FLAG;
+
     /* Update record count for node pointer to current node */
     curr_node_ptr->all_nrec++;
     curr_node_ptr->node_nrec++;
@@ -2337,7 +2396,7 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
         if(idx == 0) {
             if(H5B2_POS_LEFT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                 if(hdr->min_native_rec == NULL)
-                    if(NULL == (hdr->min_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                    if(NULL == (hdr->min_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                         HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree min record info")
                 HDmemcpy(hdr->min_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
             } /* end if */
@@ -2345,7 +2404,7 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
         if(idx == (unsigned)(leaf->nrec - 1)) {
             if(H5B2_POS_RIGHT == curr_pos || H5B2_POS_ROOT == curr_pos) {
                 if(hdr->max_native_rec == NULL)
-                    if(NULL == (hdr->max_native_rec = (uint8_t *)H5MM_malloc(hdr->cls->nrec_size)))
+                    if(NULL == (hdr->max_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
                         HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree max record info")
                 HDmemcpy(hdr->max_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
             } /* end if */
@@ -2354,8 +2413,14 @@ H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
 
 done:
     /* Release the B-tree leaf node (marked as dirty) */
-    if(leaf && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, H5AC__DIRTIED_FLAG) < 0)
-        HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
+    if(leaf) {
+        /* Shadow the node if doing SWMR writes */
+        if(hdr->swmr_write && (leaf_flags & H5AC__DIRTIED_FLAG))
+            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf, NULL) < 0)
+                HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf B-tree node")
+        if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
+            HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
+    } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5B2__insert_leaf() */
@@ -2397,10 +2462,8 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
     if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr->addr, parent, curr_node_ptr->node_nrec, depth, H5AC__NO_FLAGS_SET)))
         HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
 
-    /* Shadow the node if doing SWMR writes */
-    if(hdr->swmr_write)
-        if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal) < 0)
-            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
+    /* Sanity check number of records */
+    HDassert(internal->nrec == curr_node_ptr->node_nrec);
 
     /* Split or redistribute child node pointers, if necessary */
     {
@@ -2409,7 +2472,10 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
         size_t      split_nrec; /* Number of records to split node at */
 
         /* Locate node pointer for child */
-        if((cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
+        if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                               udata, &idx, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+        if(cmp == 0)
             HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
         if(cmp > 0)
             idx++;
@@ -2464,8 +2530,11 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
             } /* end else */
 
             /* Locate node pointer for child (after split/redistribute) */
-/* Actually, this can be easily updated (for 2-node redistrib.) and shouldn't require re-searching */
-            if((cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx)) == 0)
+            /* Actually, this can be easily updated (for 2-node redistrib.) and shouldn't require re-searching */
+            if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                                   udata, &idx, &cmp) < 0)
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+            if(cmp == 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
             if(cmp > 0)
                 idx++;
@@ -2505,14 +2574,403 @@ H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
 
 done:
     /* Release the B-tree internal node */
-    if(internal && H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
-        HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
+    if(internal) {
+        /* Shadow the node if doing SWMR writes */
+        if(hdr->swmr_write && (internal_flags & H5AC__DIRTIED_FLAG))
+            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal, NULL) < 0)
+                HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal B-tree node")
+        if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
+            HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
+    } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5B2__insert_internal() */
 
 

 /*-------------------------------------------------------------------------
+ * Function:	H5B2__update_leaf
+ *
+ * Purpose:	Insert or modify a record in a B-tree leaf node.
+ *		If the record exists already, it is modified as if H5B2_modify
+ *		was called).  If it doesn't exist, it is inserted as if
+ *		H5B2_insert was called.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at hdfgroup.org
+ *		Dec 23 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2__update_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr,
+    H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
+    void *udata, H5B2_modify_t op, void *op_data)
+{
+    H5B2_leaf_t *leaf;                  /* Pointer to leaf node */
+    unsigned leaf_flags = H5AC__NO_FLAGS_SET;   /* Flags for unprotecting the leaf node */
+    int         cmp = -1;               /* Comparison value of records */
+    unsigned    idx;                    /* Location of record which matches key */
+    herr_t	ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_PACKAGE
+
+    /* Check arguments. */
+    HDassert(hdr);
+    HDassert(curr_node_ptr);
+    HDassert(H5F_addr_defined(curr_node_ptr->addr));
+
+    /* Lock current B-tree node */
+    if(NULL == (leaf = H5B2__protect_leaf(hdr, dxpl_id, curr_node_ptr->addr, parent, curr_node_ptr->node_nrec, H5AC__NO_FLAGS_SET)))
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
+
+    /* Sanity check number of records */
+    HDassert(curr_node_ptr->all_nrec == curr_node_ptr->node_nrec);
+    HDassert(leaf->nrec == curr_node_ptr->node_nrec);
+
+    /* Check for inserting into empty leaf */
+    if(leaf->nrec == 0)
+        idx = 0;
+    else {
+        /* Find correct location to insert this record */
+        if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+
+        /* Check for inserting a record */
+        if(0 != cmp) {
+            /* Check if the leaf node is full */
+            if(curr_node_ptr->node_nrec == hdr->node_info[0].split_nrec) {
+                /* Indicate that the leaf is full, but we need to insert */
+                *status = H5B2_UPDATE_INSERT_CHILD_FULL;
+
+                /* Let calling routine handle insertion */
+                HGOTO_DONE(SUCCEED)
+            } /* end if */
+
+            /* Adjust index to leave room for record to insert */
+            if(cmp > 0)
+                idx++;
+
+            /* Make room for new record */
+            if(idx < leaf->nrec)
+                HDmemmove(H5B2_LEAF_NREC(leaf, hdr, idx + 1), H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size * (leaf->nrec - idx));
+        } /* end if */
+    } /* end else */
+
+    /* Check for modifying existing record */
+    if(0 == cmp) {
+        hbool_t changed = FALSE;        /* Whether the 'modify' callback changed the record */
+
+        /* Make callback for current record */
+        if((op)(H5B2_LEAF_NREC(leaf, hdr, idx), op_data, &changed) < 0) {
+            /* Make certain that the callback didn't modify the value if it failed */
+            HDassert(changed == FALSE);
+
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTMODIFY, FAIL, "'modify' callback failed for B-tree update operation")
+        } /* end if */
+
+        /* Mark the node as dirty if it changed */
+        leaf_flags |= (changed ? H5AC__DIRTIED_FLAG : 0);
+
+        /* Indicate that the record was modified */
+        *status = H5B2_UPDATE_MODIFY_DONE;
+    } /* end if */
+    else {
+        /* Must have a leaf node with enough space to insert a record now */
+        HDassert(curr_node_ptr->node_nrec < hdr->node_info[0].max_nrec);
+
+        /* Make callback to store record in native form */
+        if((hdr->cls->store)(H5B2_LEAF_NREC(leaf, hdr, idx), udata) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into leaf node")
+
+        /* Mark the node as dirty */
+        leaf_flags |= H5AC__DIRTIED_FLAG;
+
+        /* Indicate that the record was inserted */
+        *status = H5B2_UPDATE_INSERT_DONE;
+
+        /* Update record count for node pointer to current node */
+        curr_node_ptr->all_nrec++;
+        curr_node_ptr->node_nrec++;
+
+        /* Update record count for current node */
+        leaf->nrec++;
+    } /* end else */
+
+    /* Check for new record being the min or max for the tree */
+    /* (Don't use 'else' for the idx check, to allow for root leaf node) */
+    if(H5B2_POS_MIDDLE != curr_pos) {
+        if(idx == 0) {
+            if(H5B2_POS_LEFT == curr_pos || H5B2_POS_ROOT == curr_pos) {
+                if(hdr->min_native_rec == NULL)
+                    if(NULL == (hdr->min_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
+                        HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree min record info")
+                HDmemcpy(hdr->min_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
+            } /* end if */
+        } /* end if */
+        if(idx == (unsigned)(leaf->nrec - 1)) {
+            if(H5B2_POS_RIGHT == curr_pos || H5B2_POS_ROOT == curr_pos) {
+                if(hdr->max_native_rec == NULL)
+                    if(NULL == (hdr->max_native_rec = H5MM_malloc(hdr->cls->nrec_size)))
+                        HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, FAIL, "memory allocation failed for v2 B-tree max record info")
+                HDmemcpy(hdr->max_native_rec, H5B2_LEAF_NREC(leaf, hdr, idx), hdr->cls->nrec_size);
+            } /* end if */
+        } /* end if */
+    } /* end if */
+
+done:
+    /* Release the B-tree leaf node */
+    if(leaf) {
+        /* Check if we should shadow this node */
+        if(hdr->swmr_write && (leaf_flags & H5AC__DIRTIED_FLAG)) {
+            hbool_t was_shadowed;       /* Whether the node was actually shadowed */
+
+            /* Attempt to shadow the node if doing SWMR writes */
+            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf, &was_shadowed) < 0)
+                HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf B-tree node")
+
+            /* Change the state to "shadowed" if only modified currently */
+            /* (Triggers parent to be marked dirty) */
+            if(*status == H5B2_UPDATE_MODIFY_DONE)
+                *status = H5B2_UPDATE_SHADOW_DONE;
+        } /* end if */
+        if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr->addr, leaf, leaf_flags) < 0)
+            HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release leaf B-tree node")
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2__update_leaf() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2__update_internal
+ *
+ * Purpose:	Insert or modify a record in a B-tree leaf node.
+ *		If the record exists already, it is modified as if H5B2_modify
+ *		was called).  If it doesn't exist, it is inserted as if
+ *		H5B2_insert was called.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at hdfgroup.org
+ *		Dec 24 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
+    unsigned *parent_cache_info_flags_ptr, H5B2_node_ptr_t *curr_node_ptr,
+    H5B2_update_status_t *status, H5B2_nodepos_t curr_pos, void *parent,
+    void *udata, H5B2_modify_t op, void *op_data)
+{
+    H5B2_internal_t *internal = NULL;   /* Pointer to internal node */
+    unsigned internal_flags = H5AC__NO_FLAGS_SET;
+    int         cmp;                    /* Comparison value of records */
+    unsigned    idx;                    /* Location of record which matches key */
+    H5B2_nodepos_t next_pos = H5B2_POS_MIDDLE;    /* Position of node */
+    herr_t	ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_PACKAGE
+
+    /* Check arguments. */
+    HDassert(hdr);
+    HDassert(depth > 0);
+    HDassert(curr_node_ptr);
+    HDassert(H5F_addr_defined(curr_node_ptr->addr));
+
+    /* Lock current B-tree node */
+    if(NULL == (internal = H5B2__protect_internal(hdr, dxpl_id, curr_node_ptr->addr, parent, curr_node_ptr->node_nrec, depth, H5AC__NO_FLAGS_SET)))
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
+
+    /* Sanity check number of records */
+    HDassert(internal->nrec == curr_node_ptr->node_nrec);
+
+    /* Locate node pointer for child */
+    if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx, &cmp) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+
+    /* Check for modifying existing record */
+    if(0 == cmp) {
+        hbool_t changed = FALSE;        /* Whether the 'modify' callback changed the record */
+
+        /* Make callback for current record */
+        if((op)(H5B2_INT_NREC(internal, hdr, idx), op_data, &changed) < 0) {
+            /* Make certain that the callback didn't modify the value if it failed */
+            HDassert(changed == FALSE);
+
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTMODIFY, FAIL, "'modify' callback failed for B-tree update operation")
+        } /* end if */
+
+        /* Mark the node as dirty if it changed */
+        internal_flags |= (changed ? H5AC__DIRTIED_FLAG : 0);
+
+        /* Indicate that the record was modified */
+        *status = H5B2_UPDATE_MODIFY_DONE;
+    } /* end if */
+    else {
+        /* Adjust index to leave room for node to insert */
+        if(cmp > 0)
+            idx++;
+
+        /* Check if this node is left/right-most */
+        if(H5B2_POS_MIDDLE != curr_pos) {
+            if(idx == 0) {
+                if(H5B2_POS_LEFT == curr_pos || H5B2_POS_ROOT == curr_pos)
+                    next_pos = H5B2_POS_LEFT;
+            } /* end if */
+            else if(idx == internal->nrec) {
+                if(H5B2_POS_RIGHT == curr_pos || H5B2_POS_ROOT == curr_pos)
+                    next_pos = H5B2_POS_RIGHT;
+            } /* end else */
+        } /* end if */
+
+        /* Attempt to update record in child */
+        if(depth > 1) {
+            if(H5B2__update_internal(hdr, dxpl_id, (uint16_t)(depth - 1), &internal_flags, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in internal B-tree node")
+        } /* end if */
+        else {
+            if(H5B2__update_leaf(hdr, dxpl_id, &internal->node_ptrs[idx], status, next_pos, internal, udata, op, op_data) < 0)
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "unable to update record in leaf B-tree node")
+        } /* end else */
+
+        /* Take actions based on child's status report */
+        switch(*status) {
+            case H5B2_UPDATE_MODIFY_DONE:
+                /* No action */
+                break;
+
+            case H5B2_UPDATE_SHADOW_DONE:
+                /* If child node was shadowed (if SWMR is enabled), mark this node dirty */
+                if(hdr->swmr_write)
+                    internal_flags |= H5AC__DIRTIED_FLAG;
+
+                /* No further modifications up the tree are necessary though, so downgrade to merely "modified" */
+                *status = H5B2_UPDATE_MODIFY_DONE;
+                break;
+
+            case H5B2_UPDATE_INSERT_DONE:
+                /* Mark node as dirty */
+                internal_flags |= H5AC__DIRTIED_FLAG;
+
+                /* Update total record count for node pointer to current node */
+                curr_node_ptr->all_nrec++;
+                break;
+
+            case H5B2_UPDATE_INSERT_CHILD_FULL:
+                /* Split/redistribute this node */
+                if(internal->nrec == hdr->node_info[depth].split_nrec) {
+                    hbool_t could_split = FALSE;        /* Whether the child node could split */
+
+#ifdef QAK
+HDfprintf(stderr, "%s: idx = %u, internal->nrec = %u\n", FUNC, idx, internal->nrec);
+HDfprintf(stderr, "%s: hdr->node_info[%u].split_nrec = %u\n", FUNC, (unsigned)depth, (unsigned)hdr->node_info[depth].split_nrec);
+HDfprintf(stderr, "%s: hdr->node_info[%u].split_nrec = %u\n", FUNC, (unsigned)(depth - 1), (unsigned)hdr->node_info[depth - 1].split_nrec);
+#endif /* QAK */
+                    if(idx == 0) {      /* Left-most child */
+#ifdef QAK
+HDfprintf(stderr, "%s: Left-most child\n", FUNC);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)idx, (unsigned)internal->node_ptrs[idx].node_nrec);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)(idx + 1), (unsigned)internal->node_ptrs[idx + 1].node_nrec);
+#endif /* QAK */
+                        /* Check for left-most child and its neighbor being close to full */
+                        if((internal->node_ptrs[idx].node_nrec + internal->node_ptrs[idx + 1].node_nrec)
+                                >= ((hdr->node_info[depth - 1].split_nrec * 2) - 1))
+                            could_split = TRUE;
+                    } /* end if */
+                    else if(idx == internal->nrec) { /* Right-most child */
+#ifdef QAK
+HDfprintf(stderr, "%s: Right-most child\n", FUNC);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)(idx - 1), (unsigned)internal->node_ptrs[idx - 1].node_nrec);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)idx, (unsigned)internal->node_ptrs[idx].node_nrec);
+#endif /* QAK */
+                        /* Check for right-most child and its neighbor being close to full */
+                        if((internal->node_ptrs[idx - 1].node_nrec + internal->node_ptrs[idx].node_nrec)
+                                >= ((hdr->node_info[depth - 1].split_nrec * 2) - 1))
+                            could_split = TRUE;
+                    } /* end else-if */
+                    else {              /* Middle child */
+#ifdef QAK
+HDfprintf(stderr, "%s: Middle child\n", FUNC);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)(idx - 1), (unsigned)internal->node_ptrs[idx - 1].node_nrec);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)idx, (unsigned)internal->node_ptrs[idx].node_nrec);
+HDfprintf(stderr, "%s: internal->node_ptrs[%u].node_nrec = %u\n", FUNC, (unsigned)(idx + 1), (unsigned)internal->node_ptrs[idx + 1].node_nrec);
+#endif /* QAK */
+                        /* Check for middle child and its left neighbor being close to full */
+                        if((internal->node_ptrs[idx - 1].node_nrec + internal->node_ptrs[idx].node_nrec)
+                                >= ((hdr->node_info[depth - 1].split_nrec * 2) - 1))
+                            could_split = TRUE;
+                        /* Check for middle child and its right neighbor being close to full */
+                        else if((internal->node_ptrs[idx].node_nrec + internal->node_ptrs[idx + 1].node_nrec)
+                                >= ((hdr->node_info[depth - 1].split_nrec * 2) - 1))
+                            could_split = TRUE;
+                    } /* end if */
+
+                    /* If this node is full and the child node insertion could
+                     *  cause a split, punt back up to caller, leaving the
+                     *  "insert child full" status.
+                     */
+                    if(could_split) {
+                        /* Release the internal B-tree node */
+                        if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
+                            HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
+                        internal = NULL;
+
+#ifdef QAK
+HDfprintf(stderr, "%s: Punting back to caller\n", FUNC);
+#endif /* QAK */
+                        /* Punt back to caller */
+                        HGOTO_DONE(SUCCEED);
+                    } /* end if */
+                } /* end if */
+
+                /* Release the internal B-tree node */
+                if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
+                    HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
+                internal = NULL;
+
+                /* Indicate that the record was inserted */
+                *status = H5B2_UPDATE_INSERT_DONE;
+
+                /* Dodge sideways into inserting a record into this node */
+                if(H5B2__insert_internal(hdr, dxpl_id, depth, parent_cache_info_flags_ptr, curr_node_ptr, curr_pos, parent, udata) < 0)
+                    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into internal B-tree node")
+                break;
+
+            case H5B2_UPDATE_UNKNOWN:
+            default:
+                HDassert(0 && "Invalid update status");
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTUPDATE, FAIL, "invalid update status")
+        } /* end switch */
+    } /* end else */
+
+done:
+    /* Release the internal B-tree node */
+    if(internal) {
+        /* Check if we should shadow this node */
+        if(hdr->swmr_write && (internal_flags & H5AC__DIRTIED_FLAG)) {
+            hbool_t was_shadowed;       /* Whether the node was actually shadowed */
+
+            /* Attempt to shadow the node if doing SWMR writes */
+            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal, &was_shadowed) < 0)
+                HDONE_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal B-tree node")
+
+            /* Change the state to "shadowed" if only modified currently */
+            /* (Triggers parent to be marked dirty) */
+            if(*status == H5B2_UPDATE_MODIFY_DONE)
+                *status = H5B2_UPDATE_SHADOW_DONE;
+        } /* end if */
+        if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr->addr, internal, internal_flags) < 0)
+            HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release internal B-tree node")
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2__update_internal() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	H5B2__create_leaf
  *
  * Purpose:	Creates empty leaf node of a B-tree and update node pointer
@@ -2547,17 +3005,15 @@ H5B2__create_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent, H5B2_node_ptr_t
 
     /* Increment ref. count on B-tree header */
     if(H5B2__hdr_incr(hdr) < 0)
-	HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, FAIL, "can't increment ref. count on B-tree header")
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTINC, FAIL, "can't increment ref. count on B-tree header")
 
     /* Share B-tree header information */
     leaf->hdr = hdr;
 
     /* Allocate space for the native keys in memory */
     if(NULL == (leaf->leaf_native = (uint8_t *)H5FL_FAC_MALLOC(hdr->node_info[0].nat_rec_fac)))
-	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree leaf native keys")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(leaf->leaf_native, 0, hdr->cls->nrec_size * hdr->node_info[0].max_nrec);
-#endif /* H5_CLEAR_MEMORY */
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree leaf native keys")
+    HDmemset(leaf->leaf_native, 0, hdr->cls->nrec_size * hdr->node_info[0].max_nrec);
 
     /* Set number of records */
     leaf->nrec = 0;
@@ -2571,15 +3027,15 @@ HDmemset(leaf->leaf_native, 0, hdr->cls->nrec_size * hdr->node_info[0].max_nrec)
 
     /* Allocate space on disk for the leaf */
     if(HADDR_UNDEF == (node_ptr->addr = H5MF_alloc(hdr->f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)hdr->node_size)))
-	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree leaf node")
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree leaf node")
 
     /* Cache the new B-tree node */
     if(H5AC_insert_entry(hdr->f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
-	HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree leaf to cache")
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree leaf to cache")
 
 done:
     if(ret_value < 0) {
-	if(leaf)
+        if(leaf)
             if(H5B2__leaf_free(leaf) < 0)
                 HDONE_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to release v2 B-tree leaf node")
     } /* end if */
@@ -2677,16 +3133,12 @@ H5B2__create_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, void *parent,
     /* Allocate space for the native keys in memory */
     if(NULL == (internal->int_native = (uint8_t *)H5FL_FAC_MALLOC(hdr->node_info[depth].nat_rec_fac)))
         HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree internal native keys")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(internal->int_native, 0, hdr->cls->nrec_size * hdr->node_info[depth].max_nrec);
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(internal->int_native, 0, hdr->cls->nrec_size * hdr->node_info[depth].max_nrec);
 
     /* Allocate space for the node pointers in memory */
     if(NULL == (internal->node_ptrs = (H5B2_node_ptr_t *)H5FL_FAC_MALLOC(hdr->node_info[depth].node_ptr_fac)))
         HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree internal node pointers")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(internal->node_ptrs, 0, sizeof(H5B2_node_ptr_t) * (hdr->node_info[depth].max_nrec + 1));
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(internal->node_ptrs, 0, sizeof(H5B2_node_ptr_t) * (hdr->node_info[depth].max_nrec + 1));
 
     /* Set number of records & depth of the node */
     internal->nrec = 0;
@@ -2907,6 +3359,7 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     haddr_t     leaf_addr = HADDR_UNDEF;  /* Leaf address on disk */
     unsigned    leaf_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting leaf node */
     unsigned    idx;                    /* Location of record which matches key */
+    int         cmp;                    /* Comparison value of records */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -2926,7 +3379,9 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     HDassert(leaf->nrec == curr_node_ptr->node_nrec);
 
     /* Find correct location to remove this record */
-    if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx) != 0)
+    if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+    if(cmp != 0)
         HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "record is not in B-tree")
 
     /* Check for invalidating the min/max record for the tree */
@@ -2957,7 +3412,7 @@ H5B2__remove_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_ptr
     if(leaf->nrec > 0) {
         /* Shadow the node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             leaf_addr = curr_node_ptr->addr;
         } /* end if */
@@ -3133,7 +3588,7 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
 
         /* Shadow the node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             internal_addr = curr_node_ptr->addr;
         } /* end if */
@@ -3142,7 +3597,9 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
         if(swap_loc)
             idx = 0;
         else {
-            cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+            if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                                   udata, &idx, &cmp) < 0)
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
             if(cmp >= 0)
                 idx++;
         } /* end else */
@@ -3204,7 +3661,8 @@ H5B2__remove_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, hbool_t *depth_decreased,
                 idx = 0;
             else {
 /* Actually, this can be easily updated (for 2-node redistrib.) and shouldn't require re-searching */
-                cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+                if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx, &cmp) < 0)
+                    HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
                 if(cmp >= 0)
                     idx++;
             } /* end else */
@@ -3350,7 +3808,7 @@ H5B2__remove_leaf_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
     if(leaf->nrec > 0) {
         /* Shadow the node if doing SWMR writes */
         if(hdr->swmr_write) {
-            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf) < 0)
+            if(H5B2__shadow_leaf(hdr, dxpl_id, curr_node_ptr, &leaf, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow leaf node")
             leaf_addr = curr_node_ptr->addr;
         } /* end if */
@@ -3532,7 +3990,7 @@ H5B2__remove_internal_by_idx(H5B2_hdr_t *hdr, hid_t dxpl_id,
 
         /* Shadow the node if doing SWMR writes */
         if(hdr->swmr_write && !collapsed_root) {
-            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal) < 0)
+            if(H5B2__shadow_internal(hdr, dxpl_id, depth, curr_node_ptr, &internal, NULL) < 0)
                 HGOTO_ERROR(H5E_BTREE, H5E_CANTCOPY, FAIL, "unable to shadow internal node")
             internal_addr = curr_node_ptr->addr;
         } /* end if */
@@ -3780,7 +4238,8 @@ H5B2__neighbor_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id, H5B2_node_ptr_t *curr_node_p
         HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree leaf node")
 
     /* Locate node pointer for child */
-    cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+    if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx, &cmp) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
     if(cmp > 0)
         idx++;
     else
@@ -3867,7 +4326,9 @@ H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
         HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to protect B-tree internal node")
 
     /* Locate node pointer for child */
-    cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+    if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                           udata, &idx, &cmp) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
     if(cmp > 0)
         idx++;
 
@@ -4128,7 +4589,7 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5B2__shadow_internal
  *
- * Purpose:     "Shadow: an internal node - copy it to a new location,
+ * Purpose:     "Shadow" an internal node - copy it to a new location,
  *              leaving the data in the old location intact (for now).
  *              This is done when writing in SWMR mode to ensure that
  *              readers do not see nodes that are out of date with
@@ -4143,7 +4604,8 @@ done:
  */
 static herr_t
 H5B2__shadow_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
-    H5B2_node_ptr_t *curr_node_ptr, H5B2_internal_t **internal)
+    H5B2_node_ptr_t *curr_node_ptr, H5B2_internal_t **internal,
+    hbool_t *was_shadowed)
 {
     hbool_t node_pinned = FALSE;
     hbool_t node_protected = TRUE;
@@ -4192,7 +4654,7 @@ H5B2__shadow_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
         node_protected = FALSE;
 
         /* Move the location of the old child on the disk */
-        if(H5AC_move_entry(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, new_node_addr) < 0)
+        if(H5AC_move_entry(hdr->f, H5AC_BT2_INT, curr_node_ptr->addr, new_node_addr, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_BTREE, H5E_CANTMOVE, FAIL, "unable to move B-tree node")
         curr_node_ptr->addr = new_node_addr;
 
@@ -4210,7 +4672,16 @@ H5B2__shadow_internal(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
         else
             (*internal)->shadowed_next = *internal;
         hdr->shadowed_internal = *internal;
+
+        /* Indicate that the node was shadowed to parent */
+        if(was_shadowed)
+            *was_shadowed = TRUE;
     } /* end if */
+    else {
+        /* Indicate that the node was _not_ shadowed to parent */
+        if(was_shadowed)
+            *was_shadowed = FALSE;
+    } /* end else */
 
 done:
     if(node_pinned)
@@ -4229,7 +4700,7 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5B2__shadow_leaf
  *
- * Purpose:     "Shadow: a leaf node - copy it to a new location, leaving
+ * Purpose:     "Shadow" a leaf node - copy it to a new location, leaving
  *              the data in the old location intact (for now).  This is
  *              done when writing in SWMR mode to ensure that readers do
  *              not see nodes that are out of date with respect to each
@@ -4244,7 +4715,7 @@ done:
  */
 static herr_t
 H5B2__shadow_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
-    H5B2_node_ptr_t *curr_node_ptr, H5B2_leaf_t **leaf)
+    H5B2_node_ptr_t *curr_node_ptr, H5B2_leaf_t **leaf, hbool_t *was_shadowed)
 {
     hbool_t node_pinned = FALSE;
     hbool_t node_protected = TRUE;
@@ -4292,7 +4763,7 @@ H5B2__shadow_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
         node_protected = FALSE;
 
         /* Move the location of the old child on the disk */
-        if(H5AC_move_entry(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, new_node_addr) < 0)
+        if(H5AC_move_entry(hdr->f, H5AC_BT2_LEAF, curr_node_ptr->addr, new_node_addr, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_BTREE, H5E_CANTMOVE, FAIL, "unable to move B-tree node")
         curr_node_ptr->addr = new_node_addr;
 
@@ -4310,7 +4781,16 @@ H5B2__shadow_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
         else
             (*leaf)->shadowed_next = *leaf;
         hdr->shadowed_leaf = *leaf;
+
+        /* Indicate that the node was shadowed to parent */
+        if(was_shadowed)
+            *was_shadowed = TRUE;
     } /* end if */
+    else {
+        /* Indicate that the node was _not_ shadowed to parent */
+        if(was_shadowed)
+            *was_shadowed = FALSE;
+    } /* end else */
 
 done:
     if(node_pinned)
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h
index 5691d5f..ca5a55e 100644
--- a/src/H5B2pkg.h
+++ b/src/H5B2pkg.h
@@ -186,8 +186,8 @@ typedef struct H5B2_hdr_t {
     hbool_t     swmr_write;     /* Whether we are doing SWMR writes */
     struct H5B2_leaf_t *shadowed_leaf; /* Linked list of shadowed leaf nodes */
     struct H5B2_internal_t *shadowed_internal; /* Linked list of shadowed internal nodes */
-    uint8_t     *min_native_rec;   /* Pointer to minimum native record                  */
-    uint8_t     *max_native_rec;   /* Pointer to maximum native record                  */
+    void        *min_native_rec; /* Pointer to minimum native record                  */
+    void        *max_native_rec; /* Pointer to maximum native record                  */
 
     /* Client information (not stored) */
     const H5B2_class_t *cls;	/* Class of B-tree client */
@@ -238,6 +238,15 @@ typedef enum H5B2_nodepos_t {
     H5B2_POS_MIDDLE             /* Node is neither right or left-most in tree */
 } H5B2_nodepos_t;
 
+/* Update status */
+typedef enum H5B2_update_status_t {
+    H5B2_UPDATE_UNKNOWN,            /* Unknown update status (initial state) */
+    H5B2_UPDATE_MODIFY_DONE,        /* Update successfully modified existing record */
+    H5B2_UPDATE_SHADOW_DONE,        /* Update modified existing record and modified node was shadowed */
+    H5B2_UPDATE_INSERT_DONE,        /* Update inserted record successfully */
+    H5B2_UPDATE_INSERT_CHILD_FULL   /* Update will insert record, but child is full */
+} H5B2_update_status_t;
+
 /* Callback info for loading a free space header into the cache */
 typedef struct H5B2_hdr_cache_ud_t {
     H5F_t *f;                   /* File that v2 b-tree header is within */
@@ -264,7 +273,7 @@ typedef struct H5B2_leaf_cache_ud_t {
 
 #ifdef H5B2_TESTING
 /* Node information for testing */
-typedef struct {
+typedef struct H5B2_node_info_test_t {
     uint16_t depth;             /* Depth of node */
     uint16_t nrec;              /* Number of records in node */
 } H5B2_node_info_test_t;
@@ -293,6 +302,13 @@ H5FL_EXTERN(H5B2_leaf_t);
 /* Internal v2 B-tree testing class */
 #ifdef H5B2_TESTING
 H5_DLLVAR const H5B2_class_t H5B2_TEST[1];
+H5_DLLVAR const H5B2_class_t H5B2_TEST2[1];
+
+/* B-tree record for testing H5B2_TEST2 class */
+typedef struct H5B2_test_rec_t {
+    hsize_t key;        /* Key for record */
+    hsize_t val;        /* Value for record */
+} H5B2_test_rec_t;
 #endif /* H5B2_TESTING */
 
 /* Array of v2 B-tree client ID -> client class mappings */
@@ -345,12 +361,24 @@ H5_DLL herr_t H5B2__leaf_free(H5B2_leaf_t *l);
 H5_DLL herr_t H5B2__internal_free(H5B2_internal_t *i);
 
 /* Routines for inserting records */
+H5_DLL herr_t H5B2__insert_hdr(H5B2_hdr_t *hdr, hid_t dxpl_id, void *udata);
 H5_DLL herr_t H5B2__insert_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
     uint16_t depth, unsigned *parent_cache_info_flags_ptr,
     H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent, void *udata);
 H5_DLL herr_t H5B2__insert_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
     H5B2_node_ptr_t *curr_node_ptr, H5B2_nodepos_t curr_pos, void *parent, void *udata);
 
+/* Routines for update records */
+H5_DLL herr_t H5B2__update_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    uint16_t depth, unsigned *parent_cache_info_flags_ptr,
+    H5B2_node_ptr_t *curr_node_ptr, H5B2_update_status_t *status,
+    H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_modify_t op,
+    void *op_data);
+H5_DLL herr_t H5B2__update_leaf(H5B2_hdr_t *hdr, hid_t dxpl_id,
+    H5B2_node_ptr_t *curr_node_ptr, H5B2_update_status_t *status,
+    H5B2_nodepos_t curr_pos, void *parent, void *udata, H5B2_modify_t op,
+    void *op_data);
+
 /* Routines for iterating over nodes/records */
 H5_DLL herr_t H5B2__iterate_node(H5B2_hdr_t *hdr, hid_t dxpl_id, uint16_t depth,
     const H5B2_node_ptr_t *curr_node, void *parent, H5B2_operator_t op, void *op_data);
@@ -359,8 +387,8 @@ H5_DLL herr_t H5B2__node_size(H5B2_hdr_t *hdr, hid_t dxpl_id,
     hsize_t *op_data);
 
 /* Routines for locating records */
-H5_DLL int H5B2__locate_record(const H5B2_class_t *type, unsigned nrec,
-    size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx);
+H5_DLL herr_t H5B2__locate_record(const H5B2_class_t *type, unsigned nrec,
+    size_t *rec_off, const uint8_t *native, const void *udata, unsigned *idx, int *result);
 H5_DLL herr_t H5B2__neighbor_internal(H5B2_hdr_t *hdr, hid_t dxpl_id,
     uint16_t depth, H5B2_node_ptr_t *curr_node_ptr, void *neighbor_loc,
     H5B2_compare_t comp, void *parent, void *udata, H5B2_found_t op,
diff --git a/src/H5B2private.h b/src/H5B2private.h
index dbc5d47..eef8aa3 100644
--- a/src/H5B2private.h
+++ b/src/H5B2private.h
@@ -57,6 +57,7 @@ typedef enum H5B2_subid_t {
     H5B2_ATTR_DENSE_CORDER_ID,  /* B-tree is for indexing 'creation order' field for "dense" attribute storage on objects */
     H5B2_CDSET_ID,              /* B-tree is for non-filtered chunked dataset storage w/ >1 unlim dims */
     H5B2_CDSET_FILT_ID,         /* B-tree is for filtered chunked dataset storage w/ >1 unlim dims */
+    H5B2_TEST2_ID,		/* Another B-tree is for testing (do not use for actual data) */
     H5B2_NUM_BTREE_ID           /* Number of B-tree IDs (must be last)  */
 } H5B2_subid_t;
 
@@ -92,13 +93,11 @@ struct H5B2_class_t {
     void *(*crt_context)(void *udata);          /* Create context for other client callbacks */
     herr_t (*dst_context)(void *ctx);           /* Destroy client callback context */
     herr_t (*store)(void *nrecord, const void *udata);              	/* Store application record in native record table */
-    herr_t (*compare)(const void *rec1, const void *rec2); 		/* Compare two native records */
+    herr_t (*compare)(const void *rec1, const void *rec2, int *result); /* Compare two native records */
     herr_t (*encode)(uint8_t *raw, const void *record, void *ctx);  	/* Encode record from native form to disk storage form */
     herr_t (*decode)(const uint8_t *raw, void *record, void *ctx);  	/* Decode record from disk storage form to native form */
     herr_t (*debug)(FILE *stream, int indent, int fwidth,    	/* Print a record for debugging */
         const void *record,  const void *ctx);
-    void *(*crt_dbg_ctx)(H5F_t *f, hid_t dxpl_id, haddr_t obj_addr); 	/* Create debugging context */
-    herr_t (*dst_dbg_ctx)(void *dbg_ctx);       /* Destroy debugging context */
 };
 
 /* v2 B-tree creation parameters */
@@ -143,6 +142,8 @@ H5_DLL herr_t H5B2_neighbor(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range,
     void *udata, H5B2_found_t op, void *op_data);
 H5_DLL herr_t H5B2_modify(H5B2_t *bt2, hid_t dxpl_id, void *udata,
     H5B2_modify_t op, void *op_data);
+H5_DLL herr_t H5B2_update(H5B2_t *bt2, hid_t dxpl_id, void *udata,
+    H5B2_modify_t op, void *op_data);
 H5_DLL herr_t H5B2_remove(H5B2_t *b2, hid_t dxpl_id, void *udata,
     H5B2_remove_t op, void *op_data);
 H5_DLL herr_t H5B2_remove_by_idx(H5B2_t *bt2, hid_t dxpl_id,
diff --git a/src/H5B2test.c b/src/H5B2test.c
index a72dc30..be4265f 100644
--- a/src/H5B2test.c
+++ b/src/H5B2test.c
@@ -61,21 +61,30 @@ typedef struct H5B2_test_ctx_t {
 /* Local Prototypes */
 /********************/
 
+/* v2 B-tree driver callbacks for 'test' B-trees */
 static void *H5B2__test_crt_context(void *udata);
 static herr_t H5B2__test_dst_context(void *ctx);
 static herr_t H5B2__test_store(void *nrecord, const void *udata);
-static herr_t H5B2__test_compare(const void *rec1, const void *rec2);
+static herr_t H5B2__test_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5B2__test_encode(uint8_t *raw, const void *nrecord, void *ctx);
 static herr_t H5B2__test_decode(const uint8_t *raw, void *nrecord, void *ctx);
 static herr_t H5B2__test_debug(FILE *stream, int indent, int fwidth,
     const void *record, const void *_udata);
-static void *H5B2__test_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+
+/* v2 B-tree driver callbacks for 'test2' B-trees */
+static herr_t H5B2__test2_store(void *nrecord, const void *udata);
+static herr_t H5B2__test2_compare(const void *rec1, const void *rec2, int *result);
+static herr_t H5B2__test2_encode(uint8_t *raw, const void *nrecord, void *ctx);
+static herr_t H5B2__test2_decode(const uint8_t *raw, void *nrecord, void *ctx);
+static herr_t H5B2__test2_debug(FILE *stream, int indent, int fwidth,
+    const void *record, const void *_udata);
 
 
 /*********************/
 /* Package Variables */
 /*********************/
 
+/* Class structure for testing simple B-tree records */
 const H5B2_class_t H5B2_TEST[1]={{   /* B-tree class information */
     H5B2_TEST_ID,               /* Type of B-tree */
     "H5B2_TEST_ID",             /* Name of B-tree class */
@@ -86,9 +95,21 @@ const H5B2_class_t H5B2_TEST[1]={{   /* B-tree class information */
     H5B2__test_compare,          /* Record comparison callback */
     H5B2__test_encode,           /* Record encoding callback */
     H5B2__test_decode,           /* Record decoding callback */
-    H5B2__test_debug,            /* Record debugging callback */
-    H5B2__test_crt_dbg_context,  /* Create debugging context */
-    H5B2__test_dst_context       /* Destroy debugging context */
+    H5B2__test_debug             /* Record debugging callback */
+}};
+
+/* Class structure for testing key/value B-tree records */
+const H5B2_class_t H5B2_TEST2[1]={{   /* B-tree class information */
+    H5B2_TEST2_ID,               /* Type of B-tree */
+    "H5B2_TEST2_ID",             /* Name of B-tree class */
+    sizeof(H5B2_test_rec_t),     /* Size of native record */
+    H5B2__test_crt_context,      /* Create client callback context */
+    H5B2__test_dst_context,      /* Destroy client callback context */
+    H5B2__test2_store,           /* Record storage callback */
+    H5B2__test2_compare,         /* Record comparison callback */
+    H5B2__test2_encode,          /* Record encoding callback */
+    H5B2__test2_decode,          /* Record decoding callback */
+    H5B2__test2_debug            /* Record debugging callback */
 }};
 
 
@@ -215,11 +236,13 @@ H5B2__test_store(void *nrecord, const void *udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5B2__test_compare(const void *rec1, const void *rec2)
+H5B2__test_compare(const void *rec1, const void *rec2, int *result)
 {
     FUNC_ENTER_STATIC_NOERR
 
-    FUNC_LEAVE_NOAPI((herr_t)(*(const hssize_t *)rec1 - *(const hssize_t *)rec2))
+    *result = (int)(*(const hssize_t *)rec1 - *(const hssize_t *)rec2);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5B2__test_compare() */
 
 

@@ -310,42 +333,141 @@ H5B2__test_debug(FILE *stream, int indent, int fwidth, const void *record,
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5B2__test_crt_dbg_context
+ * Function:	H5B2__test2_store
  *
- * Purpose:	Create context for debugging callback
+ * Purpose:	Store native information into record for B-tree
  *
- * Return:	Success:	non-NULL
- *		Failure:	NULL
+ * Return:	Success:	non-negative
+ *		Failure:	negative
  *
  * Programmer:	Quincey Koziol
- *              Tuesday, December 1, 2009
+ *              Friday, December 25, 2015
  *
  *-------------------------------------------------------------------------
  */
-static void *
-H5B2__test_crt_dbg_context(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t H5_ATTR_UNUSED addr)
+static herr_t
+H5B2__test2_store(void *nrecord, const void *udata)
 {
-    H5B2_test_ctx_t *ctx;       /* Callback context structure */
-    void *ret_value = NULL;     /* Return value */
+    FUNC_ENTER_STATIC_NOERR
 
-    FUNC_ENTER_STATIC
+    *(H5B2_test_rec_t *)nrecord = *(const H5B2_test_rec_t *)udata;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2__test2_store() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2__test2_compare
+ *
+ * Purpose:	Compare two native information records, according to some key
+ *
+ * Return:	<0 if rec1 < rec2
+ *              =0 if rec1 == rec2
+ *              >0 if rec1 > rec2
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2__test2_compare(const void *rec1, const void *rec2, int *result)
+{
+    FUNC_ENTER_STATIC_NOERR
+
+    *result = (int)(((const H5B2_test_rec_t *)rec1)->key - ((const H5B2_test_rec_t *)rec2)->key);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2__test2_compare() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2__test2_encode
+ *
+ * Purpose:	Encode native information into raw form for storing on disk
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2__test2_encode(uint8_t *raw, const void *nrecord, void *_ctx)
+{
+    H5B2_test_ctx_t *ctx = (H5B2_test_ctx_t *)_ctx;       /* Callback context structure */
+
+    FUNC_ENTER_STATIC_NOERR
 
     /* Sanity check */
-    HDassert(f);
+    HDassert(ctx);
 
-    /* Allocate callback context */
-    if(NULL == (ctx = H5FL_MALLOC(H5B2_test_ctx_t)))
-        HGOTO_ERROR(H5E_BTREE, H5E_CANTALLOC, NULL, "can't allocate callback context")
+    H5F_ENCODE_LENGTH_LEN(raw, ((const H5B2_test_rec_t *)nrecord)->key, ctx->sizeof_size);
+    H5F_ENCODE_LENGTH_LEN(raw, ((const H5B2_test_rec_t *)nrecord)->val, ctx->sizeof_size);
 
-    /* Determine the size of addresses & lengths in the file */
-    ctx->sizeof_size = H5F_SIZEOF_SIZE(f);
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2__test2_encode() */
 
-    /* Set return value */
-    ret_value = ctx;
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2__test2_decode
+ *
+ * Purpose:	Decode raw disk form of record into native form
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2__test2_decode(const uint8_t *raw, void *nrecord, void *_ctx)
+{
+    H5B2_test_ctx_t *ctx = (H5B2_test_ctx_t *)_ctx;       /* Callback context structure */
 
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* H5B2__test_crt_dbg_context() */
+    FUNC_ENTER_STATIC_NOERR
+
+    /* Sanity check */
+    HDassert(ctx);
+
+    H5F_DECODE_LENGTH_LEN(raw, ((H5B2_test_rec_t *)nrecord)->key, ctx->sizeof_size);
+    H5F_DECODE_LENGTH_LEN(raw, ((H5B2_test_rec_t *)nrecord)->val, ctx->sizeof_size);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2__test2_decode() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5B2__test2_debug
+ *
+ * Purpose:	Debug native form of record
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2__test2_debug(FILE *stream, int indent, int fwidth, const void *record,
+    const void H5_ATTR_UNUSED *_udata)
+{
+    FUNC_ENTER_STATIC_NOERR
+
+    HDassert(record);
+
+    HDfprintf(stream, "%*s%-*s (%Hu, %Hu)\n", indent, "", fwidth, "Record:",
+        ((const H5B2_test_rec_t *)record)->key,
+        ((const H5B2_test_rec_t *)record)->val);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2__test2_debug() */
 
 

 /*-------------------------------------------------------------------------
@@ -445,7 +567,10 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
         } /* end if */
 
         /* Locate node pointer for child */
-        cmp = H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, 
+                               udata, &idx, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
+
         if(cmp > 0)
             idx++;
 
@@ -496,7 +621,9 @@ H5B2_get_node_info_test(H5B2_t *bt2, hid_t dxpl_id, void *udata,
         } /* end if */
 
         /* Locate record */
-        cmp = H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
+        if(H5B2__locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, 
+                               udata, &idx, &cmp) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
 
         /* Unlock current node */
         if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
diff --git a/src/H5Bcache.c b/src/H5Bcache.c
index 73136b4..2036257 100644
--- a/src/H5Bcache.c
+++ b/src/H5Bcache.c
@@ -353,10 +353,8 @@ H5B__serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNUSED len,
     /* Sanity check */
     HDassert((size_t)(image - (uint8_t *)_image) <= len);
 
-#ifdef H5_CLEAR_MEMORY
     /* Clear rest of node */
     HDmemset(image, 0, len - (size_t)(image - (uint8_t *)_image));
-#endif /* H5_CLEAR_MEMORY */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5C.c b/src/H5C.c
index c90116e..211cf2d 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -94,7 +94,6 @@
 #include "H5MFprivate.h"	/* File memory management		*/
 #include "H5MMprivate.h"	/* Memory management			*/
 #include "H5Pprivate.h"         /* Property lists                       */
-#include "H5SLprivate.h"	/* Skip lists				*/
 
 
 /****************/
@@ -193,7 +192,7 @@ static herr_t H5C_verify_len_eoa (H5F_t *f,
 				  size_t *len, 
 				  htri_t actual);
 
-static herr_t H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr, 
+static herr_t H5C__generate_image(const H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr, 
                                   hid_t dxpl_id, int64_t *entry_size_change_ptr);
 
 #if H5C_DO_TAGGING_SANITY_CHECKS
@@ -244,6 +243,9 @@ H5FL_DEFINE_STATIC(H5C_t);
 /* Declare a free list to manage flush dependency arrays */
 H5FL_BLK_DEFINE_STATIC(parent);
 
+/* Declare extern free list to manage the H5C_collective_write_t struct */
+H5FL_EXTERN(H5C_collective_write_t);
+
 /* Declare a free list to manage corked object addresses */
 H5FL_DEFINE_STATIC(haddr_t);
 
@@ -1127,7 +1129,7 @@ H5C_expunge_entry(H5F_t *f, hid_t dxpl_id, const H5C_class_t *type,
     flush_flags |= H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG;
 
     if(H5C__flush_single_entry(f, dxpl_id, entry_ptr, flush_flags, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "H5C_flush_single_entry() failed.")
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, "can't flush entry")
 
 #if H5C_DO_SANITY_CHECKS
     if ( entry_was_dirty )
@@ -2211,14 +2213,13 @@ H5C_insert_entry(H5F_t *             f,
                  void *		     thing,
                  unsigned int        flags)
 {
-    H5C_t              *cache_ptr;
-    H5P_genplist_t     *dxpl;
+    H5C_t               *cache_ptr;
+    H5P_genplist_t      *dxpl;
     H5AC_ring_t         ring = H5C_RING_UNDEFINED;
     hbool_t		insert_pinned;
     hbool_t             flush_last;
 #ifdef H5_HAVE_PARALLEL
     hbool_t             coll_access = FALSE; /* whether access to the cache entry is done collectively */
-    hbool_t             flush_collectively;
 #endif /* H5_HAVE_PARALLEL */
     hbool_t             set_flush_marker;
     hbool_t		write_permitted = TRUE;
@@ -2256,9 +2257,6 @@ H5C_insert_entry(H5F_t *             f,
     set_flush_marker   = ( (flags & H5C__SET_FLUSH_MARKER_FLAG) != 0 );
     insert_pinned      = ( (flags & H5C__PIN_ENTRY_FLAG) != 0 );
     flush_last         = ( (flags & H5C__FLUSH_LAST_FLAG) != 0 );
-#ifdef H5_HAVE_PARALLEL
-    flush_collectively = ( (flags & H5C__FLUSH_COLLECTIVELY_FLAG) != 0 );
-#endif /* H5_HAVE_PARALLEL */
 
     /* Get the dataset transfer property list */
     if(NULL == (dxpl = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
@@ -2307,9 +2305,6 @@ H5C_insert_entry(H5F_t *             f,
     entry_ptr->pinned_from_client = insert_pinned;
     entry_ptr->pinned_from_cache = FALSE;
     entry_ptr->flush_me_last = flush_last;
-#ifdef H5_HAVE_PARALLEL
-    entry_ptr->flush_me_collectively = flush_collectively;
-#endif
 
     /* newly inserted entries are assumed to be dirty */
     entry_ptr->is_dirty = TRUE;
@@ -2367,8 +2362,10 @@ H5C_insert_entry(H5F_t *             f,
     entry_ptr->aux_next = NULL;
     entry_ptr->aux_prev = NULL;
 
+#ifdef H5_HAVE_PARALLEL
     entry_ptr->coll_next = NULL;
     entry_ptr->coll_prev = NULL;
+#endif /* H5_HAVE_PARALLEL */
 
     H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
 
@@ -2495,19 +2492,18 @@ H5C_insert_entry(H5F_t *             f,
 
         /* Make sure the size of the collective entries in the cache remain in check */
         if(H5P_USER_TRUE == f->coll_md_read) {
-            if(cache_ptr->max_cache_size*80 < cache_ptr->coll_list_size*100) {
-                if(H5C_clear_coll_entries(cache_ptr, 1) < 0)
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5C_clear_coll_entries() failed.")
+            if(cache_ptr->max_cache_size * 80 < cache_ptr->coll_list_size * 100) {
+                if(H5C_clear_coll_entries(cache_ptr, TRUE) < 0)
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear collective metadata entries")
             } /* end if */
         } /* end if */
         else {
-            if(cache_ptr->max_cache_size*40 < cache_ptr->coll_list_size*100) {
-                if(H5C_clear_coll_entries(cache_ptr, 1) < 0)
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "H5C_clear_coll_entries() failed.")
+            if(cache_ptr->max_cache_size * 40 < cache_ptr->coll_list_size * 100) {
+                if(H5C_clear_coll_entries(cache_ptr, TRUE) < 0)
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear collective metadata entries")
             } /* end if */
         } /* end else */
     } /* end if */
-    entry_ptr->ind_access_while_coll = FALSE;
 #endif
 
 done:
@@ -3107,10 +3103,10 @@ done:
  *		This allows H5C_protect to accept flags other than 
  *		H5C__READ_ONLY_FLAG.  
  *
- *		Added support for the H5C__FLUSH_LAST_FLAG and 
- *		H5C__FLUSH_COLLECTIVELY_FLAG flags.  At present, these 
- *		flags are only applied if the entry is not in cache, and 
- *		is loaded into the cache as a result of this call.
+ *		Added support for the H5C__FLUSH_LAST_FLAG.
+ *		At present, this flag is only applied if the entry is 
+ *              not in cache, and is loaded into the cache as a result of 
+ *              this call.
  *
  *-------------------------------------------------------------------------
  */
@@ -3123,20 +3119,19 @@ H5C_protect(H5F_t *		f,
 	    unsigned		flags)
 {
     H5C_t *		cache_ptr;
-    H5P_genplist_t      *dxpl;
     H5AC_ring_t         ring = H5C_RING_UNDEFINED;
     hbool_t		hit;
     hbool_t		have_write_permitted = FALSE;
     hbool_t		read_only = FALSE;
     hbool_t             flush_last;
 #ifdef H5_HAVE_PARALLEL
-    hbool_t             flush_collectively;
     hbool_t             coll_access = FALSE; /* whether access to the cache entry is done collectively */
 #endif /* H5_HAVE_PARALLEL */
     hbool_t		write_permitted;
     size_t		empty_space;
     void *		thing;
     H5C_cache_entry_t *	entry_ptr;
+    H5P_genplist_t    * dxpl;    /* dataset transfer property list */
     void *		ret_value = NULL;       /* Return value */
 
     FUNC_ENTER_NOAPI(NULL)
@@ -3164,9 +3159,6 @@ H5C_protect(H5F_t *		f,
 
     read_only          = ( (flags & H5C__READ_ONLY_FLAG) != 0 );
     flush_last         = ( (flags & H5C__FLUSH_LAST_FLAG) != 0 );
-#ifdef H5_HAVE_PARALLEL
-    flush_collectively = ( (flags & H5C__FLUSH_COLLECTIVELY_FLAG) != 0 );
-#endif /* H5_HAVE_PARALLEL */
 
     /* Get the dataset transfer property list */
     if(NULL == (dxpl = (H5P_genplist_t *)H5I_object_verify(dxpl_id, H5I_GENPROP_LST)))
@@ -3210,52 +3202,52 @@ H5C_protect(H5F_t *		f,
            the entry in their cache still have to participate in the
            bcast. */
 #ifdef H5_HAVE_PARALLEL
-        if(H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI) && coll_access && 
-                !(entry_ptr->is_dirty) && !(entry_ptr->coll_access)) {
-            MPI_Comm  comm;           /* File MPI Communicator */
-            int       mpi_code;       /* MPI error code */
-            int       buf_size;
+        if(H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI) && coll_access) {
+            if(!(entry_ptr->is_dirty) && !(entry_ptr->coll_access)) {
+                MPI_Comm  comm;           /* File MPI Communicator */
+                int       mpi_code;       /* MPI error code */
+                int       buf_size;
 
-            if(MPI_COMM_NULL == (comm = H5F_mpi_get_comm(f)))
-                HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "get_comm request failed")
+                if(MPI_COMM_NULL == (comm = H5F_mpi_get_comm(f)))
+                    HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "get_comm request failed")
 
-            if(entry_ptr->image_ptr == NULL) {
-                int mpi_rank;
-                size_t image_size;
+                if(entry_ptr->image_ptr == NULL) {
+                    int mpi_rank;
+                    size_t image_size;
 
-                if((mpi_rank = H5F_mpi_get_rank(f)) < 0)
-                    HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "Can't get MPI rank")
+                    if((mpi_rank = H5F_mpi_get_rank(f)) < 0)
+                        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "Can't get MPI rank")
 
-                if(entry_ptr->compressed)
-                    image_size = entry_ptr->compressed_size;
-                else
-                    image_size = entry_ptr->size;
-                HDassert(image_size > 0);
+                    if(entry_ptr->compressed)
+                        image_size = entry_ptr->compressed_size;
+                    else
+                        image_size = entry_ptr->size;
+                    HDassert(image_size > 0);
 
-                if(NULL == (entry_ptr->image_ptr = H5MM_malloc(image_size + H5C_IMAGE_EXTRA_SPACE)))
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "memory allocation failed for on disk image buffer")
+                    if(NULL == (entry_ptr->image_ptr = H5MM_malloc(image_size + H5C_IMAGE_EXTRA_SPACE)))
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "memory allocation failed for on disk image buffer")
 #if H5C_DO_MEMORY_SANITY_CHECKS
-                HDmemcpy(((uint8_t *)entry_ptr->image_ptr) + image_size, 
-                         H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
+                    HDmemcpy(((uint8_t *)entry_ptr->image_ptr) + image_size, 
+                             H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
 #endif /* H5C_DO_MEMORY_SANITY_CHECKS */
-                if(0 == mpi_rank)
-                    if(H5C__generate_image(f, cache_ptr, entry_ptr, dxpl_id, NULL) < 0)
-                        HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "Can't get Image")
-            } /* end if */
-
-            HDassert(entry_ptr->image_ptr);
-
-            H5_CHECKED_ASSIGN(buf_size, int, entry_ptr->size, size_t);
-            if(MPI_SUCCESS != (mpi_code = MPI_Bcast(entry_ptr->image_ptr, buf_size, MPI_BYTE, 0, comm)))
-                HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+                    if(0 == mpi_rank)
+                        if(H5C__generate_image(f, cache_ptr, entry_ptr, dxpl_id, NULL) < 0)
+                            HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "can't generate entry's image")
+                } /* end if */
+                HDassert(entry_ptr->image_ptr);
 
-            entry_ptr->coll_access = TRUE;
+                H5_CHECKED_ASSIGN(buf_size, int, entry_ptr->size, size_t);
+                if(MPI_SUCCESS != (mpi_code = MPI_Bcast(entry_ptr->image_ptr, buf_size, MPI_BYTE, 0, comm)))
+                    HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
 
-            H5C__INSERT_IN_COLL_LIST(cache_ptr, entry_ptr, NULL)
+                /* Mark the entry as collective and insert into the collective list */
+                entry_ptr->coll_access = TRUE;
+                H5C__INSERT_IN_COLL_LIST(cache_ptr, entry_ptr, NULL)
+            } /* end if */
+            else if(entry_ptr->coll_access) {
+                H5C__MOVE_TO_TOP_IN_COLL_LIST(cache_ptr, entry_ptr, NULL)
+            } /* end else-if */
         } /* end if */
-        else if(H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI) && coll_access && entry_ptr->coll_access) {
-            H5C__MOVE_TO_TOP_IN_COLL_LIST(cache_ptr, entry_ptr, NULL)
-        } /* end else-if */
 #endif /* H5_HAVE_PARALLEL */
 
 #if H5C_DO_TAGGING_SANITY_CHECKS
@@ -3290,16 +3282,12 @@ H5C_protect(H5F_t *		f,
 
         hit = FALSE;
 
-        thing = H5C_load_entry(f, dxpl_id, 
+        if(NULL == (thing = H5C_load_entry(f, dxpl_id, 
 #ifdef H5_HAVE_PARALLEL
-                               coll_access, 
+                                           coll_access, 
 #endif /* H5_HAVE_PARALLEL */
-                               type, addr, udata);
-
-        if ( thing == NULL ) {
-
+                                           type, addr, udata)))
             HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "can't load entry")
-        }
 
         entry_ptr = (H5C_cache_entry_t *)thing;
         entry_ptr->ring  = ring;
@@ -3308,8 +3296,6 @@ H5C_protect(H5F_t *		f,
             H5C__INSERT_IN_COLL_LIST(cache_ptr, entry_ptr, NULL)
 #endif /* H5_HAVE_PARALLEL */
 
-        entry_ptr->ring  = ring;
-
         /* Apply tag to newly protected entry */
         if(H5C_tag_entry(cache_ptr, entry_ptr, dxpl_id) < 0)
             HGOTO_ERROR(H5E_CACHE, H5E_CANTTAG, NULL, "Cannot tag metadata entry")
@@ -3414,20 +3400,16 @@ H5C_protect(H5F_t *		f,
          *
          *   *******************************************
          *
-         * Set the flush_last (and possibly flush_collectively) fields 
+         * Set the flush_last field
  	 * of the newly loaded entry before inserting it into the 
          * index.  Must do this, as the index tracked the number of 
          * entries with the flush_last field set, but assumes that 
          * the field will not change after insertion into the index.
          *
-         * Note that this means that the H5C__FLUSH_LAST_FLAG and 
-         * H5C__FLUSH_COLLECTIVELY_FLAG flags are ignored if the 
-         * entry is already in cache.
+         * Note that this means that the H5C__FLUSH_LAST_FLAG flag 
+         * is ignored if the entry is already in cache.
          */
         entry_ptr->flush_me_last = flush_last;
-#ifdef H5_HAVE_PARALLEL
-        entry_ptr->flush_me_collectively = flush_collectively;
-#endif
 
         H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, NULL)
 
@@ -3564,16 +3546,16 @@ H5C_protect(H5F_t *		f,
 #ifdef H5_HAVE_PARALLEL
     if(H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
         /* Make sure the size of the collective entries in the cache remain in check */
-        if(TRUE == coll_access) {
+        if(coll_access) {
             if(H5P_USER_TRUE == f->coll_md_read) {
                 if(cache_ptr->max_cache_size * 80 < cache_ptr->coll_list_size * 100)
-                    if(H5C_clear_coll_entries(cache_ptr, 1) < 0)
-                        HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "H5C_clear_coll_entries() failed.")
+                    if(H5C_clear_coll_entries(cache_ptr, TRUE) < 0)
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "can't clear collective metadata entries")
             } /* end if */
             else {
                 if(cache_ptr->max_cache_size * 40 < cache_ptr->coll_list_size * 100)
-                    if(H5C_clear_coll_entries(cache_ptr, 1) < 0)
-                        HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, NULL, "H5C_clear_coll_entries() failed.")
+                    if(H5C_clear_coll_entries(cache_ptr, TRUE) < 0)
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "can't clear collective metadata entries")
             } /* end else */
         } /* end if */
     } /* end if */
@@ -7399,7 +7381,6 @@ H5C_flush_invalidate_ring(const H5F_t * f, hid_t dxpl_id, H5C_ring_t ring,
 
                     if(H5C__flush_single_entry(f, dxpl_id, entry_ptr, H5C__NO_FLAGS_SET, entry_size_change_ptr, NULL) < 0)
                         HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty pinned entry flush failed.")
-
 #if H5C_DO_SANITY_CHECKS
                     /* entry size may have changed during the flush.
                      * Update flushed_slist_size to account for this.
@@ -7437,11 +7418,10 @@ H5C_flush_invalidate_ring(const H5F_t * f, hid_t dxpl_id, H5C_ring_t ring,
                     entry_size_change = 0;
 #endif /* H5C_DO_SANITY_CHECKS */
 
-                    if(H5C__flush_single_entry(f, dxpl_id, entry_ptr,
+                    if(H5C__flush_single_entry(f, dxpl_id, entry_ptr, 
                                 (cooked_flags | H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG), 
-                                               entry_size_change_ptr, NULL) < 0)
+                                entry_size_change_ptr, NULL) < 0)
                         HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "dirty entry flush destroy failed.")
-
 #if H5C_DO_SANITY_CHECKS
                     /* entry size may have changed during the flush.
                      * Update flushed_slist_size to account for this.
@@ -7552,7 +7532,7 @@ H5C_flush_invalidate_ring(const H5F_t * f, hid_t dxpl_id, H5C_ring_t ring,
                         entry_was_dirty = entry_ptr->is_dirty;
 
                         if(H5C__flush_single_entry(f, dxpl_id, entry_ptr, 
-                                (cooked_flags | H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG),
+                                (cooked_flags | H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG), 
                                 NULL, NULL) < 0)
                             HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Entry flush destroy failed.")
 
@@ -8051,7 +8031,11 @@ done:
  */
 herr_t
 H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_ptr,
-    unsigned flags, int64_t *entry_size_change_ptr, H5SL_t *collective_write_list)
+    unsigned flags, int64_t *entry_size_change_ptr, H5SL_t
+#ifndef H5_HAVE_PARALLEL
+    H5_ATTR_UNUSED
+#endif /* NDEBUG */
+    *collective_write_list)
 {
     H5C_t *	     	cache_ptr;              /* Cache for file */
     hbool_t		destroy;		/* external flag */
@@ -8062,10 +8046,7 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
     hbool_t		write_entry;		/* internal flag */
     hbool_t		destroy_entry;		/* internal flag */
     hbool_t		was_dirty;
-    haddr_t		new_addr = HADDR_UNDEF;
-    haddr_t		old_addr = HADDR_UNDEF;
-    size_t		new_len = 0;
-    size_t		new_compressed_len = 0;
+    haddr_t             entry_addr = HADDR_UNDEF;
     herr_t		ret_value = SUCCEED;      /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -8148,34 +8129,8 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
     entry_ptr->flush_in_progress = TRUE;
     entry_ptr->flush_marker = FALSE;
 
-#ifdef H5_HAVE_PARALLEL
-#ifndef NDEBUG
-    /* If MPI based VFD is used, do special parallel I/O sanity checks.
-     * Note that we only do these sanity checks when the clear_only flag
-     * is not set, and the entry to be flushed is dirty.  Don't bother
-     * otherwise as no file I/O can result.
-     */
-    if(!clear_only && entry_ptr->is_dirty && H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
-        H5P_genplist_t *dxpl;       /* Dataset transfer property list */
-        unsigned coll_meta;         /* Collective metadata write flag */
-
-        /* Get the dataset transfer property list */
-        if(NULL == (dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
-            HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
-
-        /* Get the collective metadata write property */
-        if(H5P_get(dxpl, H5AC_COLLECTIVE_META_WRITE_NAME, &coll_meta) < 0)
-            HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't retrieve xfer mode")
-
-        /* Sanity check collective metadata write flag */
-        HDassert(coll_meta);
-    } /* end if */
-#endif /* NDEBUG */
-#endif /* H5_HAVE_PARALLEL */
-
     /* serialize the entry if necessary, and then write it to disk. */
     if(write_entry) {
-        unsigned serialize_flags = H5C__SERIALIZE_NO_FLAGS_SET;
 
 	/* The entry is dirty, and we are doing either a flush,
 	 * or a flush destroy.  In either case, serialize the
@@ -8215,225 +8170,9 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
         } /* end if */
 
         if(!(entry_ptr->image_up_to_date)) {
-            /* reset cache_ptr->slist_changed so we can detect slist
-             * modifications in the pre_serialize call.
-             */
-            cache_ptr->slist_changed = FALSE;
-
-            /* make note of the entry's current address */
-            old_addr = entry_ptr->addr;
-
-            /* Call client's pre-serialize callback, if there's one */
-            if ( ( entry_ptr->type->pre_serialize != NULL ) && 
-                 ( (entry_ptr->type->pre_serialize)(f, dxpl_id, 
-                                                    (void *)entry_ptr,
-                                                    entry_ptr->addr, 
-                                                    entry_ptr->size,
-						    entry_ptr->compressed_size,
-                                                    &new_addr, &new_len, 
-                                                    &new_compressed_len,
-                                                    &serialize_flags) < 0 ) )
-                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to pre-serialize entry")
-
-            /* set cache_ptr->slist_change_in_pre_serialize if the 
-             * slist was modified.
-             */
-            if(cache_ptr->slist_changed)
-                cache_ptr->slist_change_in_pre_serialize = TRUE;
-
-            /* Check for any flags set in the pre-serialize callback */
-            if(serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) {
-                /* Check for unexpected flags from serialize callback */
-                if(serialize_flags & ~(H5C__SERIALIZE_RESIZED_FLAG | 
-                                       H5C__SERIALIZE_MOVED_FLAG |
-                                       H5C__SERIALIZE_COMPRESSED_FLAG))
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unknown serialize flag(s)")
-#ifdef H5_HAVE_PARALLEL
-                /* In the parallel case, resizes and moves in
-                 * the serialize operation can cause problems.
-                 * If they occur, scream and die.
-                 *
-                 * At present, in the parallel case, the aux_ptr
-                 * will only be set if there is more than one
-                 * process.  Thus we can use this to detect
-                 * the parallel case.
-                 *
-                 * This works for now, but if we start using the
-                 * aux_ptr for other purposes, we will have to
-                 * change this test accordingly.
-                 *
-                 * NB: While this test detects entryies that attempt
-                 *     to resize or move themselves during a flush
-                 *     in the parallel case, it will not detect an
-                 *     entry that dirties, resizes, and/or moves
-                 *     other entries during its flush.
-                 *
-                 *     From what Quincey tells me, this test is
-                 *     sufficient for now, as any flush routine that
-                 *     does the latter will also do the former.
-                 *
-                 *     If that ceases to be the case, further
-                 *     tests will be necessary.
-                 */
-                if(cache_ptr->aux_ptr != NULL)
-                    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "resize/move in serialize occured in parallel case.")
-#endif /* H5_HAVE_PARALLEL */
-
-                /* Resize the buffer if required */
-                if ( ( ( ! entry_ptr->compressed ) &&
-                       ( serialize_flags & H5C__SERIALIZE_RESIZED_FLAG ) ) ||
-                     ( ( entry_ptr->compressed ) &&
-                       ( serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG ) ) )
-                {
-                    size_t new_image_size;
-
-            	    if(entry_ptr->compressed)
-                        new_image_size = new_compressed_len;
-                    else
-                        new_image_size = new_len;
-                    HDassert(new_image_size > 0);
-
-                    /* Release the current image */
-                    if(entry_ptr->image_ptr)
-                        entry_ptr->image_ptr = H5MM_xfree(entry_ptr->image_ptr);
-
-                    /* Allocate a new image buffer */
-                    if(NULL == (entry_ptr->image_ptr = H5MM_malloc(new_image_size + H5C_IMAGE_EXTRA_SPACE)))
-                        HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for on disk image buffer")
-#if H5C_DO_MEMORY_SANITY_CHECKS
-                    HDmemcpy(((uint8_t *)entry_ptr->image_ptr) + new_image_size, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
-#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
-                } /* end if */
-
-		/* If required, update the entry and the cache data structures
-                 * for a resize.
-		 */
-                if(serialize_flags & H5C__SERIALIZE_RESIZED_FLAG) {
-                    H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, \
-                                                            entry_ptr, new_len)
-
-                    /* update the hash table for the size change*/
-                    H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, \
-                                                      entry_ptr->size, \
-                                                      new_len, entry_ptr, \
-                                                      !(entry_ptr->is_dirty));
-
-                    /* The entry can't be protected since we are
-                     * in the process of flushing it.  Thus we must
-                     * update the replacement policy data
-                     * structures for the size change.  The macro
-                     * deals with the pinned case.
-                     */
-                    H5C__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
-
-                    /* as we haven't updated the cache data structures for 
-                     * for the flush or flush destroy yet, the entry should
-                     * be in the slist.  Thus update it for the size change.
-                     */
-		    HDassert(entry_ptr->in_slist);
-                    H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, \
-                                                      new_len)
-
-		    /* if defined, update *entry_size_change_ptr for the 
-                     * change in entry size.
-                     */
-                    if(entry_size_change_ptr != NULL)
-                        *entry_size_change_ptr = (int64_t)new_len - (int64_t)(entry_ptr->size);
-
-                    /* finally, update the entry for its new size */
-                    entry_ptr->size = new_len;
-                } /* end if */
-
-                /* If required, udate the entry and the cache data structures 
-                 * for a move 
-                 */
-                if(serialize_flags & H5C__SERIALIZE_MOVED_FLAG) {
-#if H5C_DO_SANITY_CHECKS
-                    int64_t saved_slist_len_increase;
-                    int64_t saved_slist_size_increase;
-#endif /* H5C_DO_SANITY_CHECKS */
-
-                    H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr)
-
-                    if(entry_ptr->addr == old_addr) {
-                        /* we must update cache data structures for the 
-                         * change in address.
-                         */
-
-                        /* delete the entry from the hash table and the slist */
-                        H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
-                        H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
-
-		        /* update the entry for its new address */
-                        entry_ptr->addr = new_addr;
-
-		        /* and then reinsert in the index and slist */
-                        H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
-
-#if H5C_DO_SANITY_CHECKS
-		        /* save cache_ptr->slist_len_increase and 
-                         * cache_ptr->slist_size_increase before the 
-                         * reinsertion into the slist, and restore 
-                         * them afterwards to avoid skewing our sanity
-                         * checking.
-                         */
-                        saved_slist_len_increase = cache_ptr->slist_len_increase;
-                        saved_slist_size_increase = cache_ptr->slist_size_increase;
-#endif /* H5C_DO_SANITY_CHECKS */
-
-                        H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
-
-#if H5C_DO_SANITY_CHECKS
-                        cache_ptr->slist_len_increase = saved_slist_len_increase;
-                        cache_ptr->slist_size_increase = saved_slist_size_increase;
-#endif /* H5C_DO_SANITY_CHECKS */
-                    }
-                    else /* move is alread done for us -- just do sanity checks */
-                        HDassert(entry_ptr->addr == new_addr);
-                } /* end if */
-
-                if(serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG) {
-		    /* just save the new compressed entry size in 
-                     * entry_ptr->compressed_size.  We don't need to 
- 		     * do more, as compressed size is only used for I/O.
-                     */
-                    HDassert(entry_ptr->compressed);
-                    entry_ptr->compressed_size = new_compressed_len;
-                }
-            } /* end if ( serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET ) */
-
-            /* Serialize object into buffer */
-            {
-                size_t image_len;
-
-                if(entry_ptr->compressed)
-                    image_len = entry_ptr->compressed_size;
-                else
-                    image_len = entry_ptr->size;
-
-                /* reset cache_ptr->slist_changed so we can detect slist
-                 * modifications in the serialize call.
-                 */
-                cache_ptr->slist_changed = FALSE;
-
-            
-                if(entry_ptr->type->serialize(f, entry_ptr->image_ptr, 
-                                                image_len, (void *)entry_ptr) < 0)
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to serialize entry")
-
-                /* set cache_ptr->slist_change_in_serialize if the 
-                 * slist was modified.
-                 */
-                if(cache_ptr->slist_changed)
-                    cache_ptr->slist_change_in_pre_serialize = TRUE;
-
-#if H5C_DO_MEMORY_SANITY_CHECKS
-                HDassert(0 == HDmemcmp(((uint8_t *)entry_ptr->image_ptr) + image_len, 
-                                       H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE));
-#endif /* H5C_DO_MEMORY_SANITY_CHECKS */
-
-                entry_ptr->image_up_to_date = TRUE;
-            }
+            /* Generate the entry's image */
+            if(H5C__generate_image(f, cache_ptr, entry_ptr, dxpl_id, entry_size_change_ptr) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTGET, FAIL, "can't generate entry's image")
         } /* end if ( ! (entry_ptr->image_up_to_date) ) */
 
         /* Finally, write the image to disk.  
@@ -8459,10 +8198,10 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
 
 #ifdef H5_HAVE_PARALLEL
             if(collective_write_list) {
-                H5C_collective_write_t *item = NULL;
+                H5C_collective_write_t *item;
 
-                if(NULL == (item = (H5C_collective_write_t *)H5MM_malloc(sizeof(H5C_collective_write_t))))
-                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate skip list item")
+                if(NULL == (item = (H5C_collective_write_t *)H5FL_MALLOC(H5C_collective_write_t)))
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "unable to allocate skip list item")
 
                 item->length = image_size;
                 item->free_buf = FALSE;
@@ -8471,7 +8210,7 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
 
                 if(H5SL_insert(collective_write_list, item, &item->offset) < 0) {
                     H5MM_free(item);
-                    HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "unable to insert skip list item")
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, "unable to insert skip list item")
                 } /* end if */
             } /* end if */
             else
@@ -8620,6 +8359,10 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
     /* reset the flush_in progress flag */
     entry_ptr->flush_in_progress = FALSE;
 
+    /* capture the cache entry address for the log_flush call at the
+       end before the entry_ptr gets freed */
+    entry_addr = entry_ptr->addr;
+
     /* Internal cache data structures should now be up to date, and 
      * consistant with the status of the entry.  
      *
@@ -8731,7 +8474,7 @@ H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id, H5C_cache_entry_t *entry_
     } /* if (destroy) */
 
     if(cache_ptr->log_flush)
-        if((cache_ptr->log_flush)(cache_ptr, entry_ptr->addr, was_dirty, flags) < 0)
+        if((cache_ptr->log_flush)(cache_ptr, entry_addr, was_dirty, flags) < 0)
             HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "log_flush callback failed.")
 
 done:
@@ -8750,16 +8493,16 @@ done:
  * Function:    H5C_verify_len_eoa
  *
  * Purpose:     Verify that 'len' does not exceed eoa when 'actual' is
- *		false i.e. 'len" is the initial speculative length from
- *		get_load_size callback with null image pointer.
- *		If exceed, adjust 'len' accordingly.
+ *              false i.e. 'len" is the initial speculative length from
+ *              get_load_size callback with null image pointer.
+ *              If exceed, adjust 'len' accordingly.
  *
- *		Verify that 'len' should not exceed eoa when 'actual' is
- *		true i.e. 'len' is the actual length from get_load_size 
- *		callback with non-null image pointer.
- *		If exceed, return error.
+ *              Verify that 'len' should not exceed eoa when 'actual' is
+ *              true i.e. 'len' is the actual length from get_load_size 
+ *              callback with non-null image pointer.
+ *              If exceed, return error.
  *
- *		The coding is copied and moved from H5C_load_entry().
+ *              The coding is copied and moved from H5C_load_entry().
  *
  * Return:      FAIL if error is detected, SUCCEED otherwise.
  *
@@ -8818,19 +8561,18 @@ done:
 
 } /* H5C_verify_len_eoa() */
 
-
 

 /*-------------------------------------------------------------------------
  *
  * Function:    H5C_load_entry
  *
  * Purpose:     Attempt to load the entry at the specified disk address
- *		and with the specified type into memory.  If successful.
- *		return the in memory address of the entry.  Return NULL
- *		on failure.
+ *              and with the specified type into memory.  If successful.
+ *              return the in memory address of the entry.  Return NULL
+ *              on failure.
  *
- *		Note that this function simply loads the entry into
- *		core.  It does not insert it into the cache.
+ *              Note that this function simply loads the entry into
+ *              core.  It does not insert it into the cache.
  *
  * Return:      Non-NULL on success / NULL on failure.
  *
@@ -8840,33 +8582,33 @@ done:
  */
 static void *
 H5C_load_entry(H5F_t *             f,
-               hid_t               dxpl_id,
+                hid_t               dxpl_id,
 #ifdef H5_HAVE_PARALLEL
-               hbool_t             coll_access,
+                hbool_t             coll_access,
 #endif /* H5_HAVE_PARALLEL */
-               const H5C_class_t * type,
-               haddr_t             addr,
-               void *              udata)
+                const H5C_class_t * type,
+                haddr_t             addr,
+                void *              udata)
 {
-    hbool_t		dirty = FALSE;  /* Flag indicating whether thing was dirtied during deserialize */
-    hbool_t		compressed = FALSE; /* flag indicating whether thing */
- 					/* will be run through filters on    */
-                                        /* on read and write.  Usually FALSE */
-					/* set to true if appropriate.       */
-    size_t		compressed_size = 0; /* entry compressed size if     */
-                                        /* known -- otherwise uncompressed.  */
-				        /* Zero indicates compression not    */
-                                        /* enabled.                          */
-    uint8_t *           image = NULL;   /* Buffer for disk image */
-    void *		thing = NULL;   /* Pointer to thing loaded */
-    H5C_cache_entry_t *	entry;          /* Alias for thing loaded, as cache entry */
-    size_t              len;            /* Size of image in file */
+    hbool_t     dirty = FALSE;          /* Flag indicating whether thing was dirtied during deserialize */
+    hbool_t     compressed = FALSE;     /* flag indicating whether thing            */
+                                        /* will be run through filters on           */
+                                        /* on read and write.  Usually FALSE        */
+                                        /* set to true if appropriate.              */
+    size_t      compressed_size = 0;    /* entry compressed size if                 */
+                                        /* known -- otherwise uncompressed.         */
+                                        /* Zero indicates compression not           */
+                                        /* enabled.                                 */
+    uint8_t *   image = NULL;           /* Buffer for disk image                    */
+    void *      thing = NULL;           /* Pointer to thing loaded                  */
+    H5C_cache_entry_t *entry = NULL;    /* Alias for thing loaded, as cache entry   */
+    size_t      len;                    /* Size of image in file                    */
 #ifdef H5_HAVE_PARALLEL
-    int                 mpi_rank;       /* MPI process rank */
-    MPI_Comm            comm;           /* File MPI Communicator */
-    int                 mpi_code;       /* MPI error code */
+    int         mpi_rank = 0;           /* MPI process rank                         */
+    MPI_Comm    comm = MPI_COMM_NULL;   /* File MPI Communicator                    */
+    int         mpi_code;               /* MPI error code                           */
 #endif /* H5_HAVE_PARALLEL */
-    void *		ret_value = NULL;       /* Return value */
+    void *      ret_value = NULL;       /* Return value                             */
 
     FUNC_ENTER_NOAPI_NOINIT
 
@@ -8903,71 +8645,10 @@ H5C_load_entry(H5F_t *             f,
     HDassert(len > 0);
 
     /* Check for possible speculative read off the end of the file */
-    if(type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG) {
-
-/* Quincey has added patches for eoa calculations -- leave the original
- * code around until we see the effect of these patches.
- *                                         JRM -- 1/1/15
- */
-#if 0 /* original code */ /* JRM */
-	/* the original version of this code has several problems:
-         *
-         * First, the sblock is not available until the sblock 
-         * has been read in, which causes a seg fault.  This is 
-         * dealt with easily enough by testing to see if 
-         * f->shared->sblock is NULL, and calling H5FD_get_base_addr()
-         * to obtain the base addr when it is.
-         *
-         * The second issue is more subtle.  H5F_get_eoa() calls 
-         * H5FD_get_eoa().  However, this function returns the EOA as 
-         * a relative address -- i.e. relative to the base address.
-         * This means that the base addr + addr < eoa sanity check will
-         * fail whenever the super block is not at address 0 when 
-         * reading in the first chunk of the super block.
-         * 
-         * To address these issues, I have rewritten the code to 
-         * simply verify that the address plus length is less than 
-         * the eoa.  I think this is sufficient, but further testing
-         * should tell me if it isn't.
-         *                                      JRM -- 8/29/14
-         */
-        haddr_t eoa;                /* End-of-allocation in the file */
-        haddr_t base_addr;          /* Base address of file data */
-
-        /* Get the file's end-of-allocation value */
-        eoa = H5F_get_eoa(f, type->mem_type);
-        HDassert(H5F_addr_defined(eoa));
-
-        /* Get the file's base address */
-	if ( f->shared->sblock ) 
-
-            base_addr = H5F_BASE_ADDR(f);
-
-	else { /* sblock not loaded yet -- use file driver info */
-
-	    HDassert(f->shared->lf);
-	    base_addr = H5FD_get_base_addr(f->shared->lf);
-
-	}
-        HDassert(H5F_addr_defined(base_addr));
-
-        /* Check for bad address in general */
-        if((addr + base_addr) > eoa)
-            HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, \
-	                "address of object past end of allocation")
-
-        /* Check if the amount of data to read will be past the eoa */
-        if((addr + base_addr + len) > eoa)
-            /* Trim down the length of the metadata */
-            len = (size_t)(eoa - (addr + base_addr));
-
-#else /* modified code */ /* JRM */
-
-	if(H5C_verify_len_eoa(f, type, addr, &len, FALSE) < 0)
+    if(type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG)
+        if(H5C_verify_len_eoa(f, type, addr, &len, FALSE) < 0)
             HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "invalid len with respect to EOA.")
 
-#endif /* modified code */ /* JRM */
-    }
     /* Allocate the buffer for reading the on-disk entry image */
     if(NULL == (image = (uint8_t *)H5MM_malloc(len + H5C_IMAGE_EXTRA_SPACE)))
         HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "memory allocation failed for on disk image buffer.")
@@ -8986,45 +8667,44 @@ H5C_load_entry(H5F_t *             f,
 #endif /* H5_HAVE_PARALLEL */
 
     /* Get the on-disk entry image */
-    if ( 0 == (type->flags & H5C__CLASS_SKIP_READS) ) {
-	unsigned tries, max_tries;  	/* The # of read attempts */
-	unsigned retries;           	/* The # of retries */
-	htri_t chk_ret;	 		/* return from verify_chksum callback */
-	size_t actual_len = len;
-	void *new_image;		/* Pointer to image */
-	
-	/* Get the # of read attempts */
-	max_tries = tries = H5F_GET_READ_ATTEMPTS(f);
-
-	/* 
-	 * This do/while loop performs the following till the metadata checksum is correct or the
-	 * file's allowed read attempts are reached.
-	 *	--read the metadata
-	 *	--determine the actual size of the metadata
-         * 	--perform checksum verification
-	 */
-	do {
-	    compressed = FALSE;
-	    compressed_size = 0;
+    if(0 == (type->flags & H5C__CLASS_SKIP_READS)) {
+        unsigned tries, max_tries;      /* The # of read attempts               */
+        unsigned retries;               /* The # of retries                     */
+        htri_t chk_ret;                 /* return from verify_chksum callback   */
+        size_t actual_len = len;
+        void *new_image = NULL;         /* Pointer to image                     */
+
+        /* Get the # of read attempts */
+        max_tries = tries = H5F_GET_READ_ATTEMPTS(f);
+
+        /* 
+         * This do/while loop performs the following till the metadata checksum is correct or the
+         * file's allowed read attempts are reached.
+         *   --read the metadata
+         *   --determine the actual size of the metadata
+         *   --perform checksum verification
+         */
+        do {
+            compressed = FALSE;
+            compressed_size = 0;
 
-	    if(actual_len != len) {
+            if(actual_len != len) {
                 if(NULL == (new_image = H5MM_realloc(image, len + H5C_IMAGE_EXTRA_SPACE)))
                     HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
                 image = (uint8_t *)new_image;
-	    }
+            } /* end if */
 
 #ifdef H5_HAVE_PARALLEL
             if(!coll_access || 0 == mpi_rank) {
 #endif /* H5_HAVE_PARALLEL */
-
                 if(H5F_block_read(f, type->mem_type, addr, len, dxpl_id, image) < 0)
                     HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL, "Can't read image*")
-
 #ifdef H5_HAVE_PARALLEL
-            }
+            } /* end if */
             /* if the collective metadata read optimization is turned on,
-               bcast the metadata read from process 0 to all ranks in the file
-               communicator */
+             * bcast the metadata read from process 0 to all ranks in the file
+             * communicator
+             */
             if(coll_access) {
                 int buf_size;
 
@@ -9033,59 +8713,57 @@ H5C_load_entry(H5F_t *             f,
                     HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
             } /* end if */
 #endif /* H5_HAVE_PARALLEL */
+            actual_len = len;
 
-	    actual_len = len;
+            if(type->get_load_size(image, udata, &len, &actual_len, &compressed, &compressed_size) < 0)
+                continue;   /* Transfer control to while() and count towards retries */
 
-	    if(type->get_load_size(image, udata, &len, &actual_len, &compressed, &compressed_size) < 0)
-		continue;   /* Transfer control to while() and count towards retries */
+            HDassert(((type->flags & H5C__CLASS_COMPRESSED_FLAG) != 0) ||
+                     ((compressed == FALSE) && (compressed_size == 0)));
+            HDassert((compressed == TRUE) || (compressed_size == 0));
 
-	    HDassert(((type->flags & H5C__CLASS_COMPRESSED_FLAG) != 0) ||
-		     ((compressed == FALSE) && (compressed_size == 0)));
-	    HDassert((compressed == TRUE) || (compressed_size == 0));
+            if(actual_len != len) {
 
-	    if(actual_len != len) {
+                if(type->flags & H5C__CLASS_COMPRESSED_FLAG) {
+                    /* if actual_len != len, then compression must be enabled on the entry.  
+                     * In this case, the get_load_size callback should have set compressed to TRUE,
+                     * compressed_size to the compressed size (which must equal to len),
+                     * and actual_len to the uncompressed size of the entry,
+                     * We can't verify the uncompressed size, but we can verify the rest
+                     * with the following assertions.
+                     */
+                    HDassert(compressed);
+                    HDassert(compressed_size == len);
+                } else if(type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG) {
+                    size_t temp_len = actual_len;
 
-		if(type->flags & H5C__CLASS_COMPRESSED_FLAG) {
-		    /* if actual_len != len, then compression must be enabled on the entry.  
-		     * In this case, the get_load_size callback should have set compressed to TRUE,
-		     * compressed_size to the compressed size (which must equal to len),
-		     * and actual_len to the uncompressed size of the entry,
-		     * We can't verify the uncompressed size, but we can verify the rest
-		     * with the following assertions.
-		     */
-		    HDassert(compressed);
-		    HDassert(compressed_size == len);
-		} else if(type->flags & H5C__CLASS_SPECULATIVE_LOAD_FLAG) {
+                    /* compressed must be FALSE, and compressed_size
+                     * must be zero.
+                     */
+                    HDassert(!compressed);
+                    HDassert(compressed_size == 0);
 
-		    size_t temp_len = actual_len;
+                    if(H5C_verify_len_eoa(f, type, addr, &temp_len, TRUE) < 0)
+                        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "actual_len exceeds EOA.")
+                    HDassert(temp_len == actual_len);
 
-		    /* compressed must be FALSE, and compressed_size
-		     * must be zero.
-		     */
-		    HDassert(!compressed);
-		    HDassert(compressed_size == 0);
-    
-		    if(H5C_verify_len_eoa(f, type, addr, &temp_len, TRUE) < 0)
-			HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "actual_len exceeds EOA.")
-		    HDassert(temp_len == actual_len);
+                    if(NULL == (new_image = H5MM_realloc(image, actual_len + H5C_IMAGE_EXTRA_SPACE)))
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
+                    image = (uint8_t *)new_image;
 
-		    if(NULL == (new_image = H5MM_realloc(image, actual_len + H5C_IMAGE_EXTRA_SPACE)))
-			HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, NULL, "image null after H5MM_realloc()")
-		    image = (uint8_t *)new_image;
 #if H5C_DO_MEMORY_SANITY_CHECKS
-
-		    HDmemcpy(image + actual_len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
-
+                    HDmemcpy(image + actual_len, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
 #endif /* H5C_DO_MEMORY_SANITY_CHECKS */
-		    /* If the thing's image needs to be bigger for a speculatively
-		     * loaded thing, go get the on-disk image again (the extra portion).
-		     */
-		    if(actual_len > len) {
+
+                    if(actual_len > len) {
 #ifdef H5_HAVE_PARALLEL
                         if(!coll_access || 0 == mpi_rank) {
 #endif /* H5_HAVE_PARALLEL */
-			if(H5F_block_read(f, type->mem_type, addr+len, actual_len-len, dxpl_id, image+len) < 0)
-			    HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "Can't read image")
+                            /* If the thing's image needs to be bigger for a speculatively
+                             * loaded thing, go get the on-disk image again (the extra portion).
+                             */
+                            if(H5F_block_read(f, type->mem_type, addr+len, actual_len-len, dxpl_id, image+len) < 0)
+                                HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "Can't read image")
 #ifdef H5_HAVE_PARALLEL
                         }
                         /* if the collective metadata read optimization is turned on,
@@ -9093,38 +8771,40 @@ H5C_load_entry(H5F_t *             f,
                            communicator */
                         if(coll_access) {
                             int buf_size;
- 
+
                             H5_CHECKED_ASSIGN(buf_size, int, actual_len-len, size_t);
                             if(MPI_SUCCESS != (mpi_code = MPI_Bcast(image+len, buf_size, MPI_BYTE, 0, comm)))
                                 HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
-                         }
+                        } /* end if */
 #endif /* H5_HAVE_PARALLEL */
-		    }
-		} else { /* throw an error */
-		    HGOTO_ERROR(H5E_CACHE, H5E_UNSUPPORTED, NULL, "size of non-speculative, non-compressed object changed")
-		}
-	    } /* end if (actual_len != len) */
-
-	    if(type->verify_chksum == NULL)
-		break;
-
-	    if((chk_ret = type->verify_chksum(image, actual_len, udata)) < 0)
-		HGOTO_ERROR(H5E_CACHE, H5E_NOSPACE, NULL, "Failure from verify_chksum callback")
-	    if(chk_ret == TRUE)
-		break;
-	} while(--tries);
-
-	/* Check for too many tries */
-	if(tries == 0)
-	    HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL, "incorrect metadatda checksum after all read attempts")
-
-	/* Calculate and track the # of retries */
-	retries = max_tries - tries;
-	if(retries) {        /* Does not track 0 retry */
-	    if(H5F_track_metadata_read_retries(f, (unsigned)type->mem_type, retries) < 0)
-		HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "cannot track read tries = %u ", retries)
-	}  /* end if */
-	len = actual_len;
+                    }
+                } else {
+                    /* throw an error */
+                    HGOTO_ERROR(H5E_CACHE, H5E_UNSUPPORTED, NULL, "size of non-speculative, non-compressed object changed")
+                } /* end else */
+            } /* end if (actual_len != len) */
+
+            if(type->verify_chksum == NULL)
+                break;
+
+            if((chk_ret = type->verify_chksum(image, actual_len, udata)) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_NOSPACE, NULL, "Failure from verify_chksum callback")
+            if(chk_ret == TRUE)
+                break;
+        } while(--tries);
+
+        /* Check for too many tries */
+        if(tries == 0)
+            HGOTO_ERROR(H5E_CACHE, H5E_READERROR, NULL, "incorrect metadatda checksum after all read attempts")
+
+        /* Calculate and track the # of retries */
+        retries = max_tries - tries;
+        if(retries) {        /* Does not track 0 retry */
+            if(H5F_track_metadata_read_retries(f, (unsigned)type->mem_type, retries) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "cannot track read tries = %u ", retries)
+        }  /* end if */
+        len = actual_len;
+
     } /* end if !H5C__CLASS_SKIP_READS */
 
     /* Deserialize the on-disk image into the native memory form */
@@ -9159,12 +8839,12 @@ H5C_load_entry(H5F_t *             f,
     entry->addr                 = addr;
     entry->size                 = len;
     HDassert(entry->size < H5C_MAX_ENTRY_SIZE);
-    entry->compressed		= compressed;
-    entry->compressed_size	= compressed_size;
+    entry->compressed           = compressed;
+    entry->compressed_size      = compressed_size;
     entry->image_ptr            = image;
     entry->image_up_to_date     = TRUE;
     entry->type                 = type;
-    entry->is_dirty	        = dirty;
+    entry->is_dirty	            = dirty;
     entry->dirtied              = FALSE;
     entry->is_protected         = FALSE;
     entry->is_read_only         = FALSE;
@@ -9176,18 +8856,17 @@ H5C_load_entry(H5F_t *             f,
     entry->clear_on_unprotect   = FALSE;
     entry->flush_immediately    = FALSE;
     entry->coll_access          = coll_access;
-    entry->ind_access_while_coll = FALSE;
 #endif /* H5_HAVE_PARALLEL */
     entry->flush_in_progress    = FALSE;
     entry->destroy_in_progress  = FALSE;
 
-    entry->ring			= H5C_RING_UNDEFINED;
+    entry->ring                 = H5C_RING_UNDEFINED;
 
     /* Initialize flush dependency height fields */
-    entry->flush_dep_parent = NULL;
-    entry->flush_dep_nparents = 0;
+    entry->flush_dep_parent     = NULL;
+    entry->flush_dep_nparents   = 0;
     entry->flush_dep_parent_nalloc = 0;
-    entry->flush_dep_nchildren = 0;
+    entry->flush_dep_nchildren  = 0;
     entry->flush_dep_ndirty_children = 0;
     entry->ht_next              = NULL;
     entry->ht_prev              = NULL;
@@ -9198,8 +8877,10 @@ H5C_load_entry(H5F_t *             f,
     entry->aux_next             = NULL;
     entry->aux_prev             = NULL;
 
+#ifdef H5_HAVE_PARALLEL
     entry->coll_next            = NULL;
     entry->coll_prev            = NULL;
+#endif /* H5_HAVE_PARALLEL */
 
     H5C__RESET_CACHE_ENTRY_STATS(entry);
 
@@ -9208,13 +8889,9 @@ H5C_load_entry(H5F_t *             f,
 done:
     /* Cleanup on error */
     if(NULL == ret_value) {
-
         /* Release resources */
         if ( thing && type->free_icr(thing) < 0 )
-
-            HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, \
-                        "free_icr callback failed")
-
+            HDONE_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "free_icr callback failed")
         if(image)
             image = (uint8_t *)H5MM_xfree(image);
     } /* end if */
@@ -9424,13 +9101,6 @@ H5C_make_space_in_cache(H5F_t *	f,
                     cache_ptr->entries_scanned_to_make_space++;
 #endif /* H5C_COLLECT_CACHE_STATS */
 
-#ifdef H5_HAVE_PARALLEL
-                    if(TRUE == entry_ptr->coll_access) {
-                        entry_ptr->coll_access = FALSE;
-                        H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
-                    } /* end if */
-#endif
-
                     if(H5C__flush_single_entry(f, dxpl_id, entry_ptr, H5C__FLUSH_INVALIDATE_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, NULL) < 0)
                         HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush entry")
                 } else {
@@ -10410,7 +10080,7 @@ H5C_evict_tagged_entries(H5F_t * f, hid_t dxpl_id, haddr_t tag)
 
 			if(H5C__flush_single_entry(f, dxpl_id, entry_ptr,
 						  H5C__FLUSH_INVALIDATE_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG,
-                                                   NULL, NULL) < 0)
+						  NULL, NULL) < 0)
 
 			    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
 					"Entry eviction failed.")
@@ -11014,9 +10684,22 @@ H5C__assert_flush_dep_nocycle(H5C_cache_entry_t * entry,
 } /* H5C__assert_flush_dep_nocycle() */
 #endif /* NDEBUG */
 
+

+/*-------------------------------------------------------------------------
+ * Function:    H5C__generate_image
+ *
+ * Purpose:     Serialize an entry and generate its image.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Mohamad Chaarawi
+ *              2/10/16
+ *
+ *-------------------------------------------------------------------------
+ */
 static herr_t
-H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr, 
-                    hid_t dxpl_id, int64_t *entry_size_change_ptr)
+H5C__generate_image(const H5F_t *f, H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr, 
+    hid_t dxpl_id, int64_t *entry_size_change_ptr)
 {
     haddr_t		new_addr = HADDR_UNDEF;
     haddr_t		old_addr = HADDR_UNDEF;
@@ -11025,8 +10708,9 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
     unsigned            serialize_flags = H5C__SERIALIZE_NO_FLAGS_SET;
     herr_t              ret_value = SUCCEED;
 
-    FUNC_ENTER_NOAPI_NOINIT
+    FUNC_ENTER_STATIC
 
+    /* Sanity check */
     HDassert(!entry_ptr->image_up_to_date);
 
     /* reset cache_ptr->slist_changed so we can detect slist
@@ -11038,93 +10722,91 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
     old_addr = entry_ptr->addr;
 
     /* Call client's pre-serialize callback, if there's one */
-    if ( ( entry_ptr->type->pre_serialize != NULL ) && 
-         ( (entry_ptr->type->pre_serialize)(f, dxpl_id, 
-                                            (void *)entry_ptr,
-                                            entry_ptr->addr, 
-                                            entry_ptr->size,
-                                            entry_ptr->compressed_size,
-                                            &new_addr, &new_len, 
-                                            &new_compressed_len,
-                                            &serialize_flags) < 0 ) ) {
-        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
-                    "unable to pre-serialize entry");
-    }
+    if(entry_ptr->type->pre_serialize && 
+         (entry_ptr->type->pre_serialize)(f, dxpl_id, 
+                (void *)entry_ptr, entry_ptr->addr, entry_ptr->size,
+                entry_ptr->compressed_size, &new_addr, &new_len, 
+                &new_compressed_len, &serialize_flags) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to pre-serialize entry")
 
     /* set cache_ptr->slist_change_in_pre_serialize if the 
      * slist was modified.
      */
-    if ( cache_ptr->slist_changed )
+    if(cache_ptr->slist_changed)
         cache_ptr->slist_change_in_pre_serialize = TRUE;
 
     /* Check for any flags set in the pre-serialize callback */
-    if ( serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET ) {
+    if(serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) {
         /* Check for unexpected flags from serialize callback */
-        if ( serialize_flags & ~(H5C__SERIALIZE_RESIZED_FLAG | 
-                                 H5C__SERIALIZE_MOVED_FLAG |
-                                 H5C__SERIALIZE_COMPRESSED_FLAG)) {
-            HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
-                        "unknown serialize flag(s)");
-        }
+        if(serialize_flags & ~(H5C__SERIALIZE_RESIZED_FLAG | 
+                               H5C__SERIALIZE_MOVED_FLAG |
+                               H5C__SERIALIZE_COMPRESSED_FLAG))
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unknown serialize flag(s)")
 
 #ifdef H5_HAVE_PARALLEL
-        if ( cache_ptr->aux_ptr != NULL )
-            HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL,    \
-                        "resize/move in serialize occured in parallel case.");
+        /* In the parallel case, resizes and moves in
+         * the serialize operation can cause problems.
+         * If they occur, scream and die.
+         *
+         * At present, in the parallel case, the aux_ptr
+         * will only be set if there is more than one
+         * process.  Thus we can use this to detect
+         * the parallel case.
+         *
+         * This works for now, but if we start using the
+         * aux_ptr for other purposes, we will have to
+         * change this test accordingly.
+         *
+         * NB: While this test detects entryies that attempt
+         *     to resize or move themselves during a flush
+         *     in the parallel case, it will not detect an
+         *     entry that dirties, resizes, and/or moves
+         *     other entries during its flush.
+         *
+         *     From what Quincey tells me, this test is
+         *     sufficient for now, as any flush routine that
+         *     does the latter will also do the former.
+         *
+         *     If that ceases to be the case, further
+         *     tests will be necessary.
+         */
+        if(cache_ptr->aux_ptr != NULL)
+            HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "resize/move in serialize occured in parallel case.")
 #endif
 
         /* Resize the buffer if required */
-        if ( ( ( ! entry_ptr->compressed ) &&
-               ( serialize_flags & H5C__SERIALIZE_RESIZED_FLAG ) ) ||
-             ( ( entry_ptr->compressed ) &&
-               ( serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG ) ) ) {
+        if(((!entry_ptr->compressed) && (serialize_flags & H5C__SERIALIZE_RESIZED_FLAG)) ||
+                ((entry_ptr->compressed) && (serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG))) {
             size_t new_image_size;
 
-            if ( entry_ptr->compressed )
+            if(entry_ptr->compressed)
                 new_image_size = new_compressed_len;
             else
                 new_image_size = new_len;
-
             HDassert(new_image_size > 0);
 
             /* Release the current image */
-            if ( entry_ptr->image_ptr ) {
+            if(entry_ptr->image_ptr)
                 entry_ptr->image_ptr = H5MM_xfree(entry_ptr->image_ptr);
-            }
 
             /* Allocate a new image buffer */
-            entry_ptr->image_ptr = 
-                H5MM_malloc(new_image_size + H5C_IMAGE_EXTRA_SPACE);
-
-            if ( NULL == entry_ptr->image_ptr )
-                {
-                    HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, \
-                                "memory allocation failed for on disk image buffer");
-                }
+            if(NULL == (entry_ptr->image_ptr = H5MM_malloc(new_image_size + H5C_IMAGE_EXTRA_SPACE)))
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTALLOC, FAIL, "memory allocation failed for on disk image buffer")
 
 #if H5C_DO_MEMORY_SANITY_CHECKS
-
-            HDmemcpy(((uint8_t *)entry_ptr->image_ptr) + new_image_size,
-                     H5C_IMAGE_SANITY_VALUE, 
-                     H5C_IMAGE_EXTRA_SPACE);
-
+            HDmemcpy(((uint8_t *)entry_ptr->image_ptr) + new_image_size, H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE);
 #endif /* H5C_DO_MEMORY_SANITY_CHECKS */
-
         } /* end if */
 
         /* If required, update the entry and the cache data structures
          * for a resize.
          */
-        if ( serialize_flags & H5C__SERIALIZE_RESIZED_FLAG ) {
-
-            H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, \
-                                                    entry_ptr, new_len);
+        if(serialize_flags & H5C__SERIALIZE_RESIZED_FLAG) {
+            H5C__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_len);
 
             /* update the hash table for the size change*/
-            H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, \
-                                              entry_ptr->size, \
-                                              new_len, entry_ptr, \
-                                              !(entry_ptr->is_dirty));
+            H5C__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, \
+                                              new_len, entry_ptr, !(entry_ptr->is_dirty));
 
             /* The entry can't be protected since we are
              * in the process of flushing it.  Thus we must
@@ -11139,17 +10821,13 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
              * be in the slist.  Thus update it for the size change.
              */
             HDassert(entry_ptr->in_slist);
-            H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, \
-                                              new_len);
+            H5C__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, entry_ptr->size, new_len);
 
             /* if defined, update *entry_size_change_ptr for the 
              * change in entry size.
              */
-            if ( entry_size_change_ptr != NULL )
-                {
-                    *entry_size_change_ptr = (int64_t)new_len;
-                    *entry_size_change_ptr -= (int64_t)(entry_ptr->size);
-                }
+            if(entry_size_change_ptr != NULL)
+                *entry_size_change_ptr = (int64_t)new_len - (int64_t)(entry_ptr->size);
 
             /* finally, update the entry for its new size */
             entry_ptr->size = new_len;
@@ -11166,7 +10844,7 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
 
             H5C__UPDATE_STATS_FOR_MOVE(cache_ptr, entry_ptr);
 
-            if ( entry_ptr->addr == old_addr ) {
+            if(entry_ptr->addr == old_addr) {
                 /* we must update cache data structures for the 
                  * change in address.
                  */
@@ -11198,27 +10876,26 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
                 cache_ptr->slist_len_increase = saved_slist_len_increase;
                 cache_ptr->slist_size_increase = saved_slist_size_increase;
 #endif /* H5C_DO_SANITY_CHECKS */
-            }
-            else {
+            } /* end if */
+            else /* move is already done for us -- just do sanity checks */
                 HDassert(entry_ptr->addr == new_addr);
-            }
         } /* end if */
 
-        if ( serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG ) {
+        if(serialize_flags & H5C__SERIALIZE_COMPRESSED_FLAG) {
             /* just save the new compressed entry size in 
              * entry_ptr->compressed_size.  We don't need to 
              * do more, as compressed size is only used for I/O.
              */
             HDassert(entry_ptr->compressed);
             entry_ptr->compressed_size = new_compressed_len;
-        }
-    } /* end if ( serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET ) */
+        } /* end if */
+    } /* end if(serialize_flags != H5C__SERIALIZE_NO_FLAGS_SET) */
 
     /* Serialize object into buffer */
     {
         size_t image_len;
 
-        if ( entry_ptr->compressed )
+        if(entry_ptr->compressed)
             image_len = entry_ptr->compressed_size;
         else
             image_len = entry_ptr->size;
@@ -11227,33 +10904,25 @@ H5C__generate_image(H5F_t *f, H5C_t * cache_ptr, H5C_cache_entry_t *entry_ptr,
          * modifications in the serialize call.
          */
         cache_ptr->slist_changed = FALSE;
-
             
-        if ( entry_ptr->type->serialize(f, entry_ptr->image_ptr, 
-                                        image_len,
-                                        (void *)entry_ptr) < 0) {
-            HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
-                        "unable to serialize entry");
-        }
+        if(entry_ptr->type->serialize(f, entry_ptr->image_ptr, image_len, (void *)entry_ptr) < 0)
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to serialize entry")
 
         /* set cache_ptr->slist_change_in_serialize if the 
          * slist was modified.
          */
-        if ( cache_ptr->slist_changed )
+        if(cache_ptr->slist_changed)
             cache_ptr->slist_change_in_pre_serialize = TRUE;
 
 #if H5C_DO_MEMORY_SANITY_CHECKS
-
-        HDassert(0 == HDmemcmp(((uint8_t *)entry_ptr->image_ptr) + 
-                               image_len, 
-                               H5C_IMAGE_SANITY_VALUE, 
-                               H5C_IMAGE_EXTRA_SPACE));
-
+        HDassert(0 == HDmemcmp(((uint8_t *)entry_ptr->image_ptr) + image_len, 
+                               H5C_IMAGE_SANITY_VALUE, H5C_IMAGE_EXTRA_SPACE));
 #endif /* H5C_DO_MEMORY_SANITY_CHECKS */
 
         entry_ptr->image_up_to_date = TRUE;
-    }
+    } /* end block */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5C__generate_image */
+
diff --git a/src/H5Cmpio.c b/src/H5Cmpio.c
index 0d75ac1..4e88e44 100644
--- a/src/H5Cmpio.c
+++ b/src/H5Cmpio.c
@@ -43,13 +43,13 @@
 #include "H5Eprivate.h"		/* Error handling		  	*/
 #include "H5Fpkg.h"		/* Files				*/
 #include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5MMprivate.h"	/* Memory management			*/
 #include "H5Pprivate.h"         /* Property lists                       */
-#include "H5SLprivate.h"	/* Skip lists				*/
 
-#ifdef H5_HAVE_PARALLEL
 
+#ifdef H5_HAVE_PARALLEL
 /****************/
 /* Local Macros */
 /****************/
@@ -64,6 +64,9 @@
 /********************/
 /* Local Prototypes */
 /********************/
+static herr_t H5C__collective_write(H5F_t *f, hid_t dxpl_id,
+    H5SL_t *collective_write_list);
+static herr_t H5C__collective_write_free(void *_item, void *key, void *op_data);
 
 
 /*********************/
@@ -80,6 +83,9 @@
 /* Local Variables */
 /*******************/
 
+/* Declare a free list to manage the H5C_collective_write_t struct */
+H5FL_DEFINE(H5C_collective_write_t);
+
 
 

 /*-------------------------------------------------------------------------
@@ -261,7 +267,7 @@ H5C_apply_candidate_list(H5F_t * f,
         /* Create skip list of entries for collective write */
         if(NULL == (collective_write_list = H5SL_create(H5SL_TYPE_HADDR, NULL)))
             HGOTO_ERROR(H5E_DATASET, H5E_CANTCREATE, FAIL, "can't create skip list for entries")
-    }
+    } /* end if */
 
     n = num_candidates / mpi_size;
     m = num_candidates % mpi_size;
@@ -376,7 +382,7 @@ H5C_apply_candidate_list(H5F_t * f,
             if(TRUE == entry_ptr->coll_access) {
                 entry_ptr->coll_access = FALSE;
                 H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
-            }
+            } /* end if */
         } /* end else */
     } /* end for */
 
@@ -406,7 +412,7 @@ H5C_apply_candidate_list(H5F_t * f,
      * Now scan the LRU and PEL lists, flushing or clearing entries as
      * needed.
      *
-     * The flush_me_last and flush_me_collectively flags may dictate how or
+     * The flush_me_last flag may dictate how or
      * when some entries can be flushed, and should be addressed here.
      * However, in their initial implementation, these flags only apply to the
      * superblock, so there's only a relatively small change to this function
@@ -453,10 +459,8 @@ H5C_apply_candidate_list(H5F_t * f,
              * will not call either the pre_serialize or serialize callbacks.
              */
 
-            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, 
-                                       H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                       NULL, NULL) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
+            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, NULL) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't clear entry.")
         } /* end if */
 
         /* Else, if this process needs to flush this entry. */
@@ -500,9 +504,9 @@ H5C_apply_candidate_list(H5F_t * f,
             cache_ptr->entries_removed_counter = 0;
             cache_ptr->last_entry_removed_ptr  = NULL;
 
-            if(H5C__flush_single_entry(f, dxpl_id, flush_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                       NULL, collective_write_list) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't flush entry.")
+            /* Add this entry to the list of entries to collectively write */
+            if(H5C__flush_single_entry(f, dxpl_id, flush_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, collective_write_list) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry.")
 
             if ( ( cache_ptr->entries_removed_counter > 1 ) ||
                  ( cache_ptr->last_entry_removed_ptr == entry_ptr ) )
@@ -630,11 +634,10 @@ H5C_apply_candidate_list(H5F_t * f,
                    it is the simple case of a single pinned entry needing
                    flushed last and collectively is just a minor addition to
                    this routine, but signficantly buffing up the usage of
-                   flush_me_last or flush_me_collectively will require a more
+                   flush_me_last will require a more
                    intense rework of this function and potentially the function
                    of candidate lists as a whole. */
 
-                HDassert(entry_ptr->flush_me_collectively);
                 entries_to_flush_or_clear_last++;
                 entries_to_flush_collectively++;
                 HDassert(entries_to_flush_or_clear_last == 1);
@@ -656,14 +659,12 @@ H5C_apply_candidate_list(H5F_t * f,
                 entries_cleared++;
 
 #if ( H5C_APPLY_CANDIDATE_LIST__DEBUG > 1 )
-            HDfprintf(stdout, "%s:%d: clearing 0x%llx.\n", FUNC, mpi_rank,
-                      (long long)clear_ptr->addr);
+                HDfprintf(stdout, "%s:%d: clearing 0x%llx.\n", FUNC, mpi_rank,
+                          (long long)clear_ptr->addr);
 #endif /* H5C_APPLY_CANDIDATE_LIST__DEBUG */
 
-                if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, 
-                                           H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                           NULL, NULL) < 0)
-                    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
+                if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, NULL) < 0)
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't clear entry.")
             } /* end else-if */
 
             /* Else, if this process needs to independently flush this entry. */
@@ -678,9 +679,9 @@ H5C_apply_candidate_list(H5F_t * f,
                       (long long)flush_ptr->addr);
 #endif /* H5C_APPLY_CANDIDATE_LIST__DEBUG */
 
-                if(H5C__flush_single_entry(f, dxpl_id, flush_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                           NULL, collective_write_list) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
+                /* Add this entry to the list of entries to collectively write */
+                if(H5C__flush_single_entry(f, dxpl_id, flush_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, collective_write_list) < 0)
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't clear entry.")
             } /* end else-if */
         } /* end if */
 
@@ -713,16 +714,15 @@ H5C_apply_candidate_list(H5F_t * f,
     if (delayed_ptr) {
 
         if (delayed_ptr->clear_on_unprotect) {
-            if(H5C__flush_single_entry(f, dxpl_id, delayed_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG, 
-                                       NULL, NULL) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't flush entry collectively.")
+            if(H5C__flush_single_entry(f, dxpl_id, delayed_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG, NULL, NULL) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry.")
 
             entry_ptr->clear_on_unprotect = FALSE;
             entries_cleared++;
         } else if (delayed_ptr->flush_immediately) {
-            if(H5C__flush_single_entry(f, dxpl_id, delayed_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                       NULL, collective_write_list) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't flush entry collectively.")
+            /* Add this entry to the list of entries to collectively write */
+            if(H5C__flush_single_entry(f, dxpl_id, delayed_ptr, H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, collective_write_list) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry collectively.")
 
             entry_ptr->flush_immediately = FALSE;
             entries_flushed++;
@@ -732,15 +732,15 @@ H5C_apply_candidate_list(H5F_t * f,
         entries_flushed_or_cleared_last++;
     } /* end if */
 
+    /* If we've deferred writing to do it collectively, take care of that now */
     if(f->coll_md_write) {
         HDassert(collective_write_list);
 
         /* Write collective list */
-        if(H5C_collective_write(f,
-                                dxpl_id,
-                                collective_write_list) < 0)
-            HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't write metadata collectively")
-    }
+        if(H5C__collective_write(f, dxpl_id, collective_write_list) < 0)
+            HGOTO_ERROR(H5E_CACHE, H5E_WRITEERROR, FAIL, "Can't write metadata collectively")
+    } /* end if */
+
     /* ====================================================================== *
      * Finished flushing everything.                                          *
      * ====================================================================== */
@@ -751,9 +751,9 @@ H5C_apply_candidate_list(H5F_t * f,
     HDassert((entries_flushed_collectively == entries_to_flush_collectively));
     
     if((entries_flushed != entries_to_flush) || 
-       (entries_cleared != entries_to_clear) ||
-       (entries_flushed_or_cleared_last != entries_to_flush_or_clear_last) ||
-       (entries_flushed_collectively != entries_to_flush_collectively))
+           (entries_cleared != entries_to_clear) ||
+           (entries_flushed_or_cleared_last != entries_to_flush_or_clear_last) ||
+           (entries_flushed_collectively != entries_to_flush_collectively))
         HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry count mismatch.")
 
 done:
@@ -761,7 +761,7 @@ done:
         candidate_assignment_table = (int *)H5MM_xfree((void *)candidate_assignment_table);
 
     if(collective_write_list)
-        if(H5SL_destroy(collective_write_list, H5C_collective_write_free, NULL) < 0)
+        if(H5SL_destroy(collective_write_list, H5C__collective_write_free, NULL) < 0)
             HDONE_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "failed to destroy skip list")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1133,7 +1133,7 @@ H5C_mark_entries_as_clean(H5F_t *  f,
             if(TRUE == entry_ptr->coll_access) {
                 entry_ptr->coll_access = FALSE;
                 H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
-            }
+            } /* end if */
 
             entry_ptr->clear_on_unprotect = TRUE;
 #if H5C_DO_SANITY_CHECKS
@@ -1195,10 +1195,8 @@ H5C_mark_entries_as_clean(H5F_t *  f,
             entry_ptr = entry_ptr->prev;
             entries_cleared++;
 
-            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, 
-                                       H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                       NULL, NULL) < 0)
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
+            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, NULL) < 0)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't clear entry.")
         } else {
 
             entry_ptr = entry_ptr->prev;
@@ -1225,10 +1223,8 @@ H5C_mark_entries_as_clean(H5F_t *  f,
             entry_ptr = entry_ptr->next;
             entries_cleared++;
 
-            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, 
-                                       H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, 
-                                       NULL, NULL) < 0 )
-                HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
+            if(H5C__flush_single_entry(f, dxpl_id, clear_ptr, H5C__FLUSH_CLEAR_ONLY_FLAG | H5C__DEL_FROM_SLIST_ON_DESTROY_FLAG, NULL, NULL) < 0 )
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't clear entry.")
         } else {
 
             entry_ptr = entry_ptr->next;
@@ -1289,78 +1285,95 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5C_clear_coll_entries(H5C_t * cache_ptr, hbool_t partial)
+H5C_clear_coll_entries(H5C_t *cache_ptr, hbool_t partial)
 { 
-    int32_t		list_len, coll_entries_cleared = 0;
+    int32_t		clear_cnt;
     H5C_cache_entry_t *	entry_ptr = NULL;
-    H5C_cache_entry_t *	prev_ptr;
     herr_t              ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI_NOINIT
 
     entry_ptr = cache_ptr->coll_tail_ptr;
-    list_len = cache_ptr->coll_list_len;
-
-    while(entry_ptr && (coll_entries_cleared < (partial ? list_len/2 : list_len))) {
-        prev_ptr = entry_ptr->coll_prev;
+    clear_cnt = (partial ? cache_ptr->coll_list_len / 2 : cache_ptr->coll_list_len);
+    while(entry_ptr && clear_cnt > 0) {
+        H5C_cache_entry_t *prev_ptr = entry_ptr->coll_prev;
 
+        /* Sanity check */
         HDassert(entry_ptr->coll_access);
 
+        /* Mark entry as independent */
         entry_ptr->coll_access = FALSE;
         H5C__REMOVE_FROM_COLL_LIST(cache_ptr, entry_ptr, FAIL)
-        coll_entries_cleared ++;
 
+        /* Decrement entry count */
+        clear_cnt--;
+
+        /* Advance to next entry */
         entry_ptr = prev_ptr;
-    }
+    } /* end while */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5C_clear_coll_entries */
 
-herr_t
-H5C_collective_write(H5F_t *f,
-                     hid_t dxpl_id,
-                     H5SL_t *collective_write_list)
+

+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C__collective_write
+ *
+ * Purpose:     Perform a collective write of a list of metadata entries.
+ *
+ * Return:      FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer:  Mohamad Chaarawi
+ *              February, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__collective_write(H5F_t *f, hid_t dxpl_id, H5SL_t *collective_write_list)
 {
     H5P_genplist_t      *plist = NULL;
-    H5FD_mpio_xfer_t    xfer_mode = H5FD_MPIO_COLLECTIVE;
-    H5FD_mpio_xfer_t    orig_xfer_mode;
-    H5SL_node_t         *node;
-    H5C_collective_write_t *item;
+    H5FD_mpio_xfer_t    orig_xfer_mode = H5FD_MPIO_COLLECTIVE;
     int                 count;
-    void                *base_buf;
     int                 *length_array = NULL;
     MPI_Aint            *buf_array = NULL;
     MPI_Aint            *offset_array = NULL;
     MPI_Datatype        btype;
-    MPI_Datatype        ftype;
     hbool_t             btype_created = FALSE;
+    MPI_Datatype        ftype;
     hbool_t             ftype_created = FALSE;
     int                 mpi_code;
-    int                 i;
     herr_t              ret_value = SUCCEED;
 
-    FUNC_ENTER_NOAPI_NOINIT
-
-    count = (int)H5SL_count(collective_write_list);
+    FUNC_ENTER_STATIC
 
+    /* Get original transfer mode */
     if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
-
     if(H5P_get(plist, H5D_XFER_IO_XFER_MODE_NAME, &orig_xfer_mode) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O property")
 
+    /* Get number of entries in collective write list */
+    count = (int)H5SL_count(collective_write_list);
+
     if(count > 0) {
+        H5FD_mpio_xfer_t    xfer_mode = H5FD_MPIO_COLLECTIVE;
+        H5SL_node_t         *node;
+        H5C_collective_write_t *item;
+        void                *base_buf;
+        int                 i;
+
         if(H5P_set(plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
             HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O property")
 
         /* Allocate arrays */
         if(NULL == (length_array = (int *)H5MM_malloc((size_t)count * sizeof(int))))
-            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for collective write table length array")
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective write table length array")
         if(NULL == (buf_array = (MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))))
-            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for collective buf table length array")
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective buf table length array")
         if(NULL == (offset_array = (MPI_Aint *)H5MM_malloc((size_t)count * sizeof(MPI_Aint))))
-            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for collective offset table length array")
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "memory allocation failed for collective offset table length array")
 
         /* Fill arrays */
         node = H5SL_first(collective_write_list);
@@ -1368,6 +1381,7 @@ H5C_collective_write(H5F_t *f,
         if(NULL == (item = (H5C_collective_write_t *)H5SL_item(node)))
             HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't retrieve skip list item")
 
+        /* Set up initial array position & buffer base address */
         length_array[0] = (int)item->length;
         base_buf = item->buf;
         buf_array[0] = (MPI_Aint)0;
@@ -1379,28 +1393,31 @@ H5C_collective_write(H5F_t *f,
             if(NULL == (item = (H5C_collective_write_t *)H5SL_item(node)))
                 HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't retrieve skip list item")
 
+            /* Set up array position */
             length_array[i] = (int)item->length;
             buf_array[i] = (MPI_Aint)item->buf - (MPI_Aint)base_buf;
             offset_array[i] = (MPI_Aint)item->offset;
+
+            /* Advance to next node & array location */
             node = H5SL_next(node);
             i++;
         } /* end while */
 
-        /* Create memory mpi type */
+        /* Create memory MPI type */
         if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed(count, length_array, buf_array, MPI_BYTE, &btype)))
             HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
         btype_created = TRUE;
         if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&btype)))
             HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
 
-        /* Create file mpi type */
+        /* Create file MPI type */
         if(MPI_SUCCESS != (mpi_code = MPI_Type_create_hindexed(count, length_array, offset_array, MPI_BYTE, &ftype)))
             HMPI_GOTO_ERROR(FAIL, "MPI_Type_create_hindexed failed", mpi_code)
         ftype_created = TRUE;
         if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&ftype)))
             HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code)
 
-        /* Pass buf type, file type to the file driver.  */
+        /* Pass buf type, file type to the file driver */
         if(H5FD_mpi_setup_collective(dxpl_id, &btype, &ftype) < 0)
             HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O properties")
 
@@ -1418,19 +1435,16 @@ H5C_collective_write(H5F_t *f,
         mpi_fh = *(MPI_File*)mpi_fh_p;
 
         /* just to match up with the 1st MPI_File_set_view from H5FD_mpio_write() */
-        if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, 
-                                                        MPI_BYTE, "native", MPI_INFO_NULL)))
+        if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL)))
             HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
 
         /* just to match up with MPI_File_write_at_all from H5FD_mpio_write() */
         HDmemset(&mpi_stat, 0, sizeof(MPI_Status));
-        if(MPI_SUCCESS != (mpi_code = MPI_File_write_at_all(mpi_fh, (MPI_Offset)0, NULL, 0, 
-                                                            MPI_BYTE, &mpi_stat)))
+        if(MPI_SUCCESS != (mpi_code = MPI_File_write_at_all(mpi_fh, (MPI_Offset)0, NULL, 0, MPI_BYTE, &mpi_stat)))
             HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at_all failed", mpi_code)
 
         /* just to match up with the 2nd MPI_File_set_view (reset) in H5FD_mpio_write() */
-        if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, 
-                                                        MPI_BYTE, "native", MPI_INFO_NULL)))
+        if(MPI_SUCCESS != (mpi_code = MPI_File_set_view(mpi_fh, (MPI_Offset)0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL)))
             HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
     } /* end else */
 
@@ -1454,23 +1468,37 @@ done:
     } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value);
-} /* end H5C_collective_write() */
+} /* end H5C__collective_write() */
 
-herr_t
-H5C_collective_write_free(void *_item, void H5_ATTR_UNUSED *key, void H5_ATTR_UNUSED *op_data)
+

+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C__collective_write_free
+ *
+ * Purpose:     Release node on collective write skiplist
+ *
+ * Return:      FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer:  Mohamad Chaarawi
+ *              February, 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C__collective_write_free(void *_item, void H5_ATTR_UNUSED *key, void H5_ATTR_UNUSED *op_data)
 {
     H5C_collective_write_t *item = (H5C_collective_write_t *)_item;
 
-    FUNC_ENTER_NOAPI_NOINIT_NOERR
+    FUNC_ENTER_STATIC_NOERR
 
-        HDassert(item);
+    /* Sanity check */
+    HDassert(item);
 
     if(item->free_buf)
         item->buf = H5MM_xfree(item->buf);
-    /*!FIXME change to use free list for items */
-    H5MM_free(item);
+    H5FL_FREE(H5C_collective_write_t, item);
 
     FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5C_collective_write_free() */
+} /* end H5C__collective_write_free() */
 #endif /* H5_HAVE_PARALLEL */
 
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index 8050432..36ca09e 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -3124,11 +3124,11 @@ if ( ( (entry_ptr) == NULL ) ||                                                \
                          (cache_ptr)->coll_list_size,                   \
                          (fail_val))                                    \
                                                                         \
-        H5C__COLL_DLL_PREPEND((entry_ptr), (cache_ptr)->coll_head_ptr,  \
-                              (cache_ptr)->coll_tail_ptr,               \
-                              (cache_ptr)->coll_list_len,               \
-                              (cache_ptr)->coll_list_size,              \
-                              (fail_val))                               \
+    H5C__COLL_DLL_PREPEND((entry_ptr), (cache_ptr)->coll_head_ptr,      \
+                          (cache_ptr)->coll_tail_ptr,                   \
+                          (cache_ptr)->coll_list_len,                   \
+                          (cache_ptr)->coll_list_size,                  \
+                          (fail_val))                                   \
                                                                         \
 } /* H5C__MOVE_TO_TOP_IN_COLL_LIST */
 #endif /* H5_HAVE_PARALLEL */
@@ -4278,6 +4278,7 @@ typedef struct H5C_collective_write_t {
 } H5C_collective_write_t;
 #endif /* H5_HAVE_PARALLEL */
 
+
 /*****************************/
 /* Package Private Variables */
 /*****************************/
@@ -4288,10 +4289,6 @@ typedef struct H5C_collective_write_t {
 /******************************/
 H5_DLL herr_t H5C__flush_single_entry(const H5F_t *f, hid_t dxpl_id,
     H5C_cache_entry_t *entry_ptr, unsigned flags, int64_t *entry_size_change_ptr, H5SL_t *collective_write_list);
-#ifdef H5_HAVE_PARALLEL
-H5_DLL herr_t H5C_collective_write(H5F_t *f, hid_t dxpl_id, H5SL_t *collective_write_list);
-H5_DLL herr_t H5C_collective_write_free(void *_item, void *key, void *op_data);
-#endif /* H5_HAVE_PARALLEL */
 
 #endif /* _H5Cpkg_H */
 
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 8d29387..8d495be 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -1487,13 +1487,10 @@ typedef int H5C_ring_t;
  *		flushed from the cache until all other entries without
  *              the flush_me_last flag set have been flushed.
  *
- * flush_me_collectively:  Boolean flag indicating that this entry needs
- *              to be flushed collectively when in a parallel situation.
- * 
  *		Note: 
  *		
- *		At this time, the flush_me_last and flush_me_collectively
- *              flags will only be applied to one entry, the superblock,
+ *		At this time, the flush_me_last 
+ *              flag will only be applied to one entry, the superblock,
  *              and the code utilizing these flags is protected with HDasserts
  *              to enforce this. This restraint can certainly be relaxed in
  *              the future if the the need for multiple entries getting flushed
@@ -1711,11 +1708,9 @@ typedef struct H5C_cache_entry_t {
     hbool_t			flush_marker;
     hbool_t                     flush_me_last;
 #ifdef H5_HAVE_PARALLEL
-    hbool_t                     flush_me_collectively;
     hbool_t			clear_on_unprotect;
     hbool_t			flush_immediately;
     hbool_t			coll_access;
-    hbool_t                     ind_access_while_coll;
 #endif /* H5_HAVE_PARALLEL */
     hbool_t			flush_in_progress;
     hbool_t			destroy_in_progress;
@@ -1741,8 +1736,10 @@ typedef struct H5C_cache_entry_t {
     struct H5C_cache_entry_t  *	prev;
     struct H5C_cache_entry_t  *	aux_next;
     struct H5C_cache_entry_t  *	aux_prev;
+#ifdef H5_HAVE_PARALLEL
     struct H5C_cache_entry_t  *	coll_next;
     struct H5C_cache_entry_t  *	coll_prev;
+#endif /* H5_HAVE_PARALLEL */
 
 #if H5C_COLLECT_CACHE_ENTRY_STATS
     /* cache entry stats fields */
diff --git a/src/H5D.c b/src/H5D.c
index cbcd2bf..0f5a769 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -109,7 +109,7 @@ H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
     H5G_loc_t	   loc;                 /* Object location to insert dataset into */
     H5D_t	   *dset = NULL;        /* New dataset's info */
     const H5S_t    *space;              /* Dataspace for dataset */
-    hid_t           dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t           dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t           ret_value;          /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -139,8 +139,8 @@ H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&dapl_id, H5P_DATASET_ACCESS, H5P_DATASET_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Create the new dataset & get its ID */
     if(NULL == (dset = H5D__create_named(&loc, name, type_id, space, lcpl_id, dcpl_id, dapl_id, dxpl_id)))
@@ -199,7 +199,7 @@ H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id,
     H5G_loc_t	   loc;                 /* Object location to insert dataset into */
     H5D_t	   *dset = NULL;        /* New dataset's info */
     const H5S_t    *space;              /* Dataspace for dataset */
-    hid_t           dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t           dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t           ret_value;          /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -219,8 +219,8 @@ H5Dcreate_anon(hid_t loc_id, hid_t type_id, hid_t space_id, hid_t dcpl_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&dapl_id, H5P_DATASET_ACCESS, H5P_DATASET_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* build and open the new dataset */
     if(NULL == (dset = H5D__create(loc.oloc->file, type_id, space, dcpl_id, dapl_id, dxpl_id)))
@@ -275,7 +275,7 @@ H5Dopen2(hid_t loc_id, const char *name, hid_t dapl_id)
 {
     H5D_t       *dset = NULL;
     H5G_loc_t   loc;                    /* Object location of group */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl to use to open datset */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl to use to open datset */
     hid_t       ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -288,8 +288,8 @@ H5Dopen2(hid_t loc_id, const char *name, hid_t dapl_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&dapl_id, H5P_DATASET_ACCESS, H5P_DATASET_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&dapl_id, H5P_CLS_DACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the dataset */
     if(NULL == (dset = H5D__open_name(&loc, name, dapl_id, dxpl_id)))
@@ -410,7 +410,7 @@ H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
 
     /* Read dataspace address and return */
-    if(H5D__get_space_status(dset, allocation, H5AC_ind_dxpl_id) < 0)
+    if(H5D__get_space_status(dset, allocation, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get space status")
 
 done:
@@ -579,7 +579,7 @@ H5Dget_storage_size(hid_t dset_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataset")
 
     /* Set return value */
-    if(H5D__get_storage_size(dset, H5AC_ind_dxpl_id, &ret_value) < 0)
+    if(H5D__get_storage_size(dset, H5AC_ind_read_dxpl_id, &ret_value) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, 0, "can't get size of dataset's storage")
 
 done:
@@ -910,8 +910,8 @@ H5Dset_extent(hid_t dset_id, const hsize_t size[])
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified")
 
     /* Private function */
-    if(H5D__set_extent(dset, size, H5AC_coll_write_coll_read_dxpl_id) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set extent on dataset")
+    if(H5D__set_extent(dset, size, H5AC_ind_read_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set extend dataset")
 
 done:
         FUNC_LEAVE_API(ret_value)
@@ -944,11 +944,11 @@ H5Dflush(hid_t dset_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
 
     /* Flush any dataset information still cached in memory */
-    if(H5D__flush_real(dset, H5AC_dxpl_id) < 0)
-	HDONE_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to flush cached dataset info")
+    if(H5D__flush_real(dset, H5AC_ind_read_dxpl_id) < 0)
+        HDONE_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to flush cached dataset info")
 
     /* Flush object's metadata to file */
-    if(H5O_flush_common(&dset->oloc, dset_id, H5AC_dxpl_id) < 0)
+    if(H5O_flush_common(&dset->oloc, dset_id, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush dataset and object flush callback")
 
 done:
@@ -982,7 +982,7 @@ H5Drefresh(hid_t dset_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
 
     /* Call private function to refresh the dataset object */
-    if((H5D__refresh(dset_id, dset, H5AC_dxpl_id)) < 0)
+    if((H5D__refresh(dset_id, dset, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to refresh dataset")
 
 done:
@@ -993,7 +993,11 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5Dformat_convert (Internal)
  *
- * Purpose:     Convert a dataset's chunk indexing type to version 1 B-tree
+ * Purpose:     For chunked: 
+ *		  Convert the chunk indexing type to version 1 B-tree if not
+ *		For compact/contiguous: 
+ *		  Downgrade layout version to 3 if greater than 3
+ *		For virtual: no conversion
  *
  * Return:      Non-negative on success, negative on failure
  *
@@ -1014,17 +1018,31 @@ H5Dformat_convert(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")
 
-    /* Nothing to do if not a chunked dataset  */
-    if(dset->shared->layout.type != H5D_CHUNKED)
-	HGOTO_DONE(SUCCEED)
-
-    /* Nothing to do if the chunk indexing type is already version 1 B-tree */
-    if(dset->shared->layout.u.chunk.idx_type == H5D_CHUNK_IDX_BTREE)
-	HGOTO_DONE(SUCCEED)
-
-    /* Call private function to do the conversion */
-    if((H5D__format_convert(dset, H5AC_dxpl_id)) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to convert chunk indexing type for dataset")
+    switch(dset->shared->layout.type) {
+	case H5D_CHUNKED:
+	    /* Convert the chunk indexing type to version 1 B-tree if not */
+	    if(dset->shared->layout.u.chunk.idx_type != H5D_CHUNK_IDX_BTREE) {
+		    if((H5D__format_convert(dset, H5AC_ind_read_dxpl_id)) < 0)
+		        HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to downgrade chunk indexing type for dataset")
+	    }
+	    break;
+
+	case H5D_CONTIGUOUS:
+	case H5D_COMPACT:
+	    /* Downgrade the layout version to 3 if greater than 3 */
+	    if(dset->shared->layout.version > H5O_LAYOUT_VERSION_DEFAULT) {
+		    if((H5D__format_convert(dset, H5AC_ind_read_dxpl_id)) < 0)
+		        HGOTO_ERROR(H5E_DATASET, H5E_CANTLOAD, FAIL, "unable to downgrade layout version for dataset")
+	    }
+	    break;
+
+	case H5D_VIRTUAL:
+	    /* Nothing to do even though layout is version 4 */
+	    break;
+
+	default: 
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unknown dataset layout type")
+    } /* end switch */
 
 done:
     FUNC_LEAVE_API(ret_value)
diff --git a/src/H5Dbtree2.c b/src/H5Dbtree2.c
index 8d005fd..363d57a 100644
--- a/src/H5Dbtree2.c
+++ b/src/H5Dbtree2.c
@@ -89,9 +89,7 @@ typedef struct H5D_bt2_ud_t {
 static void *H5D__bt2_crt_context(void *udata);
 static herr_t H5D__bt2_dst_context(void *ctx);
 static herr_t H5D__bt2_store(void *native, const void *udata);
-static herr_t H5D__bt2_compare(const void *rec1, const void *rec2);
-static void *H5D__bt2_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t obj_addr);
-static herr_t H5D__bt2_dst_dbg_context(void *_u_ctx);
+static herr_t H5D__bt2_compare(const void *rec1, const void *rec2, int *result);
 
 /* v2 B-tree class for indexing non-filtered chunked datasets */
 static herr_t H5D__bt2_unfilt_encode(uint8_t *raw, const void *native, void *ctx);
@@ -189,9 +187,7 @@ const H5B2_class_t H5D_BT2[1] = {{  	/* B-tree class information */
     H5D__bt2_compare,   	/* Record comparison callback */
     H5D__bt2_unfilt_encode,    	/* Record encoding callback */
     H5D__bt2_unfilt_decode,    	/* Record decoding callback */
-    H5D__bt2_unfilt_debug,  	/* Record debugging callback */
-    H5D__bt2_crt_dbg_context,  	/* Create debugging context */
-    H5D__bt2_dst_dbg_context    /* Destroy debugging context */
+    H5D__bt2_unfilt_debug   	/* Record debugging callback */
 }};
 
 /* v2 B-tree class for indexing filtered chunked datasets */
@@ -205,9 +201,7 @@ const H5B2_class_t H5D_BT2_FILT[1] = {{	/* B-tree class information */
     H5D__bt2_compare,           /* Record comparison callback */
     H5D__bt2_filt_encode,       /* Record encoding callback */
     H5D__bt2_filt_decode,       /* Record decoding callback */
-    H5D__bt2_filt_debug,        /* Record debugging callback */
-    H5D__bt2_crt_dbg_context,  	/* Create debugging context */
-    H5D__bt2_dst_dbg_context   	/* Destroy debugging context */
+    H5D__bt2_filt_debug         /* Record debugging callback */
 }};
 
 
@@ -356,12 +350,12 @@ H5D__bt2_store(void *record, const void *_udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5D__bt2_compare(const void *_udata, const void *_rec2)
+H5D__bt2_compare(const void *_udata, const void *_rec2, int *result)
 {
     const H5D_bt2_ud_t *udata = (const H5D_bt2_ud_t *)_udata;	/* User data */
     const H5D_chunk_rec_t *rec1 = &(udata->rec);	/* The search record */
     const H5D_chunk_rec_t *rec2 = (const H5D_chunk_rec_t *)_rec2;	/* The native record */
-    herr_t ret_value = FAIL; 	/* Return value */
+    herr_t ret_value = SUCCEED; 	/* Return value */
 
     FUNC_ENTER_STATIC_NOERR
 
@@ -370,117 +364,13 @@ H5D__bt2_compare(const void *_udata, const void *_rec2)
     HDassert(rec2);
 
     /* Compare the offsets but ignore the other fields */
-    ret_value = H5VM_vector_cmp_u(udata->ndims, rec1->scaled, rec2->scaled);
+    *result = H5VM_vector_cmp_u(udata->ndims, rec1->scaled, rec2->scaled);
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5D__bt2_compare() */
 
 

 /*-------------------------------------------------------------------------
- * Function:    H5D__bt2_crt_dbg_context
- *
- * Purpose:     Create user data for debugged callback context 
- *
- * Return:      Success:        non-NULL
- *              Failure:        NULL
- *
- * Programmer:  Vailin Choi; June 2010
- *
- *-------------------------------------------------------------------------
- */
-static void *
-H5D__bt2_crt_dbg_context(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t obj_addr)
-{
-    H5D_bt2_ctx_ud_t *u_ctx = NULL;     /* User data for creating callback context */
-    H5O_loc_t obj_loc;          /* Pointer to an object's location */
-    hbool_t obj_opened = FALSE; /* Flag to indicate that the object header was opened */
-    H5O_layout_t layout;        /* Layout message */
-    void *ret_value = NULL;     /* Return value */
-
-    FUNC_ENTER_STATIC
-
-    /* Sanity check */
-    HDassert(f);
-    HDassert(H5F_addr_defined(obj_addr));
-
-    /* Set up the object header location info */
-    H5O_loc_reset(&obj_loc);
-    obj_loc.file = f;
-    obj_loc.addr = obj_addr;
-
-    /* Open the object header where the layout message resides */
-    if(H5O_open(&obj_loc) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "can't open object header")
-    obj_opened = TRUE;
-
-    /* Read the layout message */
-    if(NULL == H5O_msg_read(&obj_loc, H5O_LAYOUT_ID, &layout, dxpl_id))
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get layout info")
-
-    /* close the object header */
-    if(H5O_close(&obj_loc) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, NULL, "can't close object header")
-
-    /* Allocate structure for storing user data to create callback context */
-    if(NULL == (u_ctx = H5FL_MALLOC(H5D_bt2_ctx_ud_t)))
-        HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate user data context structure ")
-
-    /* Set information for context structure */
-    u_ctx->f = f;
-    u_ctx->chunk_size = layout.u.chunk.size;
-    u_ctx->ndims = layout.u.chunk.ndims - 1;
-
-    /* Set return value */
-    ret_value = u_ctx;
-
-done:
-     /* Cleanup on error */
-    if(ret_value == NULL) {
-        /* Release context structure */
-        if(u_ctx)
-            u_ctx = H5FL_FREE(H5D_bt2_ctx_ud_t, u_ctx);
-
-        /* Close object header */
-        if(obj_opened) {
-            if(H5O_close(&obj_loc) < 0)
-                HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, NULL, "can't close object header")
-        } /* end if */
-    } /* end if */
-
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* H5D__bt2_crt_dbg_context() */
-
-

-/*-------------------------------------------------------------------------
- * Function:    H5D__bt2_dst_dbg_context
- *
- * Purpose:     Destroy client callback context
- *
- * Return:      Success:        non-negative
- *              Failure:        negative
- *
- * Programmer:  Vailin Choi; June 2010
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5D__bt2_dst_dbg_context(void *_u_ctx)
-{
-    H5D_bt2_ctx_ud_t *u_ctx = (H5D_bt2_ctx_ud_t *)_u_ctx; /* User data for creating callback context */
-
-    FUNC_ENTER_STATIC_NOERR
-
-    /* Sanity check */
-    HDassert(u_ctx);
-
-    /* Release user data for creating callback context */
-    u_ctx = H5FL_FREE(H5D_bt2_ctx_ud_t, u_ctx);
-
-    FUNC_LEAVE_NOAPI(SUCCEED)
-} /* H5D__bt2_dst_dbg_context() */
-
-

-/*-------------------------------------------------------------------------
  * Function:    H5D__bt2_unfilt_encode
  *
  * Purpose:     Encode native information into raw form for storing on disk
@@ -565,23 +455,24 @@ H5D__bt2_unfilt_decode(const uint8_t *raw, void *_record, void *_ctx)
  */
 static herr_t
 H5D__bt2_unfilt_debug(FILE *stream, int indent, int fwidth,
-    const void *_record, const void *_u_ctx)
+    const void *_record, const void *_ctx)
 {
     const H5D_chunk_rec_t *record = (const H5D_chunk_rec_t *)_record; /* The native record */
-    const H5D_bt2_ctx_ud_t *u_ctx = (const H5D_bt2_ctx_ud_t *)_u_ctx; 	  /* User data for creating callback context */
+    const H5D_bt2_ctx_t *ctx = (const H5D_bt2_ctx_t *)_ctx; 	  /* Callback context */
     unsigned u;		/* Local index variable */
 
     FUNC_ENTER_STATIC_NOERR
 
     /* Sanity checks */
     HDassert(record);
-    HDassert(u_ctx->chunk_size == record->nbytes);
+    HDassert(ctx->chunk_size == record->nbytes);
     HDassert(0 == record->filter_mask);
 
     HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth, "Chunk address:", record->chunk_addr);
+
     HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
-    for(u = 0; u < u_ctx->ndims; u++)
-        HDfprintf(stream, "%s%Hd", u?", ":"", record->scaled[u] * u_ctx->dim[u]);
+    for(u = 0; u < ctx->ndims; u++)
+        HDfprintf(stream, "%s%Hd", u?", ":"", record->scaled[u] * ctx->dim[u]);
     HDfputs("}\n", stream);
 
     FUNC_LEAVE_NOAPI(SUCCEED)
@@ -671,7 +562,7 @@ H5D__bt2_filt_decode(const uint8_t *raw, void *_record, void *_ctx)
 /*-------------------------------------------------------------------------
  * Function:	H5D__bt2_filt_debug
  *
- * Purpose:	Debug native form of record (filterd)
+ * Purpose:	Debug native form of record (filtered)
  *
  * Return:	Success:	non-negative
  *		Failure:	negative
@@ -682,10 +573,10 @@ H5D__bt2_filt_decode(const uint8_t *raw, void *_record, void *_ctx)
  */
 static herr_t
 H5D__bt2_filt_debug(FILE *stream, int indent, int fwidth,
-    const void *_record, const void *_u_ctx)
+    const void *_record, const void *_ctx)
 {
     const H5D_chunk_rec_t *record = (const H5D_chunk_rec_t *)_record;   /* The native record */
-    const H5D_bt2_ctx_ud_t *u_ctx = (const H5D_bt2_ctx_ud_t *)_u_ctx; 	/* User data for creating callback context */
+    const H5D_bt2_ctx_t *ctx = (const H5D_bt2_ctx_t *)_ctx; 	/* Callback context */
     unsigned u;		/* Local index variable */
  
     FUNC_ENTER_STATIC_NOERR
@@ -700,8 +591,8 @@ H5D__bt2_filt_debug(FILE *stream, int indent, int fwidth,
     HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth, "Filter mask:", record->filter_mask);
 
     HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Logical offset:");
-    for(u = 0; u < u_ctx->ndims; u++)
-        HDfprintf(stream, "%s%Hd", u?", ":"", record->scaled[u] * u_ctx->dim[u]);
+    for(u = 0; u < ctx->ndims; u++)
+        HDfprintf(stream, "%s%Hd", u?", ":"", record->scaled[u] * ctx->dim[u]);
     HDfputs("}\n", stream);
 
     FUNC_LEAVE_NOAPI(SUCCEED)
@@ -963,9 +854,23 @@ H5D__bt2_idx_is_space_alloc(const H5O_storage_chunk_t *storage)
 static herr_t
 H5D__bt2_mod_cb(void *_record, void *_op_data, hbool_t *changed)
 {
+    H5D_bt2_ud_t *op_data = (H5D_bt2_ud_t *)_op_data;       /* User data for v2 B-tree calls */
+    H5D_chunk_rec_t *record = (H5D_chunk_rec_t *)_record;   /* Chunk record */
+
     FUNC_ENTER_STATIC_NOERR
 
-    *(H5D_chunk_rec_t *)_record = *(H5D_chunk_rec_t *)_op_data;
+/* Sanity check */
+#ifndef NDEBUG
+{
+    unsigned u;                 /* Local index variable */
+
+    for(u = 0; u < op_data->ndims; u++)
+        HDassert(record->scaled[u] == op_data->rec.scaled[u]);
+}
+#endif /* NDEBUG */
+
+    /* Modify record */
+    *record = op_data->rec;
 
     /* Note that the record changed */
     *changed = TRUE;
@@ -1038,18 +943,9 @@ H5D__bt2_idx_insert(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata,
     for(u = 0; u < (idx_info->layout->ndims - 1); u++)
         bt2_udata.rec.scaled[u] = udata->common.scaled[u];
 
-    if(udata->need_modify) {
-	HDassert(idx_info->pline->nused > 0);
-
-	/* Modify record for v2 B-tree */
-	if(H5B2_modify(bt2, idx_info->dxpl_id, &bt2_udata, H5D__bt2_mod_cb, &bt2_udata.rec) < 0)
-	    HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to modify record in v2 B-tree")
-    } /* end if */
-    else {
-	/* Insert record for object in v2 B-tree */
-	if(H5B2_insert(bt2, idx_info->dxpl_id, &bt2_udata) < 0)                
-            HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "couldn't insert record in v2 B-tree")
-    } /* end else */
+    /* Update record for v2 B-tree (could be insert or modify) */
+    if(H5B2_update(bt2, idx_info->dxpl_id, &bt2_udata, H5D__bt2_mod_cb, &bt2_udata) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTUPDATE, FAIL, "unable to update record in v2 B-tree")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 6e8ce1c..1cd9bb6 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -45,7 +45,7 @@
 /****************/
 
 #include "H5Dmodule.h"          /* This source code file is part of the H5D module */
-#define H5F_FRIEND		/*suppress error about including H5Fpkg	  */
+
 
 /***********/
 /* Headers */
@@ -56,7 +56,7 @@
 #endif /* H5_HAVE_PARALLEL */
 #include "H5Dpkg.h"		/* Dataset functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File functions			*/
+#include "H5Fprivate.h"		/* File functions			*/
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -287,8 +287,8 @@ static herr_t H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id,
     const H5D_dxpl_cache_t *dxpl_cache, H5D_rdcc_ent_t *ent, hbool_t reset);
 static herr_t H5D__chunk_cache_evict(const H5D_t *dset, hid_t dxpl_id,
     const H5D_dxpl_cache_t *dxpl_cache, H5D_rdcc_ent_t *ent, hbool_t flush);
-static hbool_t H5D__chunk_is_partial_edge_chunk(const hsize_t *chunk_scaled,
-    unsigned dset_ndims, const hsize_t *dset_dims, const uint32_t *chunk_dims);
+static hbool_t H5D__chunk_is_partial_edge_chunk(unsigned dset_ndims,
+    const uint32_t *chunk_dims, const hsize_t *chunk_scaled, const hsize_t *dset_dims);
 static void *H5D__chunk_lock(const H5D_io_info_t *io_info,
     H5D_chunk_ud_t *udata, hbool_t relax, hbool_t prev_unfilt_chunk);
 static herr_t H5D__chunk_unlock(const H5D_io_info_t *io_info,
@@ -298,8 +298,8 @@ static herr_t H5D__chunk_cache_prune(const H5D_t *dset, hid_t dxpl_id,
     const H5D_dxpl_cache_t *dxpl_cache, size_t size);
 static herr_t H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata, hbool_t new_unfilt_chunk);
 static herr_t H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info,
-    const H5F_block_t *old_chunk, H5F_block_t *new_chunk, hbool_t *need_insert, 
-    hbool_t *need_bt2_modify, hsize_t scaled[]);
+    const H5F_block_t *old_chunk, H5F_block_t *new_chunk, hbool_t *need_insert,
+    hsize_t scaled[]);
 #ifdef H5_HAVE_PARALLEL
 static herr_t H5D__chunk_collective_fill(const H5D_t *dset, hid_t dxpl_id,
     H5D_chunk_coll_info_t *chunk_info, size_t chunk_size, const void *fill_buf);
@@ -388,22 +388,35 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
     H5D_chk_idx_info_t idx_info;        /* Chunked index info */
     hsize_t scaled[H5S_MAX_RANK];       /* Scaled coordinates for this chunk */
     hbool_t need_insert = FALSE;        /* Whether the chunk needs to be inserted into the index */
+    H5D_io_info_t io_info;              /* to hold the dset and two dxpls (meta and raw data) */
+    hbool_t md_dxpl_generated = FALSE;  /* bool to indicate whether we should free the md_dxpl_id at exit */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_STATIC_TAG(dxpl_id, dset->oloc.addr, FAIL)
 
+    io_info.dset = dset;
+    io_info.raw_dxpl_id = dxpl_id;
+    io_info.md_dxpl_id = dxpl_id;
+
+    /* set the dxpl IO type for sanity checking at the FD layer */
+#ifdef H5_DEBUG_BUILD
+    if(H5D_set_io_info_dxpls(&io_info, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't set metadata and raw data dxpls")
+    md_dxpl_generated = TRUE;
+#endif /* H5_DEBUG_BUILD */
+
     /* Allocate dataspace and initialize it if it hasn't been. */
-    if(!(*layout->ops->is_space_alloc)(&layout->storage))
+    if(!(*layout->ops->is_space_alloc)(&layout->storage)) {
  	/* Allocate storage */
-        if(H5D__alloc_storage(dset, dxpl_id, H5D_ALLOC_WRITE, FALSE, NULL) < 0)
+        if(H5D__alloc_storage(&io_info, H5D_ALLOC_WRITE, FALSE, NULL) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
-
+    }
     /* Calculate the index of this chunk */
     H5VM_chunk_scaled(dset->shared->ndims, offset, layout->u.chunk.dim, scaled);
     scaled[dset->shared->ndims] = 0;
 
     /* Find out the file address of the chunk (if any) */
-    if(H5D__chunk_lookup(dset, dxpl_id, scaled, &udata) < 0)
+    if(H5D__chunk_lookup(dset, io_info.md_dxpl_id, scaled, &udata) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
 
     /* Sanity check */
@@ -421,7 +434,7 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
 
     /* Compose chunked index info struct */
     idx_info.f = dset->oloc.file;
-    idx_info.dxpl_id = dxpl_id;
+    idx_info.dxpl_id = io_info.md_dxpl_id;
     idx_info.pline = &(dset->shared->dcpl_cache.pline);
     idx_info.layout = &(dset->shared->layout.u.chunk);
     idx_info.storage = &(dset->shared->layout.storage.u.chunk);
@@ -432,7 +445,7 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
     /* Create the chunk it if it doesn't exist, or reallocate the chunk
      *  if its size changed.
      */
-    if(H5D__chunk_file_alloc(&idx_info, &old_chunk, &udata.chunk_block, &need_insert, &udata.need_modify, scaled) < 0)
+    if(H5D__chunk_file_alloc(&idx_info, &old_chunk, &udata.chunk_block, &need_insert, scaled) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "unable to allocate chunk")
 
     /* Make sure the address of the chunk is returned. */
@@ -447,19 +460,19 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
         const H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk);	/*raw data chunk cache */
 
         /* Fill the DXPL cache values for later use */
-        if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
+        if(H5D__get_dxpl_cache(io_info.raw_dxpl_id, &dxpl_cache) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
 
-        if(H5D__chunk_cache_evict(dset, dxpl_id, dxpl_cache, rdcc->slot[udata.idx_hint], FALSE) < 0)
+        if(H5D__chunk_cache_evict(dset, io_info.md_dxpl_id, dxpl_cache, rdcc->slot[udata.idx_hint], FALSE) < 0)
 	    HGOTO_ERROR(H5E_DATASET, H5E_CANTREMOVE, FAIL, "unable to evict chunk")
     } /* end if */
 
     /* Write the data to the file */
-    if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, data_size, dxpl_id, buf) < 0)
+    if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, data_size, io_info.raw_dxpl_id, buf) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
 
     /* Insert the chunk record into the index */
-    if((need_insert || udata.need_modify) && layout->storage.u.chunk.ops->insert) {
+    if(need_insert && layout->storage.u.chunk.ops->insert) {
         /* Set the chunk's filter mask to the new settings */
         udata.filter_mask = filters;
 
@@ -468,6 +481,10 @@ H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
     } /* end if */
 
 done:
+#ifdef H5_DEBUG_BUILD
+    if(md_dxpl_generated && H5I_dec_ref(io_info.md_dxpl_id) < 0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "can't close metadata dxpl")
+#endif /* H5_DEBUG_BUILD */
     FUNC_LEAVE_NOAPI_TAG(ret_value, FAIL)
 } /* end H5D__chunk_direct_write() */
 
@@ -571,11 +588,13 @@ herr_t
 H5D__chunk_set_sizes(H5D_t *dset)
 {
     uint64_t chunk_size;            /* Size of chunk in bytes */
+    unsigned max_enc_bytes_per_dim; /* Max. number of bytes required to encode this dimension */
     unsigned u;                     /* Iterator */
     herr_t ret_value = SUCCEED;     /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
 
+    /* Sanity checks */
     HDassert(dset);
 
     /* Increment # of chunk dimensions, to account for datatype size as last element */
@@ -584,6 +603,21 @@ H5D__chunk_set_sizes(H5D_t *dset)
     /* Set the last dimension of the chunk size to the size of the datatype */
     dset->shared->layout.u.chunk.dim[dset->shared->layout.u.chunk.ndims - 1] = (uint32_t)H5T_GET_SIZE(dset->shared->type);
 
+    /* Compute number of bytes to use for encoding chunk dimensions */
+    max_enc_bytes_per_dim = 0;
+    for(u = 0; u < (unsigned)dset->shared->layout.u.chunk.ndims; u++) {
+        unsigned enc_bytes_per_dim;     /* Number of bytes required to encode this dimension */
+
+        /* Get encoded size of dim, in bytes */
+        enc_bytes_per_dim = (H5VM_log2_gen(dset->shared->layout.u.chunk.dim[u]) + 8) / 8;
+
+        /* Check if this is the largest value so far */
+        if(enc_bytes_per_dim > max_enc_bytes_per_dim)
+            max_enc_bytes_per_dim = enc_bytes_per_dim;
+    } /* end for */
+    HDassert(max_enc_bytes_per_dim > 0 && max_enc_bytes_per_dim <= 8);
+    dset->shared->layout.u.chunk.enc_bytes_per_dim = max_enc_bytes_per_dim;
+
     /* Compute and store the total size of a chunk */
     /* (Use 64-bit value to ensure that we can detect >4GB chunks) */
     for(u = 1, chunk_size = (uint64_t)dset->shared->layout.u.chunk.dim[0]; u < dset->shared->layout.u.chunk.ndims; u++)
@@ -1821,11 +1855,12 @@ htri_t
 H5D__chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr, hbool_t write_op)
 {
     const H5D_t *dataset = io_info->dset; /* Local pointer to dataset info */
-    hbool_t no_filters = TRUE;
+    hbool_t has_filters = FALSE;        /* Whether there are filters on the chunk or not */
     htri_t ret_value = FAIL;            /* Return value */
 
     FUNC_ENTER_PACKAGE
 
+    /* Sanity check */
     HDassert(io_info);
     HDassert(dataset);
 
@@ -1835,16 +1870,19 @@ H5D__chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr, hbool_t write_
     if(dataset->shared->dcpl_cache.pline.nused > 0) {
         if(dataset->shared->layout.u.chunk.flags
                 & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) {
-            no_filters = H5D__chunk_is_partial_edge_chunk(
-                    io_info->store->chunk.scaled, io_info->dset->shared->ndims,
-                    io_info->dset->shared->curr_dims, 
-                    io_info->dset->shared->layout.u.chunk.dim);
+            has_filters = !H5D__chunk_is_partial_edge_chunk(
+                    io_info->dset->shared->ndims,
+                    io_info->dset->shared->layout.u.chunk.dim,
+                    io_info->store->chunk.scaled,
+                    io_info->dset->shared->curr_dims);
         } /* end if */
         else
-            no_filters = FALSE;
+            has_filters = TRUE;
     } /* end if */
 
-    if(no_filters) {
+    if(has_filters)
+        ret_value = TRUE;
+    else {
 #ifdef H5_HAVE_PARALLEL
          /* If MPI based VFD is used and the file is opened for write access, must
           *         bypass the chunk-cache scheme because other MPI processes could
@@ -1885,9 +1923,7 @@ H5D__chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr, hbool_t write_
 #ifdef H5_HAVE_PARALLEL
         } /* end else */
 #endif /* H5_HAVE_PARALLEL */
-    } /* end if */
-    else
-        ret_value = TRUE;
+    } /* end else */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1978,7 +2014,7 @@ H5D__chunk_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
         chunk_info = H5D_CHUNK_GET_NODE_INFO(fm, chunk_node);
 
         /* Get the info for the chunk in the file */
-        if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
+        if(H5D__chunk_lookup(io_info->dset, io_info->md_dxpl_id, chunk_info->scaled, &udata) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
 
         /* Sanity check */
@@ -2111,7 +2147,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
         chunk_info = H5D_CHUNK_GET_NODE_INFO(fm, chunk_node);
 
         /* Look up the chunk */
-        if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
+        if(H5D__chunk_lookup(io_info->dset, io_info->md_dxpl_id, chunk_info->scaled, &udata) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
 
         /* Sanity check */
@@ -2154,7 +2190,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
             if(!H5F_addr_defined(udata.chunk_block.offset)) {
                 /* Compose chunked index info struct */
                 idx_info.f = io_info->dset->oloc.file;
-                idx_info.dxpl_id = io_info->dxpl_id;
+                idx_info.dxpl_id = io_info->md_dxpl_id;
                 idx_info.pline = &(io_info->dset->shared->dcpl_cache.pline);
                 idx_info.layout = &(io_info->dset->shared->layout.u.chunk);
                 idx_info.storage = &(io_info->dset->shared->layout.storage.u.chunk);
@@ -2163,7 +2199,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
                 udata.chunk_block.length = io_info->dset->shared->layout.u.chunk.size;
 
                 /* Allocate the chunk */
-		if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert, &udata.need_modify, chunk_info->scaled) < 0)
+		if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert, chunk_info->scaled) < 0)
 		    HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
 
                 /* Make sure the address of the chunk is returned. */
@@ -2195,7 +2231,7 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
 		HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk")
 	} /* end if */
 	else {
-            if((need_insert || udata.need_modify) && io_info->dset->shared->layout.storage.u.chunk.ops->insert)
+            if(need_insert && io_info->dset->shared->layout.storage.u.chunk.ops->insert)
                 if((io_info->dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata, NULL) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
 	} /* end else */
@@ -2640,13 +2676,14 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
     H5D_chunk_ud_t *udata)
 {
     H5D_rdcc_ent_t  *ent = NULL;        /* Cache entry */
-    hbool_t         found = FALSE;      /* In cache? */
-    unsigned        u;                  /* Counter */
     H5O_storage_chunk_t *sc = &(dset->shared->layout.storage.u.chunk);
-    herr_t	ret_value = SUCCEED;	/* Return value */
+    unsigned idx;                       /* Index of chunk in cache, if present */
+    hbool_t found = FALSE;              /* In cache? */
+    herr_t ret_value = SUCCEED;	        /* Return value */
 
     FUNC_ENTER_PACKAGE
 
+    /* Sanity checks */
     HDassert(dset);
     HDassert(dset->shared->layout.u.chunk.ndims > 0);
     H5D_CHUNK_STORAGE_INDEX_CHK(sc);
@@ -2656,30 +2693,39 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
     /* Initialize the query information about the chunk we are looking for */
     udata->common.layout = &(dset->shared->layout.u.chunk);
     udata->common.storage = &(dset->shared->layout.storage.u.chunk);
-    udata->common.scaled =  scaled;
+    udata->common.scaled = scaled;
 
     /* Reset information about the chunk we are looking for */
     udata->chunk_block.offset = HADDR_UNDEF;
     udata->chunk_block.length = 0;
     udata->filter_mask = 0;
     udata->new_unfilt_chunk = FALSE;
-    udata->need_modify = FALSE;
 
     /* Check for chunk in cache */
     if(dset->shared->cache.chunk.nslots > 0) {
-	udata->idx_hint = H5D__chunk_hash_val(dset->shared, scaled);
-        ent = dset->shared->cache.chunk.slot[udata->idx_hint];
+        /* Determine the chunk's location in the hash table */
+	idx = H5D__chunk_hash_val(dset->shared, scaled);
 
-        if(ent)
-            for(u = 0, found = TRUE; u < dset->shared->ndims; u++)
+        /* Get the chunk cache entry for that location */
+        ent = dset->shared->cache.chunk.slot[idx];
+        if(ent) {
+            unsigned u;                  /* Counter */
+
+            /* Speculatively set the 'found' flag */
+            found = TRUE;
+
+            /* Verify that the cache entry is the correct chunk */
+            for(u = 0; u < dset->shared->ndims; u++)
                 if(scaled[u] != ent->scaled[u]) {
                     found = FALSE;
                     break;
                 } /* end if */
+        } /* end if */
     } /* end if */
 
-    /* Find chunk addr */
+    /* Retrieve chunk addr */
     if(found) {
+        udata->idx_hint = idx;
         udata->chunk_block.offset = ent->chunk_block.offset;
         udata->chunk_block.length = ent->chunk_block.length;;
 	udata->chunk_idx = ent->chunk_idx;
@@ -2692,7 +2738,7 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
         if(!H5D__chunk_cinfo_cache_found(&dset->shared->cache.chunk.last, udata)) {
             H5D_chk_idx_info_t idx_info;        /* Chunked index info */
 #ifdef H5_HAVE_PARALLEL
-            H5P_coll_md_read_flag_t temp_flag;          /* temp flag to hold the coll metadata read setting */
+            H5P_coll_md_read_flag_t temp_cmr;   /* Temp value to hold the coll metadata read setting */
 #endif /* H5_HAVE_PARALLEL */
 
             /* Compose chunked index info struct */
@@ -2708,9 +2754,9 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
                    as it is highly unlikely that users would read the
                    same chunks from all processes. MSC - might turn on
                    for root node? */
-                temp_flag = idx_info.f->coll_md_read;
-                idx_info.f->coll_md_read = H5P_FORCE_FALSE;
-            }
+                temp_cmr = H5F_COLL_MD_READ(idx_info.f);
+                H5F_set_coll_md_read(idx_info.f, H5P_FORCE_FALSE);
+            } /* end if */
 #endif /* H5_HAVE_PARALLEL */
 
             /* Go get the chunk information */
@@ -2718,9 +2764,8 @@ H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *scaled,
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't query chunk address")
 
 #ifdef H5_HAVE_PARALLEL
-            if(H5F_HAS_FEATURE(idx_info.f, H5FD_FEAT_HAS_MPI)) {
-                idx_info.f->coll_md_read = temp_flag;
-            }
+            if(H5F_HAS_FEATURE(idx_info.f, H5FD_FEAT_HAS_MPI))
+                H5F_set_coll_md_read(idx_info.f, temp_cmr);
 #endif /* H5_HAVE_PARALLEL */
 
             /* Cache the information retrieved */
@@ -2781,7 +2826,6 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
         udata.chunk_block.length = dset->shared->layout.u.chunk.size;
         udata.filter_mask = 0;
 	udata.chunk_idx = ent->chunk_idx;
-	udata.need_modify = FALSE;
 
         /* Should the chunk be filtered before writing it to disk? */
         if(dset->shared->dcpl_cache.pline.nused
@@ -2859,7 +2903,7 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
             /* Create the chunk it if it doesn't exist, or reallocate the chunk
              *  if its size changed.
              */
-	    if(H5D__chunk_file_alloc(&idx_info, &(ent->chunk_block), &udata.chunk_block, &need_insert, &udata.need_modify, ent->scaled) < 0)
+	    if(H5D__chunk_file_alloc(&idx_info, &(ent->chunk_block), &udata.chunk_block, &need_insert, ent->scaled) < 0)
 		HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
 
             /* Update the chunk entry's info, in case it was allocated or relocated */
@@ -2870,11 +2914,11 @@ H5D__chunk_flush_entry(const H5D_t *dset, hid_t dxpl_id, const H5D_dxpl_cache_t
         /* Write the data to the file */
         HDassert(H5F_addr_defined(udata.chunk_block.offset));
         H5_CHECK_OVERFLOW(udata.chunk_block.length, hsize_t, size_t);
-        if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, (size_t)udata.chunk_block.length, dxpl_id, buf) < 0)
+        if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, (size_t)udata.chunk_block.length, H5AC_rawdata_dxpl_id, buf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
 
         /* Insert the chunk record into the index */
-	if((need_insert || udata.need_modify) && dset->shared->layout.storage.u.chunk.ops->insert)
+	if(need_insert && dset->shared->layout.storage.u.chunk.ops->insert)
             if((dset->shared->layout.storage.u.chunk.ops->insert)(&idx_info, &udata, dset) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
 
@@ -3160,7 +3204,8 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
     HDassert(io_info->store);
     HDassert(udata);
     HDassert(dset);
-    HDassert(TRUE == H5P_isa_class(io_info->dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(io_info->md_dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(io_info->raw_dxpl_id, H5P_DATASET_XFER));
     HDassert(!(udata->new_unfilt_chunk && prev_unfilt_chunk));
     HDassert(!rdcc->tmp_head);
 
@@ -3302,9 +3347,9 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
             else if(layout->u.chunk.flags
                     & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) {
                 /* Check if this is an edge chunk */
-                if(H5D__chunk_is_partial_edge_chunk(
-                        io_info->store->chunk.scaled, io_info->dset->shared->ndims,
-                        io_info->dset->shared->curr_dims, layout->u.chunk.dim)) {
+                if(H5D__chunk_is_partial_edge_chunk(io_info->dset->shared->ndims,
+                        layout->u.chunk.dim, io_info->store->chunk.scaled,
+                        io_info->dset->shared->curr_dims)) {
                     /* Disable the filters for both writing and reading */
                     disable_filters = TRUE;
                     old_pline = NULL;
@@ -3312,8 +3357,6 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
                 } /* end if */
             } /* end if */
         } /* end if */
-        else
-            HDassert(!udata->new_unfilt_chunk && !prev_unfilt_chunk);
 
         if(relax) {
             /*
@@ -3346,7 +3389,7 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
                  * size in memory, so allocate memory big enough. */
                 if(NULL == (chunk = H5D__chunk_mem_alloc(my_chunk_alloc, (udata->new_unfilt_chunk ? old_pline : pline))))
                     HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
-                if(H5F_block_read(dset->oloc.file, H5FD_MEM_DRAW, chunk_addr, my_chunk_alloc, io_info->dxpl_id, chunk) < 0)
+                if(H5F_block_read(dset->oloc.file, H5FD_MEM_DRAW, chunk_addr, my_chunk_alloc, io_info->raw_dxpl_id, chunk) < 0)
                     HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk")
 
 		if(old_pline && old_pline->nused) {
@@ -3400,14 +3443,14 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
                     /* (use the compact dataset storage buffer as the fill value buffer) */
                     if(H5D__fill_init(&fb_info, chunk, NULL, NULL, NULL, NULL,
                             &dset->shared->dcpl_cache.fill, dset->shared->type,
-                            dset->shared->type_id, (size_t)0, chunk_size, io_info->dxpl_id) < 0)
+                            dset->shared->type_id, (size_t)0, chunk_size, io_info->md_dxpl_id) < 0)
                         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't initialize fill buffer info")
                     fb_info_init = TRUE;
 
                     /* Check for VL datatype & non-default fill value */
                     if(fb_info.has_vlen_fill_type)
                         /* Fill the buffer with VL datatype fill values */
-                        if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, io_info->dxpl_id) < 0)
+                        if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, io_info->md_dxpl_id) < 0)
                             HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, NULL, "can't refill fill value buffer")
                 } /* end if */
                 else
@@ -3428,10 +3471,10 @@ H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata,
             if(!ent || !ent->locked) {
                 /* Preempt enough things from the cache to make room */
                 if(ent) {
-                    if(H5D__chunk_cache_evict(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, ent, TRUE) < 0)
+                    if(H5D__chunk_cache_evict(io_info->dset, io_info->md_dxpl_id, io_info->dxpl_cache, ent, TRUE) < 0)
                         HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache")
                 } /* end if */
-                if(H5D__chunk_cache_prune(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, chunk_size) < 0)
+                if(H5D__chunk_cache_prune(io_info->dset, io_info->md_dxpl_id, io_info->dxpl_cache, chunk_size) < 0)
                     HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache")
 
                 /* Create a new entry */
@@ -3541,6 +3584,7 @@ H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata,
 
     FUNC_ENTER_STATIC
 
+    /* Sanity check */
     HDassert(io_info);
     HDassert(udata);
 
@@ -3548,24 +3592,20 @@ H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata,
         /*
          * It's not in the cache, probably because it's too big.  If it's
          * dirty then flush it to disk.  In any case, free the chunk.
-         * Note: we have to copy the layout and filter messages so we
-         *	 don't discard the `const' qualifier.
          */
         hbool_t is_unfiltered_edge_chunk = FALSE; /* Whether the chunk is an unfiltered edge chunk */
 
         /* Check if we should disable filters on this chunk */
         if(udata->new_unfilt_chunk) {
-            HDassert(layout->u.chunk.flags
-                & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS);
+            HDassert(layout->u.chunk.flags & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS);
 
             is_unfiltered_edge_chunk = TRUE;
         } /* end if */
-        else if(layout->u.chunk.flags
-                & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) {
+        else if(layout->u.chunk.flags & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) {
             /* Check if the chunk is an edge chunk, and disable filters if so */
             is_unfiltered_edge_chunk = H5D__chunk_is_partial_edge_chunk(
-                    io_info->store->chunk.scaled, io_info->dset->shared->ndims,
-                    io_info->dset->shared->curr_dims, layout->u.chunk.dim);
+                    io_info->dset->shared->ndims, layout->u.chunk.dim,
+                    io_info->store->chunk.scaled, io_info->dset->shared->curr_dims);
         } /* end if */
 
         if(dirty) {
@@ -3578,14 +3618,13 @@ H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata,
             if(udata->new_unfilt_chunk)
                 fake_ent.edge_chunk_state |= H5D_RDCC_NEWLY_DISABLED_FILTERS;
 	    HDmemcpy(fake_ent.scaled, udata->common.scaled, sizeof(hsize_t) * layout->u.chunk.ndims);
-	    HDmemcpy(fake_ent.scaled, udata->common.scaled, sizeof(hsize_t) * layout->u.chunk.ndims);
             HDassert(layout->u.chunk.size > 0);
 	    fake_ent.chunk_idx = udata->chunk_idx;
             fake_ent.chunk_block.offset = udata->chunk_block.offset;
             fake_ent.chunk_block.length = udata->chunk_block.length;
             fake_ent.chunk = (uint8_t *)chunk;
 
-            if(H5D__chunk_flush_entry(io_info->dset, io_info->dxpl_id, io_info->dxpl_cache, &fake_ent, TRUE) < 0)
+            if(H5D__chunk_flush_entry(io_info->dset, io_info->md_dxpl_id, io_info->dxpl_cache, &fake_ent, TRUE) < 0)
                 HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush indexed storage buffer")
         } /* end if */
         else {
@@ -3724,9 +3763,9 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
-    hsize_t old_dim[])
+H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_t old_dim[])
 {
+    const H5D_t *dset = io_info->dset;  /* the dataset pointer */
     H5D_chk_idx_info_t idx_info;        /* Chunked index info */
     const H5D_chunk_ops_t *ops = dset->shared->layout.storage.u.chunk.ops;      /* Chunk operations */
     hsize_t     min_unalloc[H5O_LAYOUT_NDIMS]; /* First chunk in each dimension that is unallocated (in scaled coordinates) */
@@ -3750,6 +3789,8 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
     hbool_t     using_mpi = FALSE;    /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
     H5D_chunk_coll_info_t chunk_info; /* chunk address information for doing I/O */
 #endif /* H5_HAVE_PARALLEL */
+    hid_t       md_dxpl_id = io_info->md_dxpl_id;
+    hid_t       raw_dxpl_id = io_info->raw_dxpl_id;
     hbool_t	carry;          /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
     unsigned    space_ndims;    /* Dataset's space rank */
     const hsize_t *space_dim;   /* Dataset's dataspace dimensions */
@@ -3764,13 +3805,14 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
     const H5O_storage_chunk_t *sc = &(layout->storage.u.chunk);
     herr_t	ret_value = SUCCEED;	/* Return value */
 
-    FUNC_ENTER_PACKAGE_TAG(dxpl_id, dset->oloc.addr, FAIL)
+    FUNC_ENTER_PACKAGE_TAG(md_dxpl_id, dset->oloc.addr, FAIL)
 
     /* Check args */
     HDassert(dset && H5D_CHUNKED == layout->type);
     HDassert(layout->u.chunk.ndims > 0 && layout->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
     H5D_CHUNK_STORAGE_INDEX_CHK(sc);
-    HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(md_dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(raw_dxpl_id, H5P_DATASET_XFER));
 
     /* Retrieve the dataset dimensions */
     space_dim = dset->shared->curr_dims;
@@ -3801,7 +3843,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
 #endif  /* H5_HAVE_PARALLEL */
 
     /* Fill the DXPL cache values for later use */
-    if(H5D__get_dxpl_cache(dxpl_id, &dxpl_cache) < 0)
+    if(H5D__get_dxpl_cache(raw_dxpl_id, &dxpl_cache) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
 
     /* Calculate the minimum and maximum chunk offsets in each dimension, and
@@ -3854,7 +3896,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
         if(H5D__fill_init(&fb_info, NULL, (H5MM_allocate_t)H5D__chunk_mem_alloc,
                 (void *)pline, (H5MM_free_t)H5D__chunk_mem_xfree, (void *)pline,
                 &dset->shared->dcpl_cache.fill, dset->shared->type,
-                dset->shared->type_id, (size_t)0, orig_chunk_size, dxpl_id) < 0)
+                dset->shared->type_id, (size_t)0, orig_chunk_size, md_dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
         fb_info_init = TRUE;
 
@@ -3891,7 +3933,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
 
     /* Compose chunked index info struct */
     idx_info.f = dset->oloc.file;
-    idx_info.dxpl_id = dxpl_id;
+    idx_info.dxpl_id = md_dxpl_id;
     idx_info.pline = &dset->shared->dcpl_cache.pline;
     idx_info.layout = &dset->shared->layout.u.chunk;
     idx_info.storage = &dset->shared->layout.storage.u.chunk;
@@ -3961,7 +4003,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
             hbool_t need_insert = FALSE;    /* Whether the chunk needs to be inserted into the index */
 
 	    /* Look up this chunk */
-	    if(H5D__chunk_lookup(dset, dxpl_id, scaled, &udata) < 0)
+	    if(H5D__chunk_lookup(dset, md_dxpl_id, scaled, &udata) < 0)
 		HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
 #ifndef NDEBUG
             /* None of the chunks should be allocated */
@@ -4002,11 +4044,11 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
                 } /* end if */
 
                 /* Fill the buffer with VL datatype fill values */
-                if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, dxpl_id) < 0)
+                if(H5D__fill_refill_vl(&fb_info, fb_info.elmts_per_buf, md_dxpl_id) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
 
                 /* Check if there are filters which need to be applied to the chunk */
-                if(!nunfilt_edge_chunk_dims) {
+                if((pline->nused > 0) && !nunfilt_edge_chunk_dims) {
                     size_t nbytes = orig_chunk_size;
 
                     /* Push the chunk through the filters */
@@ -4035,10 +4077,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
             udata.chunk_block.offset = HADDR_UNDEF;
             H5_CHECKED_ASSIGN(udata.chunk_block.length, uint32_t, chunk_size, size_t);
             udata.filter_mask = filter_mask;
-	    udata.need_modify = FALSE;
 
             /* Allocate the chunk (with all processes) */
-	    if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert, &udata.need_modify, scaled) < 0)
+	    if(H5D__chunk_file_alloc(&idx_info, NULL, &udata.chunk_block, &need_insert, scaled) < 0)
 		HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
             HDassert(H5F_addr_defined(udata.chunk_block.offset));
 
@@ -4054,6 +4095,9 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
                     /* collect all chunk addresses to be written to
                        write collectively at the end */
                     /* allocate/resize address array if no more space left */
+                    /* Note that if we add support for parallel filters we must
+                     * also store an array of chunk sizes and pass it to the
+                     * apporpriate collective write function */
                     if(0 == chunk_info.num_io % 1024)
                         if(NULL == (chunk_info.addr = (haddr_t *)H5MM_realloc(chunk_info.addr, (chunk_info.num_io + 1024) * sizeof(haddr_t))))
                             HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "memory allocation failed for chunk addresses")
@@ -4067,7 +4111,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
                 } /* end if */
                 else {
 #endif /* H5_HAVE_PARALLEL */
-                    if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, chunk_size, dxpl_id, *fill_buf) < 0)
+                    if(H5F_block_write(dset->oloc.file, H5FD_MEM_DRAW, udata.chunk_block.offset, chunk_size, raw_dxpl_id, *fill_buf) < 0)
                         HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
 #ifdef H5_HAVE_PARALLEL
                 } /* end else */
@@ -4075,7 +4119,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
             } /* end if */
 
             /* Insert the chunk record into the index */
-	    if((need_insert || udata.need_modify) && ops->insert)
+	    if(need_insert && ops->insert)
                 if((ops->insert)(&idx_info, &udata, dset) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert chunk addr into index")
 
@@ -4095,7 +4139,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
                             && scaled[i] < edge_chunk_scaled[i]) {
                         nunfilt_edge_chunk_dims--;
                         if(should_fill && nunfilt_edge_chunk_dims == 0 && !fb_info.has_vlen_fill_type) {
-                            HDassert(!H5D__chunk_is_partial_edge_chunk(scaled, space_ndims, space_dim, chunk_dim));
+                            HDassert(!H5D__chunk_is_partial_edge_chunk(space_ndims, chunk_dim, scaled, space_dim));
                             fill_buf = &fb_info.fill_buf;
                             chunk_size = orig_chunk_size;
                         } /* end if */
@@ -4107,7 +4151,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
                         HDassert(edge_chunk_scaled[i] == max_unalloc[i]);
                         nunfilt_edge_chunk_dims++;
                         if(should_fill && nunfilt_edge_chunk_dims == 1 && !fb_info.has_vlen_fill_type) {
-                            HDassert(H5D__chunk_is_partial_edge_chunk(scaled, space_ndims, space_dim, chunk_dim));
+                            HDassert(H5D__chunk_is_partial_edge_chunk(space_ndims, chunk_dim, scaled, space_dim));
                             fill_buf = &unfilt_fill_buf;
                             chunk_size = layout->u.chunk.size;
                         } /* end if */
@@ -4131,7 +4175,7 @@ H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite,
 #ifdef H5_HAVE_PARALLEL
     /* do final collective I/O */
     if(using_mpi && blocks_written)
-        if(H5D__chunk_collective_fill(dset, dxpl_id, &chunk_info, chunk_size, fb_info.fill_buf) < 0)
+        if(H5D__chunk_collective_fill(dset, raw_dxpl_id, &chunk_info, chunk_size, fb_info.fill_buf) < 0)
             HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
 #endif /* H5_HAVE_PARALLEL */
 
@@ -4231,8 +4275,8 @@ H5D__chunk_update_old_edge_chunks(H5D_t *dset, hid_t dxpl_id, hsize_t old_dim[])
     /* Set up chunked I/O info object, for operations on chunks (in callback).
      * Note that we only need to set chunk_offset once, as the array's address
      * will never change. */
-    chk_store.chunk.scaled = chunk_sc; 
-    H5D_BUILD_IO_INFO_RD(&chk_io_info, dset, dxpl_cache, dxpl_id, &chk_store, NULL);
+    chk_store.chunk.scaled = chunk_sc;
+    H5D_BUILD_IO_INFO_RD(&chk_io_info, dset, dxpl_cache, dxpl_id, H5AC_rawdata_dxpl_id, &chk_store, NULL);
 
     /*
      * Determine the edges of the dataset which need to be modified
@@ -4281,8 +4325,8 @@ H5D__chunk_update_old_edge_chunks(H5D_t *dset, hid_t dxpl_id, hsize_t old_dim[])
             int i;                  /* Local index variable */
 
             /* Make sure the chunk is really a former edge chunk */
-            HDassert(H5D__chunk_is_partial_edge_chunk(chunk_sc, space_ndims, old_dim, chunk_dim)
-                    && !H5D__chunk_is_partial_edge_chunk(chunk_sc, space_ndims, space_dim, chunk_dim));
+            HDassert(H5D__chunk_is_partial_edge_chunk(space_ndims, chunk_dim, chunk_sc, old_dim)
+                    && !H5D__chunk_is_partial_edge_chunk(space_ndims, chunk_dim, chunk_sc, space_dim));
 
             /* Lookup the chunk */
             if(H5D__chunk_lookup(dset, dxpl_id, chunk_sc, &chk_udata) < 0)
@@ -4528,7 +4572,7 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata, hbool_t new_unfilt_chunk)
     H5_CHECKED_ASSIGN(chunk_size, size_t, layout->u.chunk.size, uint32_t);
 
     /* Get the info for the chunk in the file */
-    if(H5D__chunk_lookup(dset, io_info->dxpl_id, scaled, &chk_udata) < 0)
+    if(H5D__chunk_lookup(dset, io_info->md_dxpl_id, scaled, &chk_udata) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "error looking up chunk address")
     chk_udata.new_unfilt_chunk = new_unfilt_chunk;
 
@@ -4542,7 +4586,7 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata, hbool_t new_unfilt_chunk)
         if(H5D__fill_init(&udata->fb_info, NULL, NULL, NULL, NULL, NULL,
                 &dset->shared->dcpl_cache.fill,
                 dset->shared->type, dset->shared->type_id, (size_t)udata->elmts_per_chunk,
-                chunk_size, io_info->dxpl_id) < 0)
+                chunk_size, io_info->md_dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
         udata->fb_info_init = TRUE;
     } /* end if */
@@ -4579,7 +4623,7 @@ H5D__chunk_prune_fill(H5D_chunk_it_ud1_t *udata, hbool_t new_unfilt_chunk)
     /* Check for VL datatype & non-default fill value */
     if(udata->fb_info.has_vlen_fill_type)
         /* Re-fill the buffer to use for this I/O operation */
-        if(H5D__fill_refill_vl(&udata->fb_info, (size_t)sel_nelmts, io_info->dxpl_id) < 0)
+        if(H5D__fill_refill_vl(&udata->fb_info, (size_t)sel_nelmts, io_info->md_dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
 
     /* Create a selection iterator for scattering the elements to memory buffer */
@@ -4794,7 +4838,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
      * Note that we only need to set scaled once, as the array's address
      * will never change. */
     chk_store.chunk.scaled = scaled;
-    H5D_BUILD_IO_INFO_RD(&chk_io_info, dset, dxpl_cache, dxpl_id, &chk_store, NULL);
+    H5D_BUILD_IO_INFO_RD(&chk_io_info, dset, dxpl_cache, dxpl_id, H5AC_rawdata_dxpl_id, &chk_store, NULL);
 
     /* Compose chunked index info struct */
     idx_info.f = dset->oloc.file;
@@ -4823,7 +4867,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
 
     /* Determine if partial edge chunk filters are disabled */
     disable_edge_filters = (layout->u.chunk.flags
-            & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS)
+                & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS)
             && (idx_info.pline->nused > 0);
 
     /*
@@ -4857,8 +4901,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
 
                 /* If necessary, check if chunks in this dimension that need to
                  * be filled are new partial edge chunks */
-                if(disable_edge_filters && old_dim[op_dim]
-                        >= (min_mod_chunk_sc[op_dim] + 1))
+                if(disable_edge_filters && old_dim[op_dim] >= (min_mod_chunk_sc[op_dim] + 1))
                     new_unfilt_dim[op_dim] = TRUE;
                 else
                     new_unfilt_dim[op_dim] = FALSE;
@@ -4918,8 +4961,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
                 HDassert(scaled[op_dim] == min_mod_chunk_sc[op_dim]);
 
                 /* Make sure this is an edge chunk */
-                HDassert(H5D__chunk_is_partial_edge_chunk(scaled, 
-                        space_ndims, space_dim, layout->u.chunk.dim));
+                HDassert(H5D__chunk_is_partial_edge_chunk(space_ndims, layout->u.chunk.dim, scaled, space_dim));
 
                 /* Determine if the chunk just became an unfiltered chunk */
                 if(new_unfilt_dim[op_dim]) {
@@ -4934,8 +4976,7 @@ H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
                 /* Make sure that, if we think this is a new unfiltered chunk,
                  * it was previously not an edge chunk */
                 HDassert(!new_unfilt_dim[op_dim] || (!new_unfilt_chunk !=
-                        !H5D__chunk_is_partial_edge_chunk(scaled, 
-                            space_ndims, old_dim, layout->u.chunk.dim)));
+                        !H5D__chunk_is_partial_edge_chunk(space_ndims, layout->u.chunk.dim, scaled, old_dim)));
                 HDassert(!new_unfilt_chunk || new_unfilt_dim[op_dim]);
 
                 /* Fill the unused parts of the chunk */
@@ -5112,7 +5153,7 @@ H5D__chunk_addrmap(const H5D_io_info_t *io_info, haddr_t chunk_addr[])
 
     /* Compose chunked index info struct */
     idx_info.f = dset->oloc.file;
-    idx_info.dxpl_id = io_info->dxpl_id;
+    idx_info.dxpl_id = io_info->md_dxpl_id;
     idx_info.pline = &dset->shared->dcpl_cache.pline;
     idx_info.layout = &dset->shared->layout.u.chunk;
     idx_info.storage = &dset->shared->layout.storage.u.chunk;
@@ -5357,7 +5398,6 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
     hbool_t                 must_filter = FALSE;        /* Whether chunk must be filtered during copy */
     size_t                  nbytes;                     /* Size of chunk in file (in bytes) */
     H5Z_cb_t                cb_struct;                  /* Filter failure callback struct */
-
     int                     ret_value = H5_ITER_CONT;   /* Return value */
 
     FUNC_ENTER_STATIC
@@ -5381,8 +5421,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
         if(udata->common.layout->flags
                 & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) {
             /* Check if the chunk is an edge chunk, and disable filters if so */
-            if(!H5D__chunk_is_partial_edge_chunk(chunk_rec->scaled, udata->dset_ndims,
-                    udata->dset_dims, udata->common.layout->dim))
+            if(!H5D__chunk_is_partial_edge_chunk(udata->dset_ndims, udata->common.layout->dim, chunk_rec->scaled, udata->dset_dims))
                 must_filter = TRUE;
         } /* end if */
         else
@@ -5412,7 +5451,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
     } /* end if */
 
     /* read chunk data from the source file */
-    if(H5F_block_read(udata->file_src, H5FD_MEM_DRAW, chunk_rec->chunk_addr, nbytes, udata->idx_info_dst->dxpl_id, buf) < 0)
+    if(H5F_block_read(udata->file_src, H5FD_MEM_DRAW, chunk_rec->chunk_addr, nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
         HGOTO_ERROR(H5E_IO, H5E_READERROR, H5_ITER_ERROR, "unable to read raw data chunk")
 
     /* Need to uncompress variable-length & reference data elements */
@@ -5451,7 +5490,7 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
             HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5_ITER_ERROR, "datatype conversion failed")
 
         /* Reclaim space from variable length data */
-        if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
+        if(H5D_vlen_reclaim(tid_mem, buf_space, udata->idx_info_dst->dxpl_id, reclaim_buf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_BADITER, H5_ITER_ERROR, "unable to reclaim variable-length data")
     } /* end if */
     else if(fix_ref) {
@@ -5498,19 +5537,19 @@ H5D__chunk_copy_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
 			    udata_dst.common.layout->down_chunks, udata_dst.common.scaled);
 
     /* Allocate chunk in the file */
-    if(H5D__chunk_file_alloc(udata->idx_info_dst, NULL, &udata_dst.chunk_block, &need_insert, &udata_dst.need_modify, udata_dst.common.scaled) < 0)
+    if(H5D__chunk_file_alloc(udata->idx_info_dst, NULL, &udata_dst.chunk_block, &need_insert, udata_dst.common.scaled) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, FAIL, "unable to insert/resize chunk on chunk level")
 
     /* Write chunk data to destination file */
     HDassert(H5F_addr_defined(udata_dst.chunk_block.offset));
-    if(H5F_block_write(udata->idx_info_dst->f, H5FD_MEM_DRAW, udata_dst.chunk_block.offset, nbytes, udata->idx_info_dst->dxpl_id, buf) < 0)
+    if(H5F_block_write(udata->idx_info_dst->f, H5FD_MEM_DRAW, udata_dst.chunk_block.offset, nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, H5_ITER_ERROR, "unable to write raw data to file")
 
     /* Set metadata tag in dxpl_id */
     H5_BEGIN_TAG(udata->idx_info_dst->dxpl_id, H5AC__COPIED_TAG, H5_ITER_ERROR);
 
     /* Insert chunk record into index */
-    if((need_insert || udata_dst.need_modify) && udata->idx_info_dst->storage->ops->insert)
+    if(need_insert && udata->idx_info_dst->storage->ops->insert)
         if((udata->idx_info_dst->storage->ops->insert)(udata->idx_info_dst, &udata_dst, NULL) < 0)
             HGOTO_ERROR_TAG(H5E_DATASET, H5E_CANTINSERT, H5_ITER_ERROR, "unable to insert chunk addr into index")
 
@@ -6123,7 +6162,7 @@ H5D__nonexistent_readvv(const H5D_io_info_t *io_info,
     /* Set up user data for H5VM_opvv() */
     udata.rbuf = (unsigned char *)io_info->u.rbuf;
     udata.dset = io_info->dset;
-    udata.dxpl_id = io_info->dxpl_id;
+    udata.dxpl_id = io_info->md_dxpl_id;
 
     /* Call generic sequence operation routine */
     if((ret_value = H5VM_opvv(chunk_max_nseq, chunk_curr_seq, chunk_len_arr, chunk_off_arr,
@@ -6151,8 +6190,8 @@ done:
  *-------------------------------------------------------------------------
  */
 static hbool_t
-H5D__chunk_is_partial_edge_chunk(const hsize_t scaled[], unsigned dset_ndims,
-    const hsize_t *dset_dims, const uint32_t *chunk_dims)
+H5D__chunk_is_partial_edge_chunk(unsigned dset_ndims, const uint32_t *chunk_dims,
+    const hsize_t scaled[], const hsize_t *dset_dims)
 {
     unsigned    u;                      /* Local index variable */
     hbool_t      ret_value = FALSE;     /* Return value */
@@ -6191,7 +6230,7 @@ done:
  */
 static herr_t
 H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old_chunk,
-    H5F_block_t *new_chunk, hbool_t *need_insert, hbool_t *need_modify, hsize_t scaled[])
+    H5F_block_t *new_chunk, hbool_t *need_insert, hsize_t scaled[])
 {
     hbool_t alloc_chunk = FALSE;	/* Whether to allocate chunk */
     herr_t ret_value = SUCCEED;   	/* Return value         */
@@ -6206,16 +6245,13 @@ H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old
     HDassert(idx_info->storage);
     HDassert(new_chunk);
     HDassert(need_insert);
-    HDassert(need_modify);
 
-    *need_modify = FALSE; /* this is mainly for V2-btree */
     *need_insert = FALSE;
 
     /* Check for filters on chunks */
     if(idx_info->pline->nused > 0) {
-
-	HDassert(idx_info->storage->idx_type != H5D_CHUNK_IDX_NONE);
         /* Sanity/error checking block */
+	HDassert(idx_info->storage->idx_type != H5D_CHUNK_IDX_NONE);
         {
             unsigned allow_chunk_size_len;          /* Allowed size of encoded chunk size */
             unsigned new_chunk_size_len;            /* Size of encoded chunk size */
@@ -6252,7 +6288,6 @@ H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old
 		    if(H5MF_xfree(idx_info->f, H5FD_MEM_DRAW, idx_info->dxpl_id, old_chunk->offset, old_chunk->length) < 0)
 			HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to free chunk")
 		alloc_chunk = TRUE;
-		*need_modify = TRUE;
 	    } /* end if */
             else {
 		/* Don't need to reallocate chunk, but send its address back up */
@@ -6296,13 +6331,7 @@ H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old
 		new_chunk->offset = H5MF_alloc(idx_info->f, H5FD_MEM_DRAW, idx_info->dxpl_id, (hsize_t)new_chunk->length);
 		if(!H5F_addr_defined(new_chunk->offset))
 		    HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "file allocation failed")
-		if(idx_info->storage->idx_type == H5D_CHUNK_IDX_BT2) {
-                    /* This can be done together with other index types when Quincy checks into H5B2_modify() */
-                    if(!(*need_modify))
-			*need_insert = TRUE;
-                } else
-		    *need_insert = TRUE;
-
+                *need_insert = TRUE;
 		break;
 
 	    case H5D_CHUNK_IDX_NTYPES:
@@ -6318,6 +6347,7 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5D__chunk_file_alloc() */
 
+

 /*-------------------------------------------------------------------------
  * Function:    H5D__chunk_format_convert_cb
  *
@@ -6349,9 +6379,8 @@ H5D__chunk_format_convert_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
     chunk_addr = chunk_rec->chunk_addr;
 
     if(new_idx_info->pline->nused &&
-      (new_idx_info->layout->flags & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) &&
-      (H5D__chunk_is_partial_edge_chunk(chunk_rec->scaled, udata->dset_ndims, udata->dset_dims, 
-					 new_idx_info->layout->dim)) ) {
+          (new_idx_info->layout->flags & H5O_LAYOUT_CHUNK_DONT_FILTER_PARTIAL_BOUND_CHUNKS) &&
+          (H5D__chunk_is_partial_edge_chunk(udata->dset_ndims, new_idx_info->layout->dim, chunk_rec->scaled, udata->dset_dims))) {
 	/* This is a partial non-filtered edge chunk */
 	/* Convert the chunk to a filtered edge chunk for v1 B-tree chunk index */
 
@@ -6368,7 +6397,7 @@ H5D__chunk_format_convert_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
 	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, H5_ITER_ERROR, "memory allocation failed for raw data chunk")
 
 	/* Read the non-filtered edge chunk */
-	if(H5F_block_read(new_idx_info->f, H5FD_MEM_DRAW, chunk_addr, read_size, new_idx_info->dxpl_id, buf) < 0)
+    if(H5F_block_read(new_idx_info->f, H5FD_MEM_DRAW, chunk_addr, read_size, H5AC_rawdata_dxpl_id, buf) < 0)
 	    HGOTO_ERROR(H5E_IO, H5E_READERROR, H5_ITER_ERROR, "unable to read raw data chunk")
 
 	/* Pass the chunk through the pipeline */
@@ -6389,7 +6418,7 @@ H5D__chunk_format_convert_cb(const H5D_chunk_rec_t *chunk_rec, void *_udata)
 
 	/* Write the filtered chunk to disk */
 	if(H5F_block_write(new_idx_info->f, H5FD_MEM_DRAW, chunk_addr, nbytes, 
-		           new_idx_info->dxpl_id, buf) < 0)
+               H5AC_rawdata_dxpl_id, buf) < 0)
 	    HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, H5_ITER_ERROR, "unable to write raw data to file")
     }
 
diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c
index df2a740..224a1d1 100644
--- a/src/H5Dcompact.c
+++ b/src/H5Dcompact.c
@@ -546,7 +546,7 @@ H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *storage_src, H5F_t *f_dst
 
         HDmemcpy(storage_dst->buf, buf, storage_dst->size);
 
-        if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
+        if(H5D_vlen_reclaim(tid_mem, buf_space, dxpl_id, reclaim_buf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to reclaim variable-length data")
     } /* end if */
     else if(H5T_get_class(dt_src, FALSE) == H5T_REFERENCE) {
diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c
index 6276af1..9d73357 100644
--- a/src/H5Dcontig.c
+++ b/src/H5Dcontig.c
@@ -195,8 +195,9 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
+H5D__contig_fill(const H5D_io_info_t *io_info)
 {
+    const H5D_t *dset = io_info->dset;   /* the dataset pointer */
     H5D_io_info_t ioinfo;       /* Dataset I/O info */
     H5D_storage_t store;        /* Union of storage info for dataset */
     H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
@@ -211,15 +212,17 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
     hbool_t     blocks_written = FALSE; /* Flag to indicate that chunk was actually written */
     hbool_t     using_mpi = FALSE;      /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
 #endif /* H5_HAVE_PARALLEL */
+    hid_t       md_dxpl_id = io_info->md_dxpl_id;
+    hid_t       raw_dxpl_id = io_info->raw_dxpl_id;
     H5D_fill_buf_info_t fb_info;        /* Dataset's fill buffer info */
     hbool_t     fb_info_init = FALSE;   /* Whether the fill value buffer has been initialized */
-    hid_t       my_dxpl_id;     /* DXPL ID to use for this operation */
     herr_t	ret_value = SUCCEED;	/* Return value */
 
     FUNC_ENTER_PACKAGE
 
     /* Check args */
-    HDassert(TRUE == H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(md_dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(raw_dxpl_id, H5P_DATASET_XFER));
     HDassert(dset && H5D_CONTIGUOUS == dset->shared->layout.type);
     HDassert(H5F_addr_defined(dset->shared->layout.storage.u.contig.addr));
     HDassert(dset->shared->layout.storage.u.contig.size > 0);
@@ -239,20 +242,11 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
 
         /* Set the MPI-capable file driver flag */
         using_mpi = TRUE;
-
-        /* Use the internal "independent" DXPL */
-        my_dxpl_id = H5AC_ind_dxpl_id;
     } /* end if */
-    else {
-#endif  /* H5_HAVE_PARALLEL */
-        /* Use the DXPL we were given */
-        my_dxpl_id = dxpl_id;
-#ifdef H5_HAVE_PARALLEL
-    } /* end else */
 #endif  /* H5_HAVE_PARALLEL */
 
     /* Fill the DXPL cache values for later use */
-    if(H5D__get_dxpl_cache(my_dxpl_id, &dxpl_cache) < 0)
+    if(H5D__get_dxpl_cache(raw_dxpl_id, &dxpl_cache) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
 
     /* Initialize storage info for this dataset */
@@ -268,7 +262,7 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
     if(H5D__fill_init(&fb_info, NULL, NULL, NULL, NULL, NULL,
             &dset->shared->dcpl_cache.fill,
             dset->shared->type, dset->shared->type_id, npoints,
-            dxpl_cache->max_temp_buf, my_dxpl_id) < 0)
+            dxpl_cache->max_temp_buf, md_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize fill buffer info")
     fb_info_init = TRUE;
 
@@ -276,7 +270,7 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
     offset = 0;
 
     /* Simple setup for dataset I/O info struct */
-    H5D_BUILD_IO_INFO_WRT(&ioinfo, dset, dxpl_cache, my_dxpl_id, &store, fb_info.fill_buf);
+    H5D_BUILD_IO_INFO_WRT(&ioinfo, dset, dxpl_cache, H5AC_ind_read_dxpl_id, raw_dxpl_id, &store, fb_info.fill_buf);
 
     /*
      * Fill the entire current extent with the fill value.  We can do
@@ -296,7 +290,7 @@ H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
         /* Check for VL datatype & non-default fill value */
         if(fb_info.has_vlen_fill_type)
             /* Re-fill the buffer to use for this I/O operation */
-            if(H5D__fill_refill_vl(&fb_info, curr_points, my_dxpl_id) < 0)
+            if(H5D__fill_refill_vl(&fb_info, curr_points, md_dxpl_id) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "can't refill fill value buffer")
 
 #ifdef H5_HAVE_PARALLEL
@@ -941,7 +935,7 @@ H5D__contig_readvv(const H5D_io_info_t *io_info,
         udata.dset_contig = &(io_info->dset->shared->cache.contig);
         udata.store_contig = &(io_info->store->contig);
         udata.rbuf = (unsigned char *)io_info->u.rbuf;
-        udata.dxpl_id = io_info->dxpl_id;
+        udata.dxpl_id = io_info->raw_dxpl_id;
 
         /* Call generic sequence operation routine */
         if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
@@ -956,7 +950,7 @@ H5D__contig_readvv(const H5D_io_info_t *io_info,
         udata.file = io_info->dset->oloc.file;
         udata.dset_addr = io_info->store->contig.dset_addr;
         udata.rbuf = (unsigned char *)io_info->u.rbuf;
-        udata.dxpl_id = io_info->dxpl_id;
+        udata.dxpl_id = io_info->raw_dxpl_id;
 
         /* Call generic sequence operation routine */
         if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
@@ -1027,10 +1021,9 @@ H5D__contig_writevv_sieve_cb(hsize_t dst_off, hsize_t src_off, size_t len,
             if(NULL == (dset_contig->sieve_buf = H5FL_BLK_CALLOC(sieve_buf, dset_contig->sieve_buf_size)))
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "memory allocation failed")
 
-#ifdef H5_CLEAR_MEMORY
-if(dset_contig->sieve_size > len)
-    HDmemset(dset_contig->sieve_buf + len, 0, (dset_contig->sieve_size - len));
-#endif /* H5_CLEAR_MEMORY */
+            /* Clear memory */
+            if(dset_contig->sieve_size > len)
+                HDmemset(dset_contig->sieve_buf + len, 0, (dset_contig->sieve_size - len));
 
             /* Determine the new sieve buffer size & location */
             dset_contig->sieve_loc = addr;
@@ -1268,7 +1261,7 @@ H5D__contig_writevv(const H5D_io_info_t *io_info,
         udata.dset_contig = &(io_info->dset->shared->cache.contig);
         udata.store_contig = &(io_info->store->contig);
         udata.wbuf = (const unsigned char *)io_info->u.wbuf;
-        udata.dxpl_id = io_info->dxpl_id;
+        udata.dxpl_id = io_info->raw_dxpl_id;
 
         /* Call generic sequence operation routine */
         if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
@@ -1283,7 +1276,7 @@ H5D__contig_writevv(const H5D_io_info_t *io_info,
         udata.file = io_info->dset->oloc.file;
         udata.dset_addr = io_info->store->contig.dset_addr;
         udata.wbuf = (const unsigned char *)io_info->u.wbuf;
-        udata.dxpl_id = io_info->dxpl_id;
+        udata.dxpl_id = io_info->raw_dxpl_id;
 
         /* Call generic sequence operation routine */
         if((ret_value = H5VM_opvv(dset_max_nseq, dset_curr_seq, dset_len_arr, dset_off_arr,
@@ -1310,7 +1303,7 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5D__contig_flush(H5D_t *dset, hid_t dxpl_id)
+H5D__contig_flush(H5D_t *dset, hid_t H5_ATTR_UNUSED dxpl_id)
 {
     herr_t ret_value = SUCCEED;       /* Return value */
 
@@ -1319,8 +1312,9 @@ H5D__contig_flush(H5D_t *dset, hid_t dxpl_id)
     /* Sanity check */
     HDassert(dset);
 
-    /* Flush any data in sieve buffer */
-    if(H5D__flush_sieve_buf(dset, dxpl_id) < 0)
+    /* Flush any data in sieve buffer - use the raw data dxpl since
+       the one passed in is a metadata dxpl. */
+    if(H5D__flush_sieve_buf(dset, H5AC_rawdata_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTFLUSH, FAIL, "unable to flush sieve buffer")
 
 done:
@@ -1519,8 +1513,8 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
                 dst_nbytes = mem_nbytes = src_nbytes;
         } /* end if */
 
-        /* Read raw data from source file */
-        if(H5F_block_read(f_src, H5FD_MEM_DRAW, addr_src, src_nbytes, H5P_DATASET_XFER_DEFAULT, buf) < 0)
+        /* Read raw data from source file - use raw dxpl because passed in one is metadata */
+        if(H5F_block_read(f_src, H5FD_MEM_DRAW, addr_src, src_nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "unable to read raw data")
 
         /* Perform datatype conversion, if necessary */
@@ -1540,7 +1534,7 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
                 HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed")
 
             /* Reclaim space from variable length data */
-            if(H5D_vlen_reclaim(tid_mem, buf_space, H5P_DATASET_XFER_DEFAULT, reclaim_buf) < 0)
+            if(H5D_vlen_reclaim(tid_mem, buf_space, dxpl_id, reclaim_buf) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to reclaim variable-length data")
 	} /* end if */
         else if(fix_ref) {
@@ -1563,8 +1557,8 @@ H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
                 HDmemset(buf, 0, src_nbytes);
         } /* end if */
 
-        /* Write raw data to destination file */
-        if(H5F_block_write(f_dst, H5FD_MEM_DRAW, addr_dst, dst_nbytes, H5P_DATASET_XFER_DEFAULT, buf) < 0)
+        /* Write raw data to destination file - use raw dxpl because passed in one is metadata */
+        if(H5F_block_write(f_dst, H5FD_MEM_DRAW, addr_dst, dst_nbytes, H5AC_rawdata_dxpl_id, buf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to write raw data")
 
         /* Adjust loop variables */
diff --git a/src/H5Ddbg.c b/src/H5Ddbg.c
index 34e0ae9..a6c130e 100644
--- a/src/H5Ddbg.c
+++ b/src/H5Ddbg.c
@@ -90,7 +90,7 @@ H5Ddebug(hid_t dset_id)
 
     /* Print B-tree information */
     if(H5D_CHUNKED == dset->shared->layout.type)
-	(void)H5D__chunk_dump_index(dset, H5AC_ind_dxpl_id, stdout);
+	(void)H5D__chunk_dump_index(dset, H5AC_ind_read_dxpl_id, stdout);
     else if(H5D_CONTIGUOUS == dset->shared->layout.type)
 	HDfprintf(stdout, "    %-10s %a\n", "Address:", dset->shared->layout.storage.u.contig.addr);
 
diff --git a/src/H5Ddeprec.c b/src/H5Ddeprec.c
index f5e3996..c6a03c2 100644
--- a/src/H5Ddeprec.c
+++ b/src/H5Ddeprec.c
@@ -141,8 +141,7 @@ H5Dcreate1(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
 
     /* Build and open the new dataset */
-    if(NULL == (dset = H5D__create_named(&loc, name, type_id, space, H5P_LINK_CREATE_DEFAULT, 
-                                         dcpl_id, H5P_DATASET_ACCESS_DEFAULT, H5AC_dxpl_id)))
+    if(NULL == (dset = H5D__create_named(&loc, name, type_id, space, H5P_LINK_CREATE_DEFAULT, dcpl_id, H5P_DATASET_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
 	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset")
 
     /* Register the new dataset to get an ID for it */
@@ -180,8 +179,6 @@ H5Dopen1(hid_t loc_id, const char *name)
 {
     H5D_t       *dset = NULL;
     H5G_loc_t   loc;                    /* Object location of group */
-    hid_t       dapl_id = H5P_DATASET_ACCESS_DEFAULT; /* dapl to use to open dataset */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl to use to open datset */
     hid_t       ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -194,7 +191,7 @@ H5Dopen1(hid_t loc_id, const char *name)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Open the dataset */
-    if(NULL == (dset = H5D__open_name(&loc, name, dapl_id, dxpl_id)))
+    if(NULL == (dset = H5D__open_name(&loc, name, H5P_DATASET_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
         HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open dataset")
 
     /* Register an atom for the dataset */
@@ -242,7 +239,7 @@ H5Dextend(hid_t dset_id, const hsize_t size[])
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified")
 
     /* Increase size */
-    if(H5D__extend(dset, size, H5AC_dxpl_id) < 0)
+    if(H5D__extend(dset, size, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to extend dataset")
 
 done:
@@ -361,10 +358,16 @@ H5D__extend(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
 
 	/* Allocate space for the new parts of the dataset, if appropriate */
         fill = &dataset->shared->dcpl_cache.fill;
-        if(fill->alloc_time == H5D_ALLOC_TIME_EARLY)
-            if(H5D__alloc_storage(dataset, dxpl_id, H5D_ALLOC_EXTEND, FALSE, old_dims) < 0)
-                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
+        if(fill->alloc_time == H5D_ALLOC_TIME_EARLY) {
+            H5D_io_info_t io_info;
+
+            io_info.dset = dataset;
+            io_info.raw_dxpl_id = H5AC_rawdata_dxpl_id;
+            io_info.md_dxpl_id = dxpl_id;
 
+            if(H5D__alloc_storage(&io_info, H5D_ALLOC_EXTEND, FALSE, old_dims) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
+        }
         /* Mark the dataspace as dirty, for later writing to the file */
         if(H5D__mark(dataset, dxpl_id, H5D_MARK_SPACE) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to mark dataspace as dirty")
diff --git a/src/H5Defl.c b/src/H5Defl.c
index ec96ae7..cf1b36c 100644
--- a/src/H5Defl.c
+++ b/src/H5Defl.c
@@ -28,12 +28,13 @@
 /***********/
 /* Headers */
 /***********/
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Dpkg.h"		/* Datasets				*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* Files				*/
-#include "H5HLprivate.h"	/* Local Heaps				*/
-#include "H5VMprivate.h"		/* Vector and array functions		*/
+#include "H5private.h"          /* Generic Functions                        */
+#include "H5Dpkg.h"             /* Datasets                                 */
+#include "H5Eprivate.h"         /* Error handling                           */
+#include "H5Fprivate.h"         /* Files                                    */
+#include "H5HLprivate.h"        /* Local Heaps                              */
+#include "H5MMprivate.h"        /* Memory management                        */
+#include "H5VMprivate.h"        /* Vector and array functions               */
 
 
 /****************/
@@ -48,12 +49,14 @@
 /* Callback info for readvv operation */
 typedef struct H5D_efl_readvv_ud_t {
     const H5O_efl_t *efl;       /* Pointer to efl info */
+    const H5D_t *dset;          /* The dataset */
     unsigned char *rbuf;        /* Read buffer */
 } H5D_efl_readvv_ud_t;
 
 /* Callback info for writevv operation */
 typedef struct H5D_efl_writevv_ud_t {
     const H5O_efl_t *efl;       /* Pointer to efl info */
+    const H5D_t *dset;          /* The dataset */
     const unsigned char *wbuf;  /* Write buffer */
 } H5D_efl_writevv_ud_t;
 
@@ -75,9 +78,9 @@ static ssize_t H5D__efl_writevv(const H5D_io_info_t *io_info,
     size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
 
 /* Helper routines */
-static herr_t H5D__efl_read(const H5O_efl_t *efl, haddr_t addr, size_t size,
+static herr_t H5D__efl_read(const H5O_efl_t *efl, const H5D_t *dset, haddr_t addr, size_t size,
     uint8_t *buf);
-static herr_t H5D__efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size,
+static herr_t H5D__efl_write(const H5O_efl_t *efl, const H5D_t *dset, haddr_t addr, size_t size,
     const uint8_t *buf);
 
 
@@ -232,25 +235,22 @@ H5D__efl_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t H5_ATTR_UNU
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5D__efl_read
+ * Function:    H5D__efl_read
  *
- * Purpose:	Reads data from an external file list.  It is an error to
- *		read past the logical end of file, but reading past the end
- *		of any particular member of the external file list results in
- *		zeros.
+ * Purpose:     Reads data from an external file list.  It is an error to
+ *              read past the logical end of file, but reading past the end
+ *              of any particular member of the external file list results in
+ *              zeros.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      SUCCEED/FAIL
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, March  4, 1998
  *
- * Modifications:
- *		Robb Matzke, 1999-07-28
- *		The ADDR argument is passed by value.
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5D__efl_read(const H5O_efl_t *efl, haddr_t addr, size_t size, uint8_t *buf)
+H5D__efl_read(const H5O_efl_t *efl, const H5D_t *dset, haddr_t addr, size_t size, uint8_t *buf)
 {
     int		fd = -1;
     size_t	to_read;
@@ -261,6 +261,7 @@ H5D__efl_read(const H5O_efl_t *efl, haddr_t addr, size_t size, uint8_t *buf)
     haddr_t     cur;
     ssize_t	n;
     size_t      u;                      /* Local index variable */
+    char *full_name = NULL;             /* File name with prefix */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_STATIC
@@ -273,44 +274,49 @@ H5D__efl_read(const H5O_efl_t *efl, haddr_t addr, size_t size, uint8_t *buf)
 
     /* Find the first efl member from which to read */
     for (u=0, cur=0; u<efl->nused; u++) {
-	if(H5O_EFL_UNLIMITED == efl->slot[u].size || addr < cur + efl->slot[u].size) {
-	    skip = addr - cur;
-	    break;
-	} /* end if */
-  	cur += efl->slot[u].size;
+        if(H5O_EFL_UNLIMITED == efl->slot[u].size || addr < cur + efl->slot[u].size) {
+            skip = addr - cur;
+            break;
+        } /* end if */
+        cur += efl->slot[u].size;
     } /* end for */
 
     /* Read the data */
     while(size) {
         HDassert(buf);
-	if(u >= efl->nused)
-	    HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "read past logical end of file")
-	if(H5F_OVERFLOW_HSIZET2OFFT(efl->slot[u].offset + skip))
-	    HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
-	if((fd = HDopen(efl->slot[u].name, O_RDONLY, 0)) < 0)
-	    HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
-	if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
-	    HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
+        if(u >= efl->nused)
+            HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "read past logical end of file")
+        if(H5F_OVERFLOW_HSIZET2OFFT(efl->slot[u].offset + skip))
+            HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
+        if(H5_combine_path(dset->shared->extfile_prefix, efl->slot[u].name, &full_name) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_NOSPACE, FAIL, "can't build external file name")
+        if((fd = HDopen(full_name, O_RDONLY, 0)) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
+        if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
 #ifndef NDEBUG
-	tempto_read = MIN(efl->slot[u].size-skip, (hsize_t)size);
+        tempto_read = MIN((size_t)(efl->slot[u].size-skip), (hsize_t)size);
         H5_CHECK_OVERFLOW(tempto_read, hsize_t, size_t);
-	to_read = (size_t)tempto_read;
+        to_read = (size_t)tempto_read;
 #else /* NDEBUG */
-	to_read = MIN((size_t)(efl->slot[u].size - skip), size);
+        to_read = MIN((size_t)(efl->slot[u].size - skip), (hsize_t)size);
 #endif /* NDEBUG */
-	if((n = HDread(fd, buf, to_read)) < 0)
-	    HGOTO_ERROR(H5E_EFL, H5E_READERROR, FAIL, "read error in external raw data file")
-	else if((size_t)n < to_read)
-	    HDmemset(buf + n, 0, to_read - (size_t)n);
-	HDclose(fd);
-	fd = -1;
-	size -= to_read;
-	buf += to_read;
-	skip = 0;
-	u++;
+        if((n = HDread(fd, buf, to_read)) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_READERROR, FAIL, "read error in external raw data file")
+        else if((size_t)n < to_read)
+            HDmemset(buf + n, 0, to_read - (size_t)n);
+        full_name = (char *)H5MM_xfree(full_name);
+        HDclose(fd);
+        fd = -1;
+        size -= to_read;
+        buf += to_read;
+        skip = 0;
+        u++;
     } /* end while */
 
 done:
+    if(full_name)
+        full_name = (char *)H5MM_xfree(full_name);
     if(fd >= 0)
         HDclose(fd);
 
@@ -337,7 +343,7 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5D__efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *buf)
+H5D__efl_write(const H5O_efl_t *efl, const H5D_t *dset, haddr_t addr, size_t size, const uint8_t *buf)
 {
     int		fd = -1;
     size_t	to_write;
@@ -346,7 +352,8 @@ H5D__efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *b
 #endif /* NDEBUG */
     haddr_t     cur;
     hsize_t     skip = 0;
-    size_t	u;                      /* Local index variable */
+    size_t	u;                          /* Local index variable */
+    char *full_name = NULL;             /* File name with prefix */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_STATIC
@@ -359,46 +366,51 @@ H5D__efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *b
 
     /* Find the first efl member in which to write */
     for(u = 0, cur = 0; u < efl->nused; u++) {
-	if(H5O_EFL_UNLIMITED == efl->slot[u].size || addr < cur + efl->slot[u].size) {
-	    skip = addr - cur;
-	    break;
-	} /* end if */
-	cur += efl->slot[u].size;
+        if(H5O_EFL_UNLIMITED == efl->slot[u].size || addr < cur + efl->slot[u].size) {
+            skip = addr - cur;
+            break;
+        } /* end if */
+        cur += efl->slot[u].size;
     } /* end for */
 
     /* Write the data */
     while(size) {
         HDassert(buf);
-	if(u >= efl->nused)
-	    HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "write past logical end of file")
-	if(H5F_OVERFLOW_HSIZET2OFFT(efl->slot[u].offset + skip))
-	    HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
-	if((fd = HDopen(efl->slot[u].name, O_CREAT | O_RDWR, 0666)) < 0) {
-	    if(HDaccess(efl->slot[u].name, F_OK) < 0)
-		HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "external raw data file does not exist")
-	    else
-		HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
-	} /* end if */
-	if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
-	    HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
+        if(u >= efl->nused)
+            HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "write past logical end of file")
+        if(H5F_OVERFLOW_HSIZET2OFFT(efl->slot[u].offset + skip))
+            HGOTO_ERROR(H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
+        if(H5_combine_path(dset->shared->extfile_prefix, efl->slot[u].name, &full_name) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_NOSPACE, FAIL, "can't build external file name")
+        if((fd = HDopen(full_name, O_CREAT | O_RDWR, 0666)) < 0) {
+            if(HDaccess(full_name, F_OK) < 0)
+                HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "external raw data file does not exist")
+            else
+                HGOTO_ERROR(H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
+            } /* end if */
+        if(HDlseek(fd, (HDoff_t)(efl->slot[u].offset + skip), SEEK_SET) < 0)
+            HGOTO_ERROR(H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
 #ifndef NDEBUG
-	tempto_write = MIN(efl->slot[u].size - skip, (hsize_t)size);
+        tempto_write = MIN(efl->slot[u].size - skip, (hsize_t)size);
         H5_CHECK_OVERFLOW(tempto_write, hsize_t, size_t);
         to_write = (size_t)tempto_write;
 #else /* NDEBUG */
-	to_write = MIN((size_t)(efl->slot[u].size - skip), size);
+        to_write = MIN((size_t)(efl->slot[u].size - skip), size);
 #endif /* NDEBUG */
-	if((size_t)HDwrite(fd, buf, to_write) != to_write)
-	    HGOTO_ERROR(H5E_EFL, H5E_READERROR, FAIL, "write error in external raw data file")
-	HDclose (fd);
-	fd = -1;
-	size -= to_write;
-	buf += to_write;
-	skip = 0;
-	u++;
+        if((size_t)HDwrite(fd, buf, to_write) != to_write)
+            HGOTO_ERROR(H5E_EFL, H5E_READERROR, FAIL, "write error in external raw data file")
+        full_name = (char *)H5MM_xfree(full_name);
+        HDclose (fd);
+        fd = -1;
+        size -= to_write;
+        buf += to_write;
+        skip = 0;
+        u++;
     } /* end while */
 
 done:
+    if(full_name)
+        full_name = (char *)H5MM_xfree(full_name);
     if(fd >= 0)
         HDclose(fd);
 
@@ -427,7 +439,7 @@ H5D__efl_readvv_cb(hsize_t dst_off, hsize_t src_off, size_t len, void *_udata)
     FUNC_ENTER_STATIC
 
     /* Read data */
-    if(H5D__efl_read(udata->efl, dst_off, len, (udata->rbuf + src_off)) < 0)
+    if(H5D__efl_read(udata->efl, udata->dset, dst_off, len, (udata->rbuf + src_off)) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "EFL read failed")
 
 done:
@@ -464,6 +476,9 @@ H5D__efl_readvv(const H5D_io_info_t *io_info,
     HDassert(io_info);
     HDassert(io_info->store->efl.nused > 0);
     HDassert(io_info->u.rbuf);
+    HDassert(io_info->dset);
+    HDassert(io_info->dset->shared);
+    HDassert(io_info->dset->shared->extfile_prefix);
     HDassert(dset_curr_seq);
     HDassert(dset_len_arr);
     HDassert(dset_off_arr);
@@ -473,6 +488,7 @@ H5D__efl_readvv(const H5D_io_info_t *io_info,
 
     /* Set up user data for H5VM_opvv() */
     udata.efl = &(io_info->store->efl);
+    udata.dset = io_info->dset;
     udata.rbuf = (unsigned char *)io_info->u.rbuf;
 
     /* Call generic sequence operation routine */
@@ -507,7 +523,7 @@ H5D__efl_writevv_cb(hsize_t dst_off, hsize_t src_off, size_t len, void *_udata)
     FUNC_ENTER_STATIC
 
     /* Write data */
-    if(H5D__efl_write(udata->efl, dst_off, len, (udata->wbuf + src_off)) < 0)
+    if(H5D__efl_write(udata->efl, udata->dset, dst_off, len, (udata->wbuf + src_off)) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "EFL write failed")
 
 done:
@@ -544,6 +560,9 @@ H5D__efl_writevv(const H5D_io_info_t *io_info,
     HDassert(io_info);
     HDassert(io_info->store->efl.nused > 0);
     HDassert(io_info->u.wbuf);
+    HDassert(io_info->dset);
+    HDassert(io_info->dset->shared);
+    HDassert(io_info->dset->shared->extfile_prefix);
     HDassert(dset_curr_seq);
     HDassert(dset_len_arr);
     HDassert(dset_off_arr);
@@ -553,6 +572,7 @@ H5D__efl_writevv(const H5D_io_info_t *io_info,
 
     /* Set up user data for H5VM_opvv() */
     udata.efl = &(io_info->store->efl);
+    udata.dset = io_info->dset;
     udata.wbuf = (const unsigned char *)io_info->u.wbuf;
 
     /* Call generic sequence operation routine */
diff --git a/src/H5Dfill.c b/src/H5Dfill.c
index 947a177..e5b2161 100644
--- a/src/H5Dfill.c
+++ b/src/H5Dfill.c
@@ -134,7 +134,7 @@ H5Dfill(const void *fill, hid_t fill_type_id, void *buf, hid_t buf_type_id, hid_
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype")
 
     /* Fill the selection in the memory buffer */
-    if(H5D__fill(fill, fill_type, buf, buf_type, space, H5AC_ind_dxpl_id) < 0)
+    if(H5D__fill(fill, fill_type, buf, buf_type, space, H5AC_noio_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed")
 
 done:
@@ -172,7 +172,7 @@ done:
 --------------------------------------------------------------------------*/
 herr_t
 H5D__fill(const void *fill, const H5T_t *fill_type, void *buf,
-    const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id)
+          const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id)
 {
     H5WB_t  *elem_wb = NULL;    /* Wrapped buffer for element data */
     uint8_t elem_buf[H5T_ELEM_BUF_SIZE]; /* Buffer for element data */
@@ -565,7 +565,7 @@ done:
  */
 herr_t
 H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts, hid_t dxpl_id)
-{
+{    
     herr_t	ret_value = SUCCEED;	/* Return value */
     void * buf = NULL;              /* Temporary fill buffer */
 
diff --git a/src/H5Dint.c b/src/H5Dint.c
index ed0e63e..06ea1e4 100644
--- a/src/H5Dint.c
+++ b/src/H5Dint.c
@@ -65,9 +65,11 @@ static herr_t H5D__swmr_setup(const H5D_t *dset, hid_t dxpl_id);
 static herr_t H5D__swmr_teardown(const H5D_t *dataset, hid_t dxpl_id);
 static herr_t H5D__update_oh_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset,
     hid_t dapl_id);
+static herr_t H5D_build_extfile_prefix(const H5D_t *dset, hid_t dapl_id,
+    char **extfile_prefix);
 static herr_t H5D__open_oid(H5D_t *dataset, hid_t dapl_id, hid_t dxpl_id);
-static herr_t H5D__init_storage(const H5D_t *dataset, hbool_t full_overwrite,
-    hsize_t old_dim[], hid_t dxpl_id);
+static herr_t H5D__init_storage(const H5D_io_info_t *io_info, hbool_t full_overwrite,
+    hsize_t old_dim[]);
 static herr_t H5D__append_flush_setup(H5D_t *dset, hid_t dapl_id);
 
 /*********************/
@@ -1040,15 +1042,21 @@ H5D__update_oh_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, hid_t dapl_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get dataset creation property list")
 
     /* Check whether to add a "bogus" message */
-    if(H5P_exist_plist(dc_plist, H5O_BOGUS_MSG_FLAGS_NAME) > 0) {
+    if( (H5P_exist_plist(dc_plist, H5O_BOGUS_MSG_FLAGS_NAME) > 0) &&
+        (H5P_exist_plist(dc_plist, H5O_BOGUS_MSG_ID_NAME) > 0) ) {
+
         uint8_t bogus_flags = 0;        /* Flags for creating "bogus" message */
+	unsigned bogus_id;		/* "bogus" ID */
 
+	/* Retrieve "bogus" message ID */
+        if(H5P_get(dc_plist, H5O_BOGUS_MSG_ID_NAME, &bogus_id) < 0)
+	    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get bogus ID options")
         /* Retrieve "bogus" message flags */
         if(H5P_get(dc_plist, H5O_BOGUS_MSG_FLAGS_NAME, &bogus_flags) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get bogus message options")
 
         /* Add a "bogus" message (for error testing). */
-        if(H5O_bogus_oh(file, dxpl_id, oh, (unsigned)bogus_flags) < 0)
+	if(H5O_bogus_oh(file, dxpl_id, oh, bogus_id, (unsigned)bogus_flags) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create 'bogus' message")
     } /* end if */
 }
@@ -1083,6 +1091,84 @@ done:
 } /* end H5D__update_oh_info() */
 
 

+/*--------------------------------------------------------------------------
+ * Function:    H5D_build_extfile_prefix
+ *
+ * Purpose:     Determine the external file prefix to be used and store
+ *              it in extfile_prefix. Stores an empty string if no prefix
+ *              should be used.
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ * Programmer:  Steffen Kiess
+ *              October 16, 2015
+ *--------------------------------------------------------------------------
+ */
+static herr_t
+H5D_build_extfile_prefix(const H5D_t *dset, hid_t dapl_id, char **extfile_prefix /*out*/)
+{
+    char            *prefix = NULL;       /* prefix used to look for the file               */
+    char            *extpath = NULL;      /* absolute path of directory the HDF5 file is in */
+    size_t          extpath_len;          /* length of extpath                              */
+    size_t          prefix_len;           /* length of prefix                               */
+    size_t          extfile_prefix_len;   /* length of expanded prefix                      */
+    H5P_genplist_t  *plist = NULL;        /* Property list pointer                          */
+    herr_t          ret_value = SUCCEED;  /* Return value                                   */
+    
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+    HDassert(dset);
+    HDassert(dset->oloc.file);
+
+    extpath = H5F_EXTPATH(dset->oloc.file);
+    HDassert(extpath);
+
+    /* XXX: Future thread-safety note - getenv is not required
+     *      to be reentrant.
+     */
+    prefix = HDgetenv("HDF5_EXTFILE_PREFIX");
+
+    if(prefix == NULL || *prefix == '\0') {
+        /* Set prefix to value of H5D_ACS_EFILE_PREFIX_NAME property */
+        if(NULL == (plist = H5P_object_verify(dapl_id, H5P_DATASET_ACCESS)))
+            HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+        if(H5P_peek(plist, H5D_ACS_EFILE_PREFIX_NAME, &prefix) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file prefix")
+    } /* end if */
+
+    /* Prefix has to be checked for NULL / empty string again because the
+     * code above might have updated it.
+     */
+    if(prefix == NULL || *prefix == '\0' || HDstrcmp(prefix, ".") == 0) {
+        /* filename is interpreted as relative to the current directory,
+         * does not need to be expanded
+         */
+        if(NULL == (*extfile_prefix = (char *)H5MM_strdup("")))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+    } /* end if */
+    else {
+        if (HDstrncmp(prefix, "${ORIGIN}", HDstrlen("${ORIGIN}")) == 0) {
+            /* Replace ${ORIGIN} at beginning of prefix by directory of HDF5 file */
+            extpath_len = HDstrlen(extpath);
+            prefix_len = HDstrlen(prefix);
+            extfile_prefix_len = extpath_len + prefix_len - HDstrlen("${ORIGIN}") + 1;
+        
+            if(NULL == (*extfile_prefix = (char *)H5MM_malloc(extfile_prefix_len)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate buffer")
+            HDsnprintf(*extfile_prefix, extfile_prefix_len, "%s%s", extpath, prefix + HDstrlen("${ORIGIN}"));
+        } /* end if */
+        else {
+            if(NULL == (*extfile_prefix = (char *)H5MM_strdup(prefix)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_build_extfile_prefix() */
+
+

 /*-------------------------------------------------------------------------
  * Function:	H5D__create
  *
@@ -1269,6 +1355,10 @@ H5D__create(H5F_t *file, hid_t type_id, const H5S_t *space, hid_t dcpl_id,
     if(H5D__append_flush_setup(new_dset, dapl_id) < 0)
 	HGOTO_ERROR(H5E_DATASET, H5E_CANTINC, NULL, "unable to set up flush append property")
 
+    /* Set the external file prefix */
+    if(H5D_build_extfile_prefix(new_dset, dapl_id, &new_dset->shared->extfile_prefix) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize external file prefix")
+
     /* Add the dataset to the list of opened objects in the file */
     if(H5FO_top_incr(new_dset->oloc.file, new_dset->oloc.addr) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTINC, NULL, "can't incr object ref. count")
@@ -1313,6 +1403,7 @@ done:
             } /* end if */
             if(new_dset->shared->dcpl_id != 0 && H5I_dec_ref(new_dset->shared->dcpl_id) < 0)
                 HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, NULL, "unable to decrement ref count on property list")
+            new_dset->shared->extfile_prefix = (char *)H5MM_xfree(new_dset->shared->extfile_prefix);
             new_dset->shared = H5FL_FREE(H5D_shared_t, new_dset->shared);
         } /* end if */
         new_dset->oloc.file = NULL;
@@ -1406,7 +1497,8 @@ H5D_open(const H5G_loc_t *loc, hid_t dapl_id, hid_t dxpl_id)
 {
     H5D_shared_t    *shared_fo = NULL;
     H5D_t           *dataset = NULL;
-    H5D_t           *ret_value = NULL;          /* Return value */
+    char            *extfile_prefix = NULL;  /* Expanded external file prefix */
+    H5D_t           *ret_value = NULL;       /* Return value */
 
     FUNC_ENTER_NOAPI(NULL)
 
@@ -1425,6 +1517,10 @@ H5D_open(const H5G_loc_t *loc, hid_t dapl_id, hid_t dxpl_id)
     if(H5G_name_copy(&(dataset->path), loc->path, H5_COPY_SHALLOW) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, NULL, "can't copy path")
 
+    /* Get the external file prefix */
+    if(H5D_build_extfile_prefix(dataset, dapl_id, &extfile_prefix) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize external file prefix")
+
     /* Check if dataset was already open */
     if(NULL == (shared_fo = (H5D_shared_t *)H5FO_opened(dataset->oloc.file, dataset->oloc.addr))) {
         /* Clear any errors from H5FO_opened() */
@@ -1444,6 +1540,12 @@ H5D_open(const H5G_loc_t *loc, hid_t dapl_id, hid_t dxpl_id)
 
         /* We're the first dataset to use the the shared info */
         dataset->shared->fo_count = 1;
+
+        /* Set the external file prefix */
+        dataset->shared->extfile_prefix = extfile_prefix;
+        /* Prevent string from being freed during done: */
+        extfile_prefix = NULL;
+
     } /* end if */
     else {
         /* Point to shared info */
@@ -1452,6 +1554,12 @@ H5D_open(const H5G_loc_t *loc, hid_t dapl_id, hid_t dxpl_id)
         /* Increment # of datasets using shared information */
         shared_fo->fo_count++;
 
+        /* Check whether the external file prefix of the already open dataset
+         * matches the new external file prefix
+         */
+        if(HDstrcmp(extfile_prefix, dataset->shared->extfile_prefix) != 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "new external file prefix does not match external file prefix of already open dataset")
+
         /* Check if the object has been opened through the top file yet */
         if(H5FO_top_count(dataset->oloc.file, dataset->oloc.addr) == 0) {
             /* Open the object through this top file */
@@ -1468,11 +1576,15 @@ H5D_open(const H5G_loc_t *loc, hid_t dapl_id, hid_t dxpl_id)
     ret_value = dataset;
 
 done:
+    extfile_prefix = (char *)H5MM_xfree(extfile_prefix);
+
     if(ret_value == NULL) {
         /* Free the location--casting away const*/
         if(dataset) {
-            if(shared_fo == NULL)   /* Need to free shared fo */
+            if(shared_fo == NULL && dataset->shared) {   /* Need to free shared fo */
+                dataset->shared->extfile_prefix = (char *)H5MM_xfree(dataset->shared->extfile_prefix);
                 dataset->shared = H5FL_FREE(H5D_shared_t, dataset->shared);
+            }
 
             H5O_loc_free(&(dataset->oloc));
             H5G_name_free(&(dataset->path));
@@ -1706,7 +1818,13 @@ H5D__open_oid(H5D_t *dataset, hid_t dapl_id, hid_t dxpl_id)
     if((H5F_INTENT(dataset->oloc.file) & H5F_ACC_RDWR)
             && !(*dataset->shared->layout.ops->is_space_alloc)(&dataset->shared->layout.storage)
             && H5F_HAS_FEATURE(dataset->oloc.file, H5FD_FEAT_ALLOCATE_EARLY)) {
-        if(H5D__alloc_storage(dataset, dxpl_id, H5D_ALLOC_OPEN, FALSE, NULL) < 0)
+        H5D_io_info_t io_info;
+
+        io_info.dset = dataset;
+        io_info.raw_dxpl_id = H5AC_rawdata_dxpl_id;
+        io_info.md_dxpl_id = dxpl_id;
+
+        if(H5D__alloc_storage(&io_info, H5D_ALLOC_OPEN, FALSE, NULL) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize file storage")
     } /* end if */
 
@@ -1776,7 +1894,7 @@ H5D_close(H5D_t *dataset)
     dataset->shared->fo_count--;
     if(dataset->shared->fo_count == 0) {
         /* Flush the dataset's information.  Continue to close even if it fails. */
-        if(H5D__flush_real(dataset, H5AC_dxpl_id) < 0)
+        if(H5D__flush_real(dataset, H5AC_ind_read_dxpl_id) < 0)
             HDONE_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to flush cached dataset info")
 
         /* Set a flag to indicate the dataset is closing, before we start freeing things */
@@ -1856,9 +1974,12 @@ H5D_close(H5D_t *dataset)
         } /* end switch */ /*lint !e788 All appropriate cases are covered */
 
         /* Destroy any cached layout information for the dataset */
-        if(dataset->shared->layout.ops->dest && (dataset->shared->layout.ops->dest)(dataset, H5AC_dxpl_id) < 0)
+        if(dataset->shared->layout.ops->dest && (dataset->shared->layout.ops->dest)(dataset, H5AC_ind_read_dxpl_id) < 0)
             HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "unable to destroy layout info")
 
+        /* Free the external file prefix */
+        dataset->shared->extfile_prefix = (char *)H5MM_xfree(dataset->shared->extfile_prefix);
+
         /* Release layout, fill-value, efl & pipeline messages */
         if(dataset->shared->dcpl_id != H5P_DATASET_CREATE_DEFAULT)
             free_failed |= (H5O_msg_reset(H5O_PLINE_ID, &dataset->shared->dcpl_cache.pline) < 0) ||
@@ -1875,7 +1996,7 @@ H5D_close(H5D_t *dataset)
 
         /* If the dataset is opened for SWMR access, shut that down */
         if(dataset->shared->is_swimming)
-            if(H5D__swmr_teardown(dataset, H5AC_dxpl_id) < 0)
+            if(H5D__swmr_teardown(dataset, H5AC_ind_read_dxpl_id) < 0)
                 HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to shut down SWMR access")
         
         /*
@@ -1889,7 +2010,7 @@ H5D_close(H5D_t *dataset)
         /* Remove the dataset from the list of opened objects in the file */
         if(H5FO_top_decr(dataset->oloc.file, dataset->oloc.addr) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
-        if(H5FO_delete(dataset->oloc.file, H5AC_dxpl_id, dataset->oloc.addr) < 0)
+        if(H5FO_delete(dataset->oloc.file, H5AC_ind_read_dxpl_id, dataset->oloc.addr) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't remove dataset from list of open objects")
 
         /* Close the dataset object */
@@ -2161,9 +2282,10 @@ H5D_typeof(const H5D_t *dset)
  *-------------------------------------------------------------------------
  */
 herr_t
-H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc,
+H5D__alloc_storage(const H5D_io_info_t *io_info, H5D_time_alloc_t time_alloc,
     hbool_t full_overwrite, hsize_t old_dim[])
 {
+    const H5D_t *dset = io_info->dset;   /* The dataset object */
     H5F_t *f = dset->oloc.file;         /* The dataset's file pointer */
     H5O_layout_t *layout;               /* The dataset's layout information */
     hbool_t must_init_space = FALSE;    /* Flag to indicate that space should be initialized */
@@ -2190,7 +2312,7 @@ H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc
                     /* Check if we have a zero-sized dataset */
                     if(layout->storage.u.contig.size > 0) {
                         /* Reserve space in the file for the entire array */
-                        if(H5D__contig_alloc(f, dxpl_id, &layout->storage.u.contig/*out*/) < 0)
+                        if(H5D__contig_alloc(f, io_info->md_dxpl_id, &layout->storage.u.contig/*out*/) < 0)
                             HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to initialize contiguous storage")
 
                         /* Indicate that we should initialize storage space */
@@ -2207,7 +2329,7 @@ H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc
             case H5D_CHUNKED:
                 if(!(*dset->shared->layout.ops->is_space_alloc)(&dset->shared->layout.storage)) {
                     /* Create the root of the index that manages chunked storage */
-                    if(H5D__chunk_create(dset /*in,out*/, dxpl_id) < 0)
+                    if(H5D__chunk_create(dset /*in,out*/, io_info->md_dxpl_id) < 0)
                         HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to initialize chunked storage")
 
                     /* Indicate that we set the storage addr */
@@ -2280,7 +2402,7 @@ H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc
                  * this is icky. -QAK
                  */
                 if(!(dset->shared->dcpl_cache.fill.alloc_time == H5D_ALLOC_TIME_INCR && time_alloc == H5D_ALLOC_WRITE))
-                    if(H5D__init_storage(dset, full_overwrite, old_dim, dxpl_id) < 0)
+                    if(H5D__init_storage(io_info, full_overwrite, old_dim) < 0)
                         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
             } /* end if */
             else {
@@ -2294,7 +2416,7 @@ H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc
                  * the fill value _is_ set, do that now */
                 if(dset->shared->dcpl_cache.fill.fill_time == H5D_FILL_TIME_ALLOC ||
                         (dset->shared->dcpl_cache.fill.fill_time == H5D_FILL_TIME_IFSET && fill_status == H5D_FILL_VALUE_USER_DEFINED))
-                    if(H5D__init_storage(dset, full_overwrite, old_dim, dxpl_id) < 0)
+                    if(H5D__init_storage(io_info, full_overwrite, old_dim) < 0)
                         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
             } /* end else */
         } /* end if */
@@ -2308,7 +2430,7 @@ H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc
          */
         if(time_alloc != H5D_ALLOC_CREATE && addr_set)
             /* Mark the layout as dirty, for later writing to the file */
-            if(H5D__mark(dset, dxpl_id, H5D_MARK_LAYOUT) < 0)
+            if(H5D__mark(dset, io_info->md_dxpl_id, H5D_MARK_LAYOUT) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to mark dataspace as dirty")
     } /* end if */
 
@@ -2332,10 +2454,10 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5D__init_storage(const H5D_t *dset, hbool_t full_overwrite, hsize_t old_dim[],
-    hid_t dxpl_id)
+H5D__init_storage(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_t old_dim[])
 {
-    herr_t		ret_value = SUCCEED;    /* Return value */
+    const H5D_t *dset = io_info->dset;     /* dataset pointer */
+    herr_t ret_value = SUCCEED;           /* Return value */
 
     FUNC_ENTER_STATIC
 
@@ -2346,7 +2468,7 @@ H5D__init_storage(const H5D_t *dset, hbool_t full_overwrite, hsize_t old_dim[],
             /* If we will be immediately overwriting the values, don't bother to clear them */
             if(!full_overwrite) {
                 /* Fill the compact dataset storage */
-                if(H5D__compact_fill(dset, dxpl_id) < 0)
+                if(H5D__compact_fill(dset, io_info->md_dxpl_id) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize compact dataset storage")
             } /* end if */
             break;
@@ -2355,7 +2477,7 @@ H5D__init_storage(const H5D_t *dset, hbool_t full_overwrite, hsize_t old_dim[],
             /* Don't write default fill values to external files */
             /* If we will be immediately overwriting the values, don't bother to clear them */
             if((dset->shared->dcpl_cache.efl.nused == 0 || dset->shared->dcpl_cache.fill.buf) && !full_overwrite)
-                if(H5D__contig_fill(dset, dxpl_id) < 0)
+                if(H5D__contig_fill(io_info) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset")
             break;
 
@@ -2371,7 +2493,7 @@ H5D__init_storage(const H5D_t *dset, hbool_t full_overwrite, hsize_t old_dim[],
                 if(old_dim == NULL)
                     old_dim = zero_dim;
 
-                if(H5D__chunk_allocate(dset, dxpl_id, full_overwrite, old_dim) < 0)
+                if(H5D__chunk_allocate(io_info, full_overwrite, old_dim) < 0)
                     HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset")
                 break;
             } /* end block */
@@ -2840,10 +2962,16 @@ H5D__set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
         } /* end if */
 
         /* Allocate space for the new parts of the dataset, if appropriate */
-        if(expand && dset->shared->dcpl_cache.fill.alloc_time == H5D_ALLOC_TIME_EARLY)
-            if(H5D__alloc_storage(dset, dxpl_id, H5D_ALLOC_EXTEND, FALSE, curr_dims) < 0)
-                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to extend dataset storage")
+        if(expand && dset->shared->dcpl_cache.fill.alloc_time == H5D_ALLOC_TIME_EARLY) {
+            H5D_io_info_t io_info;
+
+            io_info.dset = dset;
+            io_info.raw_dxpl_id = H5AC_rawdata_dxpl_id;
+            io_info.md_dxpl_id = dxpl_id;
 
+            if(H5D__alloc_storage(&io_info, H5D_ALLOC_EXTEND, FALSE, curr_dims) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to extend dataset storage")
+        }
         /*-------------------------------------------------------------------------
          * Remove chunk information in the case of chunked datasets
          * This removal takes place only in case we are shrinking the dateset
@@ -2955,7 +3083,8 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5D__format_convert
  *
- * Purpose:     To convert a dataset's chunk indexing type to version 1 btree
+ * Purpose:     For chunked: downgrade the chunk indexing type to version 1 B-tree
+ *              For compact/contiguous: downgrade layout version to 3
  *
  * Return:	Success:	Non-negative
  *		Failure:	Negative
@@ -2970,7 +3099,7 @@ H5D__format_convert(H5D_t *dataset, hid_t dxpl_id)
     H5O_t *oh = NULL;                   	/* Pointer to dataset's object header */
     H5D_chk_idx_info_t new_idx_info;    	/* Index info for the new layout */
     H5D_chk_idx_info_t idx_info;        	/* Index info for the current layout */
-    H5O_layout_t        newlayout;		/* The new layout */
+    H5O_layout_t newlayout;			/* The new layout */
     herr_t ret_value = SUCCEED;         	/* Return value */
 
     FUNC_ENTER_PACKAGE_TAG(dxpl_id, dataset->oloc.addr, FAIL)
@@ -2978,64 +3107,86 @@ H5D__format_convert(H5D_t *dataset, hid_t dxpl_id)
     /* Check args */
     HDassert(dataset);
 
-    /* Set up the current index info */
-    idx_info.f = dataset->oloc.file;
-    idx_info.dxpl_id = dxpl_id;
-    idx_info.pline = &dataset->shared->dcpl_cache.pline;
-    idx_info.layout = &dataset->shared->layout.u.chunk;
-    idx_info.storage = &dataset->shared->layout.storage.u.chunk;
-
-    /* Copy the current layout info to the new layout */
-    HDmemcpy(&newlayout, &dataset->shared->layout, sizeof(H5O_layout_t));
-
-    /* Set up info for version 1 B-tree in the new layout */
-    newlayout.version = H5O_LAYOUT_VERSION_3;
-    newlayout.storage.u.chunk.idx_type = H5D_CHUNK_IDX_BTREE;
-    newlayout.storage.u.chunk.idx_addr = HADDR_UNDEF;
-    newlayout.storage.u.chunk.ops = H5D_COPS_BTREE;
-    newlayout.storage.u.chunk.u.btree.shared = NULL;
-
-    /* Set up the index info to version 1 B-tree */
-    new_idx_info.f = dataset->oloc.file;
-    new_idx_info.dxpl_id = dxpl_id;
-    new_idx_info.pline = &dataset->shared->dcpl_cache.pline;
-    new_idx_info.layout = &newlayout.u.chunk;
-    new_idx_info.storage = &newlayout.storage.u.chunk;
-
-    /* Initialize version 1 B-tree */
-    if(newlayout.storage.u.chunk.ops->init && 
-            (newlayout.storage.u.chunk.ops->init)(&new_idx_info, dataset->shared->space, dataset->oloc.addr) < 0)
-	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize indexing information")
+    switch(dataset->shared->layout.type) {
+        case H5D_CHUNKED:
+	{
+	    HDassert(dataset->shared->layout.u.chunk.idx_type != H5D_CHUNK_IDX_BTREE);
+
+	    /* Set up the current index info */
+	    idx_info.f = dataset->oloc.file;
+	    idx_info.dxpl_id = dxpl_id;
+	    idx_info.pline = &dataset->shared->dcpl_cache.pline;
+	    idx_info.layout = &dataset->shared->layout.u.chunk;
+	    idx_info.storage = &dataset->shared->layout.storage.u.chunk;
+
+	    /* Copy the current layout info to the new layout */
+	    HDmemcpy(&newlayout, &dataset->shared->layout, sizeof(H5O_layout_t));
+
+	    /* Set up info for version 1 B-tree in the new layout */
+	    newlayout.version = H5O_LAYOUT_VERSION_3;
+	    newlayout.storage.u.chunk.idx_type = H5D_CHUNK_IDX_BTREE;
+	    newlayout.storage.u.chunk.idx_addr = HADDR_UNDEF;
+	    newlayout.storage.u.chunk.ops = H5D_COPS_BTREE;
+	    newlayout.storage.u.chunk.u.btree.shared = NULL;
+
+	    /* Set up the index info to version 1 B-tree */
+	    new_idx_info.f = dataset->oloc.file;
+	    new_idx_info.dxpl_id = dxpl_id;
+	    new_idx_info.pline = &dataset->shared->dcpl_cache.pline;
+	    new_idx_info.layout = &newlayout.u.chunk;
+	    new_idx_info.storage = &newlayout.storage.u.chunk;
+
+	    /* Initialize version 1 B-tree */
+	    if(newlayout.storage.u.chunk.ops->init && 
+              (newlayout.storage.u.chunk.ops->init)(&new_idx_info, dataset->shared->space, dataset->oloc.addr) < 0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize indexing information")
     
-    /* If the current chunk index exists */
-    if(H5F_addr_defined(dataset->shared->layout.storage.u.chunk.idx_addr)) {
-	/* Create v1 B-tree chunk index */
-	if((newlayout.storage.u.chunk.ops->create)(&new_idx_info) < 0)
-	    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't create chunk index")
-
-	/* Iterate over the chunks in the current index and insert the chunk addresses 
-	 * into the version 1 B-tree chunk index */
-	if(H5D__chunk_format_convert(dataset, &idx_info, &new_idx_info) < 0)
-            HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to iterate over chunk index to chunk info")
-    } /* end if */
+	    /* If the current chunk index exists */
+	    if(H5F_addr_defined(dataset->shared->layout.storage.u.chunk.idx_addr)) {
+		/* Create v1 B-tree chunk index */
+		if((newlayout.storage.u.chunk.ops->create)(&new_idx_info) < 0)
+		    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't create chunk index")
+
+		/* Iterate over the chunks in the current index and insert the chunk addresses 
+		 * into the version 1 B-tree chunk index */
+		if(H5D__chunk_format_convert(dataset, &idx_info, &new_idx_info) < 0)
+		    HGOTO_ERROR(H5E_DATASET, H5E_BADITER, FAIL, "unable to iterate over chunk index to chunk info")
+	    } /* end if */
+
+	    /* Release the old (i.e. current) chunk index */
+	    if(dataset->shared->layout.storage.u.chunk.ops->dest &&
+	       (dataset->shared->layout.storage.u.chunk.ops->dest)(&idx_info) < 0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to release chunk index info")
 
-    /* Release the old (i.e. current) chunk index */
-    if(dataset->shared->layout.storage.u.chunk.ops->dest &&
-            (dataset->shared->layout.storage.u.chunk.ops->dest)(&idx_info) < 0)
-      HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "unable to release chunk index info")
+	    /* Delete the "layout" message */
+	    if(H5O_msg_remove(&dataset->oloc, H5O_LAYOUT_ID, H5O_ALL, TRUE, dxpl_id) < 0)
+		HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to delete layout message")
 
-    /* Delete the "layout" message */
-    if(H5O_msg_remove(&dataset->oloc, H5O_LAYOUT_ID, H5O_ALL, TRUE, dxpl_id) < 0)
-	HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to delete layout message")
+	    HDmemcpy(&dataset->shared->layout, &newlayout, sizeof(H5O_layout_t));
 
-    HDmemcpy(&dataset->shared->layout, &newlayout, sizeof(H5O_layout_t));
+	    if(NULL == (oh = H5O_pin(&dataset->oloc, dxpl_id)))
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTPIN, FAIL, "unable to pin dataset object header")
 
-    if(NULL == (oh = H5O_pin(&dataset->oloc, dxpl_id)))
-	HGOTO_ERROR(H5E_DATASET, H5E_CANTPIN, FAIL, "unable to pin dataset object header")
+	    /* Append the new layout message to the object header */
+	    if(H5O_msg_append_oh(dataset->oloc.file, dxpl_id, oh, H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &newlayout) < 0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update old fill value header message")
 
-    /* Append the new layout message to the object header */
-    if(H5O_msg_append_oh(dataset->oloc.file, dxpl_id, oh, H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &newlayout) < 0)
-	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update old fill value header message")
+	    break;
+	}
+
+	case H5D_CONTIGUOUS:
+        case H5D_COMPACT:
+	    HDassert(dataset->shared->layout.version > H5O_LAYOUT_VERSION_DEFAULT);
+	    dataset->shared->layout.version = H5O_LAYOUT_VERSION_DEFAULT;
+	    if(H5O_msg_write(&(dataset->oloc), H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &(dataset->shared->layout), dxpl_id) < 0)
+		HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message")
+	    break;
+
+	case H5D_VIRTUAL:
+	default:
+	    HDassert(0);
+            break;
+    }
 
 done:
     /* Release pointer to object header */
@@ -3226,7 +3377,7 @@ H5D_get_create_plist(H5D_t *dset)
         HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "can't get property list")
 
     /* Retrieve any object creation properties */
-    if(H5O_get_create_plist(&dset->oloc, H5AC_ind_dxpl_id, new_plist) < 0)
+    if(H5O_get_create_plist(&dset->oloc, H5AC_ind_read_dxpl_id, new_plist) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get object creation info")
 
     /* Get the layout property */
@@ -3288,7 +3439,7 @@ H5D_get_create_plist(H5D_t *dset)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy dataset datatype for fill value")
 
         /* Set up type conversion function */
-        if(NULL == (tpath = H5T_path_find(dset->shared->type, copied_fill.type, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+        if(NULL == (tpath = H5T_path_find(dset->shared->type, copied_fill.type, NULL, NULL, H5AC_noio_dxpl_id, FALSE)))
             HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
 
         /* Convert disk form of fill value into memory form */
@@ -3316,7 +3467,7 @@ H5D_get_create_plist(H5D_t *dset)
             } /* end if */
 
             /* Convert fill value */
-            if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, copied_fill.buf, bkg_buf, H5AC_ind_dxpl_id) < 0) {
+            if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, copied_fill.buf, bkg_buf, H5AC_noio_dxpl_id) < 0) {
                 H5I_dec_ref(src_id);
                 H5I_dec_ref(dst_id);
                 if(bkg_buf)
@@ -3420,6 +3571,18 @@ H5D_get_access_plist(H5D_t *dset)
             HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set append flush property")
     } /* end if */
 
+    /* Set the VDS view option */
+    if(H5P_set(new_plist, H5D_ACS_VDS_VIEW_NAME, &(dset->shared->layout.storage.u.virt.view)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set VDS view")
+
+    /* Set the VDS printf gap option */
+    if(H5P_set(new_plist, H5D_ACS_VDS_PRINTF_GAP_NAME, &(dset->shared->layout.storage.u.virt.printf_gap)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set VDS printf gap")
+
+    /* Set the external file prefix option */
+    if(H5P_set(new_plist, H5D_ACS_EFILE_PREFIX_NAME, &(dset->shared->extfile_prefix)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set external file prefix")
+
     /* Set the return value */
     ret_value = new_dapl_id;
 
@@ -3458,7 +3621,7 @@ H5D_get_space(H5D_t *dset)
 
     /* If the layout is virtual, update the extent */
     if(dset->shared->layout.type == H5D_VIRTUAL)
-        if(H5D__virtual_set_extent_unlim(dset, H5AC_ind_dxpl_id) < 0)
+        if(H5D__virtual_set_extent_unlim(dset, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update virtual dataset extent")
 
     /* Read the data space message and return a data space object */
diff --git a/src/H5Dio.c b/src/H5Dio.c
index ac5c82b..de22fd1 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -386,9 +386,7 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
     H5D_storage_t store;                /*union of EFL and chunk pointer in file space */
     hssize_t	snelmts;                /*total number of elmts	(signed) */
     hsize_t	nelmts;                 /*total number of elmts	*/
-#ifdef H5_HAVE_PARALLEL
     hbool_t     io_info_init = FALSE;   /* Whether the I/O info has been initialized */
-#endif /*H5_HAVE_PARALLEL*/
     hbool_t     io_op_init = FALSE;     /* Whether the I/O op has been initialized */
     H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
     H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache;   /* Data transfer property cache */
@@ -508,7 +506,8 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
             HGOTO_DONE(SUCCEED)
 
         /* Go fill the user's selection with the dataset's fill value */
-        if(H5D__fill(dataset->shared->dcpl_cache.fill.buf, dataset->shared->type, buf, type_info.mem_type, mem_space, dxpl_id) < 0)
+        if(H5D__fill(dataset->shared->dcpl_cache.fill.buf, dataset->shared->type, buf, 
+                     type_info.mem_type, mem_space, dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "filling buf failed")
         else
             HGOTO_DONE(SUCCEED)
@@ -519,9 +518,7 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
     io_info.u.rbuf = buf;
     if(H5D__ioinfo_init(dataset, dxpl_cache, dxpl_id, &type_info, &store, &io_info) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to set up I/O operation")
-#ifdef H5_HAVE_PARALLEL
     io_info_init = TRUE;
-#endif /*H5_HAVE_PARALLEL*/
 
     /* Sanity check that space is allocated, if there are elements */
     if(nelmts > 0)
@@ -549,12 +546,20 @@ done:
     /* Shut down the I/O op information */
     if(io_op_init && io_info.layout_ops.io_term && (*io_info.layout_ops.io_term)(&fm) < 0)
         HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to shut down I/O op info")
+
+    if(io_info_init) {
+#ifdef H5_DEBUG_BUILD
+        /* release the metadata dxpl that was copied in the init function */
+        if(H5I_dec_ref(io_info.md_dxpl_id) < 0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "can't close metadata dxpl")
+#endif /* H5_DEBUG_BUILD */
 #ifdef H5_HAVE_PARALLEL
-    /* Shut down io_info struct */
-    if(io_info_init)
+        /* Shut down io_info struct */
         if(H5D__ioinfo_term(&io_info) < 0)
             HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't shut down io_info")
 #endif /*H5_HAVE_PARALLEL*/
+    }
+
     /* Shut down datatype info for operation */
     if(type_info_init && H5D__typeinfo_term(&type_info) < 0)
         HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to shut down type info")
@@ -605,9 +610,7 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
     H5D_storage_t store;                /*union of EFL and chunk pointer in file space */
     hssize_t	snelmts;                /*total number of elmts	(signed) */
     hsize_t	nelmts;                 /*total number of elmts	*/
-#ifdef H5_HAVE_PARALLEL
     hbool_t     io_info_init = FALSE;   /* Whether the I/O info has been initialized */
-#endif /*H5_HAVE_PARALLEL*/
     hbool_t     io_op_init = FALSE;     /* Whether the I/O op has been initialized */
     H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
     H5D_dxpl_cache_t *dxpl_cache = &_dxpl_cache;   /* Data transfer property cache */
@@ -740,6 +743,13 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
     /* Retrieve dataset properties */
     /* <none needed currently> */
 
+    /* Set up I/O operation */
+    io_info.op_type = H5D_IO_OP_WRITE;
+    io_info.u.wbuf = buf;
+    if(H5D__ioinfo_init(dataset, dxpl_cache, dxpl_id, &type_info, &store, &io_info) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set up I/O operation")
+    io_info_init = TRUE;
+
     /* Allocate data space and initialize it if it hasn't been. */
     if(nelmts > 0 && dataset->shared->dcpl_cache.efl.nused == 0 &&
             !(*dataset->shared->layout.ops->is_space_alloc)(&dataset->shared->layout.storage)) {
@@ -756,20 +766,11 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
         else
             full_overwrite = (hbool_t)((hsize_t)file_nelmts == nelmts ? TRUE : FALSE);
 
- 	/* Allocate storage */
-        if(H5D__alloc_storage(dataset, dxpl_id, H5D_ALLOC_WRITE, full_overwrite, NULL) < 0)
+ 	    /* Allocate storage */
+        if(H5D__alloc_storage(&io_info, H5D_ALLOC_WRITE, full_overwrite, NULL) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
     } /* end if */
 
-    /* Set up I/O operation */
-    io_info.op_type = H5D_IO_OP_WRITE;
-    io_info.u.wbuf = buf;
-    if(H5D__ioinfo_init(dataset, dxpl_cache, dxpl_id, &type_info, &store, &io_info) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set up I/O operation")
-#ifdef H5_HAVE_PARALLEL
-    io_info_init = TRUE;
-#endif /*H5_HAVE_PARALLEL*/
-
     /* Call storage method's I/O initialization routine */
     HDmemset(&fm, 0, sizeof(H5D_chunk_map_t));
     if(io_info.layout_ops.io_init && (*io_info.layout_ops.io_init)(&io_info, &type_info, nelmts, file_space, mem_space, &fm) < 0)
@@ -808,11 +809,20 @@ done:
     /* Shut down the I/O op information */
     if(io_op_init && io_info.layout_ops.io_term && (*io_info.layout_ops.io_term)(&fm) < 0)
         HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to shut down I/O op info")
+
+    if(io_info_init) {
+#ifdef H5_DEBUG_BUILD
+        /* release the metadata dxpl that was copied in the init function */
+        if(H5I_dec_ref(io_info.md_dxpl_id) < 0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "can't close metadata dxpl")
+#endif /* H5_DEBUG_BUILD */
 #ifdef H5_HAVE_PARALLEL
-    /* Shut down io_info struct */
-    if(io_info_init && H5D__ioinfo_term(&io_info) < 0)
-        HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't shut down io_info")
+        /* Shut down io_info struct */
+        if(H5D__ioinfo_term(&io_info) < 0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't shut down io_info")
 #endif /*H5_HAVE_PARALLEL*/
+    }
+
     /* Shut down datatype info for operation */
     if(type_info_init && H5D__typeinfo_term(&type_info) < 0)
         HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "unable to shut down type info")
@@ -847,7 +857,9 @@ const
     H5D_dxpl_cache_t *dxpl_cache, hid_t dxpl_id,
     const H5D_type_info_t *type_info, H5D_storage_t *store, H5D_io_info_t *io_info)
 {
-    FUNC_ENTER_STATIC_NOERR
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_STATIC
 
     /* check args */
     HDassert(dset);
@@ -856,10 +868,19 @@ const
     HDassert(type_info->tpath);
     HDassert(io_info);
 
+    /* init both dxpls to the original one */
+    io_info->md_dxpl_id = dxpl_id;
+    io_info->raw_dxpl_id = dxpl_id;
+
+    /* set the dxpl IO type for sanity checking at the FD layer */
+#ifdef H5_DEBUG_BUILD
+    if(H5D_set_io_info_dxpls(io_info, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't set metadata and raw data dxpls")
+#endif /* H5_DEBUG_BUILD */
+
     /* Set up "normal" I/O fields */
     io_info->dset = dset;
     io_info->dxpl_cache = dxpl_cache;
-    io_info->dxpl_id = dxpl_id;
     io_info->store = store;
 
     /* Set I/O operations to initial values */
@@ -891,7 +912,8 @@ const
     io_info->using_mpi_vfd = H5F_HAS_FEATURE(dset->oloc.file, H5FD_FEAT_HAS_MPI);
 #endif /* H5_HAVE_PARALLEL */
 
-    FUNC_LEAVE_NOAPI(SUCCEED)
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D__ioinfo_init() */
 
 

@@ -1171,7 +1193,7 @@ H5D__ioinfo_term(H5D_io_info_t *io_info)
             H5P_genplist_t *dx_plist;           /* Data transer property list */
 
             /* Get the dataset transfer property list */
-            if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(io_info->dxpl_id)))
+            if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(io_info->raw_dxpl_id)))
                 HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
 
             /* Restore the original parallel I/O mode */
@@ -1184,7 +1206,7 @@ H5D__ioinfo_term(H5D_io_info_t *io_info)
             H5P_genplist_t *dx_plist;           /* Data transer property list */
 
             /* Get the dataset transfer property list */
-            if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(io_info->dxpl_id)))
+            if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(io_info->raw_dxpl_id)))
                 HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
 
             /* Restore the original parallel I/O mode */
@@ -1230,3 +1252,53 @@ H5D__typeinfo_term(const H5D_type_info_t *type_info)
     FUNC_LEAVE_NOAPI(SUCCEED)
 } /* end H5D__typeinfo_term() */
 
+#ifdef H5_DEBUG_BUILD
+

+/*-------------------------------------------------------------------------
+ * Function:	H5D_set_io_info_dxpls
+ *
+ * Purpose:	Set the metadata and raw data dxpls in an io_info struct 
+ *              for sanity checking at the H5FD layer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Mohamad Chaarawi
+ *              January 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_set_io_info_dxpls(H5D_io_info_t *io_info, hid_t dxpl_id)
+{
+    H5P_genplist_t  *xfer_plist = NULL; /* Dataset transfer property list object */
+    H5FD_dxpl_type_t  dxpl_type;    /* Property indicating the type of the internal dxpl */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+    /* Get the property list object */
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_BADATOM, FAIL, "can't get new property list object")
+            
+    /* create the metadata dxpl */
+    if((io_info->md_dxpl_id = H5P_copy_plist(xfer_plist, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't copy dxpl")
+
+    /* Set the dxpl type property  */
+    dxpl_type = H5FD_RAWDATA_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set dxpl type property")
+
+    /* Get the property list object */
+    if (NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(io_info->md_dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_BADATOM, FAIL, "can't get new property list object")
+
+    /* Set the dxpl type property  */
+    dxpl_type = H5FD_METADATA_DXPL;
+    if(H5P_set(xfer_plist, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set dxpl type property")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_set_io_info_dxpls */
+#endif /* H5_DEBUG_BUILD */
diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c
index 293ee42..42b3098 100644
--- a/src/H5Dlayout.c
+++ b/src/H5Dlayout.c
@@ -496,10 +496,16 @@ H5D__layout_oh_create(H5F_t *file, hid_t dxpl_id, H5O_t *oh, H5D_t *dset,
      * Allocate storage if space allocate time is early; otherwise delay
      * allocation until later.
      */
-    if(fill_prop->alloc_time == H5D_ALLOC_TIME_EARLY)
-        if(H5D__alloc_storage(dset, dxpl_id, H5D_ALLOC_CREATE, FALSE, NULL) < 0)
-            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
+    if(fill_prop->alloc_time == H5D_ALLOC_TIME_EARLY) {
+        H5D_io_info_t io_info;
+
+        io_info.dset = dset;
+        io_info.raw_dxpl_id = H5AC_rawdata_dxpl_id;
+        io_info.md_dxpl_id = dxpl_id;
 
+        if(H5D__alloc_storage(&io_info, H5D_ALLOC_CREATE, FALSE, NULL) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
+    }
     /* Update external storage message, if it's used */
     if(dset->shared->dcpl_cache.efl.nused > 0) {
         H5O_efl_t *efl = &dset->shared->dcpl_cache.efl; /* Dataset's external file list */
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 0ba340a..441cc96 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -263,7 +263,7 @@ H5D__mpio_select_read(const H5D_io_info_t *io_info, const H5D_type_info_t H5_ATT
     FUNC_ENTER_PACKAGE
 
     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)
+    if(H5F_block_read(io_info->dset->oloc.file, H5FD_MEM_DRAW, store_contig->dset_addr, (size_t)mpi_buf_count, io_info->raw_dxpl_id, io_info->u.rbuf) < 0)
         HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "can't finish collective parallel read")
 
 done:
@@ -293,7 +293,7 @@ H5D__mpio_select_write(const H5D_io_info_t *io_info, const H5D_type_info_t H5_AT
 
     /*OKAY: CAST DISCARDS CONST QUALIFIER*/
     H5_CHECK_OVERFLOW(mpi_buf_count, hsize_t, size_t);
-    if(H5F_block_write(io_info->dset->oloc.file, H5FD_MEM_DRAW, store_contig->dset_addr, (size_t)mpi_buf_count, io_info->dxpl_id, io_info->u.wbuf) < 0)
+    if(H5F_block_write(io_info->dset->oloc.file, H5FD_MEM_DRAW, store_contig->dset_addr, (size_t)mpi_buf_count, io_info->raw_dxpl_id, io_info->u.wbuf) < 0)
        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "can't finish collective parallel write")
 
 done:
@@ -475,14 +475,14 @@ H5D__contig_collective_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_
 
     /* Sanity check */
     HDassert(H5FD_MPIO == H5F_DRIVER_ID(io_info->dset->oloc.file));
-    HDassert(TRUE == H5P_isa_class(io_info->dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(io_info->raw_dxpl_id, H5P_DATASET_XFER));
 
     /* 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")
 
     /* Obtain the data transfer properties */
-    if(NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+    if(NULL == (dx_plist = H5I_object(io_info->raw_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
@@ -522,14 +522,14 @@ H5D__contig_collective_write(H5D_io_info_t *io_info, const H5D_type_info_t *type
 
     /* Sanity check */
     HDassert(H5FD_MPIO == H5F_DRIVER_ID(io_info->dset->oloc.file));
-    HDassert(TRUE == H5P_isa_class(io_info->dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(io_info->raw_dxpl_id, H5P_DATASET_XFER));
 
     /* 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")
 
     /* Obtain the data transfer properties */
-    if(NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+    if(NULL == (dx_plist = H5I_object(io_info->raw_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
@@ -601,7 +601,7 @@ H5D__chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
     HDassert(fm);
 
     /* Obtain the data transfer properties */
-    if(NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+    if(NULL == (dx_plist = H5I_object(io_info->raw_dxpl_id)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
 
     /* Check the optional property list on what to do with collective chunk IO. */
@@ -643,7 +643,7 @@ H5D__chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
     int               new_value;
 
     /* Get the dataset transfer property list */
-    if(NULL == (plist = (H5P_genplist_t *)H5I_object(io_info->dxpl_id)))
+    if(NULL == (plist = (H5P_genplist_t *)H5I_object(io_info->raw_dxpl_id)))
         HGOTO_ERROR(H5E_IO, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
 
     /*** Test collective chunk user-input optimization APIs. ***/
@@ -863,7 +863,7 @@ H5D__link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
             mspace = chunk_info->mspace;
 
             /* Look up address of chunk */
-            if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
+            if(H5D__chunk_lookup(io_info->dset, io_info->md_dxpl_id, chunk_info->scaled, &udata) < 0)
                 HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk address")
             ctg_store.contig.dset_addr = udata.chunk_block.offset;
         } /* end else */
@@ -1436,7 +1436,7 @@ H5D__final_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
     FUNC_ENTER_STATIC
 
     /* Pass buf type, file type to the file driver.  */
-    if(H5FD_mpi_setup_collective(io_info->dxpl_id, mpi_buf_type, mpi_file_type) < 0)
+    if(H5FD_mpi_setup_collective(io_info->raw_dxpl_id, mpi_buf_type, mpi_file_type) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O properties")
 
     if(io_info->op_type == H5D_IO_OP_WRITE) {
@@ -1590,7 +1590,7 @@ if(H5DEBUG(D))
             H5D_chunk_ud_t udata;   /* User data for querying chunk info */
 
             /* Get address of chunk */
-            if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->scaled, &udata) < 0)
+            if(H5D__chunk_lookup(io_info->dset, io_info->md_dxpl_id, chunk_info->scaled, &udata) < 0)
                 HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
             chunk_addr = udata.chunk_block.offset;
         } /* end if */
@@ -1791,7 +1791,7 @@ H5D__obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
     H5P_genplist_t    *plist;           /* Property list pointer */
 
     /* Get the dataset transfer property list */
-    if(NULL == (plist = (H5P_genplist_t *)H5I_object(io_info->dxpl_id)))
+    if(NULL == (plist = (H5P_genplist_t *)H5I_object(io_info->raw_dxpl_id)))
         HGOTO_ERROR(H5E_IO, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
 
     check_prop = H5P_exist_plist(plist, H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME);
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index 15e0a93..215f034 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -47,17 +47,19 @@
 #define H5D_MINHDR_SIZE 256
 
 /* [Simple] Macro to construct a H5D_io_info_t from it's components */
-#define H5D_BUILD_IO_INFO_WRT(io_info, ds, dxpl_c, dxpl_i, str, buf)    \
+#define H5D_BUILD_IO_INFO_WRT(io_info, ds, dxpl_c, dxpl_m, dxpl_r, str, buf)    \
     (io_info)->dset = ds;                                               \
     (io_info)->dxpl_cache = dxpl_c;                                     \
-    (io_info)->dxpl_id = dxpl_i;                                        \
+    (io_info)->raw_dxpl_id = dxpl_r;                                    \
+    (io_info)->md_dxpl_id = dxpl_m;                                     \
     (io_info)->store = str;                                             \
     (io_info)->op_type = H5D_IO_OP_WRITE;                               \
     (io_info)->u.wbuf = buf
-#define H5D_BUILD_IO_INFO_RD(io_info, ds, dxpl_c, dxpl_i, str, buf)     \
+#define H5D_BUILD_IO_INFO_RD(io_info, ds, dxpl_c, dxpl_m, dxpl_r, str, buf) \
     (io_info)->dset = ds;                                               \
     (io_info)->dxpl_cache = dxpl_c;                                     \
-    (io_info)->dxpl_id = dxpl_i;                                        \
+    (io_info)->raw_dxpl_id = dxpl_r;                                    \
+    (io_info)->md_dxpl_id = dxpl_m;                                     \
     (io_info)->store = str;                                             \
     (io_info)->op_type = H5D_IO_OP_READ;                                \
     (io_info)->u.rbuf = buf
@@ -83,7 +85,7 @@
 
 /* v2 B-tree creation values for raw meta_size */
 #define H5D_BT2_CREATE_PARAM_SIZE	6		/* Size of the creation parameters in bytes */
-#define H5D_BT2_NODE_SIZE       	512
+#define H5D_BT2_NODE_SIZE       	2048
 #define H5D_BT2_SPLIT_PERC      	100
 #define H5D_BT2_MERGE_PERC      	40
 
@@ -214,7 +216,8 @@ typedef struct H5D_io_info_t {
     const
 #endif /* H5_HAVE_PARALLEL */
         H5D_dxpl_cache_t *dxpl_cache; /* Pointer to cached DXPL info */
-    hid_t dxpl_id;              /* Original DXPL ID */
+    hid_t raw_dxpl_id;          /* Original DXPL ID */
+    hid_t md_dxpl_id;           /* metadata dxpl needed for parallel HDF5 */
 #ifdef H5_HAVE_PARALLEL
     MPI_Comm comm;              /* MPI communicator for file */
     hbool_t using_mpi_vfd;      /* Whether the file is using an MPI-based VFD */
@@ -272,7 +275,6 @@ typedef struct H5D_chunk_rec_t {
  * to which the index points.
  */
 typedef struct H5D_chunk_common_ud_t {
-    /* downward */
     const H5O_layout_chunk_t *layout;           /* Chunk layout description */
     const H5O_storage_chunk_t *storage;         /* Chunk storage description */
     const hsize_t *scaled;		        /* Scaled coordinates for a chunk */
@@ -280,15 +282,15 @@ typedef struct H5D_chunk_common_ud_t {
 
 /* B-tree callback info for various operations */
 typedef struct H5D_chunk_ud_t {
+    /* Downward */
     H5D_chunk_common_ud_t common;       /* Common info for B-tree user data (must be first) */
 
     /* Upward */
-    unsigned    idx_hint;               /*index of chunk in cache, if present */
-    H5F_block_t chunk_block;            /*offset/length of chunk in file */
-    unsigned	filter_mask;		/*excluded filters	*/
-    hbool_t     new_unfilt_chunk;       /*whether the chunk just became unfiltered */
-    hsize_t     chunk_idx;              /*chunk index for EA, FA indexing */
-    hbool_t     need_modify;
+    unsigned    idx_hint;               /* Index of chunk in cache, if present */
+    H5F_block_t chunk_block;            /* Offset/length of chunk in file */
+    unsigned	filter_mask;		/* Excluded filters	*/
+    hbool_t     new_unfilt_chunk;       /* Whether the chunk just became unfiltered */
+    hsize_t     chunk_idx;              /* Chunk index for EA, FA indexing */
 } H5D_chunk_ud_t;
 
 /* Typedef for "generic" chunk callbacks */
@@ -475,7 +477,10 @@ typedef struct H5D_shared_t {
                                          */
         H5D_rdcc_t      chunk;          /* Information about chunked data */
     } cache;
+
     H5D_append_flush_t  append_flush;	/* Append flush property information */
+
+    char                *extfile_prefix; /* expanded external file prefix */
 } H5D_shared_t;
 
 struct H5D_t {
@@ -576,7 +581,7 @@ H5_DLL H5D_t *H5D__open_name(const H5G_loc_t *loc, const char *name,
     hid_t dapl_id, hid_t dxpl_id);
 H5_DLL herr_t H5D__get_space_status(H5D_t *dset, H5D_space_status_t *allocation,
     hid_t dxpl_id);
-H5_DLL herr_t H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc,
+H5_DLL herr_t H5D__alloc_storage(const H5D_io_info_t *io_info, H5D_time_alloc_t time_alloc,
     hbool_t full_overwrite, hsize_t old_dim[]);
 H5_DLL herr_t H5D__get_storage_size(H5D_t *dset, hid_t dxpl_id, hsize_t *storage_size);
 H5_DLL haddr_t H5D__get_offset(const H5D_t *dset);
@@ -590,6 +595,9 @@ H5_DLL herr_t H5D__flush_sieve_buf(H5D_t *dataset, hid_t dxpl_id);
 H5_DLL herr_t H5D__flush_real(H5D_t *dataset, hid_t dxpl_id);
 H5_DLL herr_t H5D__mark(const H5D_t *dataset, hid_t dxpl_id, unsigned flags);
 H5_DLL herr_t H5D__refresh(hid_t dset_id, H5D_t *dataset, hid_t dxpl_id);
+#ifdef H5_DEBUG_BUILD
+H5_DLL herr_t H5D_set_io_info_dxpls(H5D_io_info_t *io_info, hid_t dxpl_id);
+#endif /* H5_DEBUG_BUILD */
 
 /* To convert a dataset's chunk indexing type to v1 B-tree */
 H5_DLL herr_t H5D__format_convert(H5D_t *dataset, hid_t dxpl_id);
@@ -640,7 +648,7 @@ H5_DLL herr_t H5D__layout_oh_write(H5D_t *dataset, hid_t dxpl_id, H5O_t *oh,
 H5_DLL herr_t H5D__contig_alloc(H5F_t *f, hid_t dxpl_id,
     H5O_storage_contig_t *storage);
 H5_DLL hbool_t H5D__contig_is_space_alloc(const H5O_storage_t *storage);
-H5_DLL herr_t H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D__contig_fill(const H5D_io_info_t *io_info);
 H5_DLL herr_t H5D__contig_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
     hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
     H5D_chunk_map_t *fm);
@@ -662,8 +670,7 @@ H5_DLL hbool_t H5D__chunk_is_space_alloc(const H5O_storage_t *storage);
 H5_DLL herr_t H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id,
     const hsize_t *scaled, H5D_chunk_ud_t *udata);
 H5_DLL herr_t H5D__chunk_allocated(H5D_t *dset, hid_t dxpl_id, hsize_t *nbytes);
-H5_DLL herr_t H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id,
-    hbool_t full_overwrite, hsize_t old_dim[]);
+H5_DLL herr_t H5D__chunk_allocate(const H5D_io_info_t *io_info, hbool_t full_overwrite, hsize_t old_dim[]);
 H5_DLL herr_t H5D__chunk_update_old_edge_chunks(H5D_t *dset, hid_t dxpl_id,
     hsize_t old_dim[]);
 H5_DLL herr_t H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id,
@@ -724,8 +731,7 @@ H5_DLL herr_t H5D__fill_init(H5D_fill_buf_info_t *fb_info, void *caller_fill_buf
     H5MM_free_t free_func, void *free_info,
     const H5O_fill_t *fill, const H5T_t *dset_type, hid_t dset_type_id,
     size_t nelmts, size_t min_buf_size, hid_t dxpl_id);
-H5_DLL herr_t H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts,
-    hid_t dxpl_id);
+H5_DLL herr_t H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts, hid_t dxpl_id);
 H5_DLL herr_t H5D__fill_term(H5D_fill_buf_info_t *fb_info);
 
 #ifdef H5_HAVE_PARALLEL
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 4c5f914..12a56f0 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -55,6 +55,7 @@
 #define H5D_ACS_VDS_VIEW_NAME               "vds_view"      /* VDS view option */
 #define H5D_ACS_VDS_PRINTF_GAP_NAME         "vds_printf_gap" /* VDS printf gap size */
 #define H5D_ACS_APPEND_FLUSH_NAME    "append_flush"         /* Append flush actions */
+#define H5D_ACS_EFILE_PREFIX_NAME           "external file prefix" /* External file prefix */
 
 /* ======== Data transfer properties ======== */
 #define H5D_XFER_MAX_TEMP_BUF_NAME      "max_temp_buf"  /* Maximum temp buffer size */
diff --git a/src/H5Dscatgath.c b/src/H5Dscatgath.c
index 9902b7b..7c1abca 100644
--- a/src/H5Dscatgath.c
+++ b/src/H5Dscatgath.c
@@ -538,7 +538,7 @@ H5D__scatgath_read(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
              */
             if(H5T_convert(type_info->tpath, type_info->src_type_id, type_info->dst_type_id,
                     smine_nelmts, (size_t)0, (size_t)0, type_info->tconv_buf,
-                    type_info->bkg_buf, io_info->dxpl_id) < 0)
+                    type_info->bkg_buf, io_info->md_dxpl_id) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "datatype conversion failed")
 
             /* Do the data transform after the conversion (since we're using type mem_type) */
@@ -674,7 +674,7 @@ H5D__scatgath_write(const H5D_io_info_t *io_info, const H5D_type_info_t *type_in
              */
             if(H5T_convert(type_info->tpath, type_info->src_type_id, type_info->dst_type_id,
                     smine_nelmts, (size_t)0, (size_t)0, type_info->tconv_buf,
-                    type_info->bkg_buf, io_info->dxpl_id) < 0)
+                    type_info->bkg_buf, io_info->md_dxpl_id) < 0)
                  HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "datatype conversion failed")
         } /* end else */
 
@@ -948,7 +948,7 @@ H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination buffer provided")
 
     /* Fill the DXPL cache values for later use */
-    if(H5D__get_dxpl_cache(H5P_DATASET_XFER_DEFAULT, &dxpl_cache) < 0)
+    if(H5D__get_dxpl_cache(H5AC_noio_dxpl_id, &dxpl_cache) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
 
     /* Get datatype element size */
@@ -1050,7 +1050,7 @@ H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination buffer provided")
 
     /* Fill the DXPL cache values for later use */
-    if(H5D__get_dxpl_cache(H5P_DATASET_XFER_DEFAULT, &dxpl_cache) < 0)
+    if(H5D__get_dxpl_cache(H5AC_noio_dxpl_id, &dxpl_cache) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
 
     /* Get datatype element size */
diff --git a/src/H5Dselect.c b/src/H5Dselect.c
index ce6073c..312beba 100644
--- a/src/H5Dselect.c
+++ b/src/H5Dselect.c
@@ -111,7 +111,7 @@ H5D__select_io(const H5D_io_info_t *io_info, size_t elmt_size,
     HDassert(io_info);
     HDassert(io_info->dset);
     HDassert(io_info->store);
-    HDassert(TRUE == H5P_isa_class(io_info->dxpl_id, H5P_DATASET_XFER));
+    HDassert(TRUE == H5P_isa_class(io_info->raw_dxpl_id, H5P_DATASET_XFER));
     HDassert(io_info->u.rbuf);
 
     /* Allocate the vector I/O arrays */
diff --git a/src/H5Dvirtual.c b/src/H5Dvirtual.c
index bcafde2..504dd68 100644
--- a/src/H5Dvirtual.c
+++ b/src/H5Dvirtual.c
@@ -2102,7 +2102,7 @@ H5D__virtual_pre_io(H5D_io_info_t *io_info,
 
     /* Initialize layout if necessary */
     if(!storage->init)
-        if(H5D__virtual_init_all(io_info->dset, io_info->dxpl_id) < 0)
+        if(H5D__virtual_init_all(io_info->dset, io_info->md_dxpl_id) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't initialize virtual layout")
 
     /* Initialize tot_nelmts */
@@ -2160,7 +2160,7 @@ H5D__virtual_pre_io(H5D_io_info_t *io_info,
                      * open the source dataset to patch it */
                     if(storage->list[i].source_space_status != H5O_VIRTUAL_STATUS_CORRECT) {
                         HDassert(!storage->list[i].sub_dset[j].dset);
-                        if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].sub_dset[j], io_info->dxpl_id) < 0)
+                        if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].sub_dset[j], io_info->md_dxpl_id) < 0)
                             HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open source dataset")
                     } /* end if */
 
@@ -2232,7 +2232,7 @@ H5D__virtual_pre_io(H5D_io_info_t *io_info,
                         /* Open source dataset */
                         if(!storage->list[i].sub_dset[j].dset)
                             /* Try to open dataset */
-                            if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].sub_dset[j], io_info->dxpl_id) < 0)
+                            if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].sub_dset[j], io_info->md_dxpl_id) < 0)
                                 HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open source dataset")
 
                         /* If the source dataset is not open, mark the selected
@@ -2269,7 +2269,7 @@ H5D__virtual_pre_io(H5D_io_info_t *io_info,
                     /* Open source dataset */
                     if(!storage->list[i].source_dset.dset) 
                         /* Try to open dataset */
-                        if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].source_dset, io_info->dxpl_id) < 0)
+                        if(H5D__virtual_open_source_dset(io_info->dset, &storage->list[i], &storage->list[i].source_dset, io_info->md_dxpl_id) < 0)
                             HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, FAIL, "unable to open source dataset")
 
                     /* If the source dataset is not open, mark the selected elements
@@ -2391,7 +2391,7 @@ H5D__virtual_read_one(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
             HGOTO_ERROR(H5E_DATASET, H5E_CANTCLIP, FAIL, "can't project virtual intersection onto source space")
 
         /* Perform read on source dataset */
-        if(H5D__read(source_dset->dset, type_info->dst_type_id, source_dset->projected_mem_space, projected_src_space, io_info->dxpl_id, io_info->u.rbuf) < 0)
+        if(H5D__read(source_dset->dset, type_info->dst_type_id, source_dset->projected_mem_space, projected_src_space, io_info->raw_dxpl_id, io_info->u.rbuf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read source dataset")
 
         /* Close projected_src_space */
@@ -2508,7 +2508,8 @@ H5D__virtual_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
                             HGOTO_ERROR(H5E_DATASET, H5E_CANTCLIP, FAIL, "unable to clip fill selection")
 
             /* Write fill values to memory buffer */
-            if(H5D__fill(io_info->dset->shared->dcpl_cache.fill.buf, io_info->dset->shared->type, io_info->u.rbuf, type_info->mem_type, fill_space, io_info->dxpl_id) < 0)
+            if(H5D__fill(io_info->dset->shared->dcpl_cache.fill.buf, io_info->dset->shared->type, io_info->u.rbuf, 
+                         type_info->mem_type, fill_space, io_info->md_dxpl_id) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "filling buf failed")
 
 #ifndef NDEBUG
@@ -2582,7 +2583,7 @@ H5D__virtual_write_one(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
             HGOTO_ERROR(H5E_DATASET, H5E_CANTCLIP, FAIL, "can't project virtual intersection onto source space")
 
         /* Perform write on source dataset */
-        if(H5D__write(source_dset->dset, type_info->dst_type_id, source_dset->projected_mem_space, projected_src_space, io_info->dxpl_id, io_info->u.wbuf) < 0)
+        if(H5D__write(source_dset->dset, type_info->dst_type_id, source_dset->projected_mem_space, projected_src_space, io_info->raw_dxpl_id, io_info->u.wbuf) < 0)
             HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write to source dataset")
 
         /* Close projected_src_space */
diff --git a/src/H5F.c b/src/H5F.c
index 0334285..4cdf1e7 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -406,7 +406,7 @@ H5Fis_hdf5(const char *name)
         HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified")
 
     /* call the private is_HDF5 function */
-    if((ret_value = H5F_is_hdf5(name)) < 0)
+    if((ret_value = H5F_is_hdf5(name, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable open file")
 
 done:
@@ -446,7 +446,7 @@ hid_t
 H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
 {
     H5F_t	*new_file = NULL;	/*file struct for new file	*/
-    hid_t        dxpl_id = H5AC_dxpl_id; /*dxpl used by library         */
+    hid_t        dxpl_id = H5AC_ind_read_dxpl_id; /*dxpl used by library        */
     hid_t	 ret_value;	        /*return value			*/
 
     FUNC_ENTER_API(FAIL)
@@ -472,8 +472,8 @@ H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file create property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&fapl_id, H5P_FILE_ACCESS, H5P_FILE_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&fapl_id, H5P_CLS_FACC, &dxpl_id, H5I_INVALID_HID, TRUE) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /*
      * Adjust bit flags by turning on the creation bit and making sure that
@@ -550,7 +550,7 @@ hid_t
 H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)
 {
     H5F_t	*new_file = NULL;	/*file struct for new file	*/
-    hid_t        dxpl_id = H5AC_dxpl_id; /*dxpl used by library         */
+    hid_t        dxpl_id = H5AC_ind_read_dxpl_id; /*dxpl used by library        */
     hid_t	 ret_value;	        /*return value			*/
 
     FUNC_ENTER_API(FAIL)
@@ -571,8 +571,8 @@ H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)
         HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "SWMR read access on a file open for read-write access is not allowed")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&fapl_id, H5P_FILE_ACCESS, H5P_FILE_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&fapl_id, H5P_CLS_FACC, &dxpl_id, H5I_INVALID_HID, TRUE) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the file */
     if(NULL == (new_file = H5F_open(filename, flags, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id)))
@@ -698,12 +698,12 @@ H5Fflush(hid_t object_id, H5F_scope_t scope)
         /* Flush other files, depending on scope */
         if(H5F_SCOPE_GLOBAL == scope) {
             /* Call the flush routine for mounted file hierarchies */
-            if(H5F_flush_mounts(f, H5AC_dxpl_id) < 0)
+            if(H5F_flush_mounts(f, H5AC_ind_read_dxpl_id) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush mounted file hierarchy")
         } /* end if */
         else {
             /* Call the flush routine, for this file */
-            if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
+            if(H5F_flush(f, H5AC_ind_read_dxpl_id, FALSE) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file's cached information")
         } /* end else */
     } /* end if */
@@ -758,7 +758,7 @@ H5Fclose(hid_t file_id)
         if((nref = H5I_get_ref(file_id, FALSE)) < 0)
             HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count")
         if(nref == 1) {
-            if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0)
+            if(H5F_flush(f, H5AC_ind_read_dxpl_id, FALSE) < 0)
                 HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
 	}
     } /* end if */
@@ -791,10 +791,6 @@ done:
  * Programmer:	Robb Matzke
  *              Friday, October 16, 1998
  *
- * Modifications:
- *              Quincey Koziol, May 14, 2002
- *              Keep old file's read/write intent in reopened file.
- *
  *-------------------------------------------------------------------------
  */
 hid_t
@@ -809,26 +805,27 @@ H5Freopen(hid_t file_id)
 
     /* Check arguments */
     if(NULL == (old_file = (H5F_t *)H5I_object_verify(file_id, H5I_FILE)))
-	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
 
     /* Get a new "top level" file struct, sharing the same "low level" file struct */
     if(NULL == (new_file = H5F_new(old_file->shared, 0, H5P_FILE_CREATE_DEFAULT, H5P_FILE_ACCESS_DEFAULT, NULL)))
-	HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
 
     /* Duplicate old file's names */
     new_file->open_name = H5MM_xstrdup(old_file->open_name);
     new_file->actual_name = H5MM_xstrdup(old_file->actual_name);
+    new_file->extpath = H5MM_xstrdup(old_file->extpath);
 
     if((ret_value = H5I_register(H5I_FILE, new_file, TRUE)) < 0)
-	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
 
     /* Keep this ID in file object structure */
     new_file->file_id = ret_value;
 
 done:
     if(ret_value < 0 && new_file)
-	if(H5F_dest(new_file, H5AC_dxpl_id, FALSE) < 0)
-	    HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
+        if(H5F_dest(new_file, H5AC_ind_read_dxpl_id, FALSE) < 0)
+            HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
 
     FUNC_LEAVE_API(ret_value)
 } /* end H5Freopen() */
@@ -917,7 +914,7 @@ H5Fget_freespace(hid_t file_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
 
     /* Go get the actual amount of free space in the file */
-    if(H5MF_get_freespace(file, H5AC_ind_dxpl_id, &tot_space, NULL) < 0)
+    if(H5MF_get_freespace(file, H5AC_ind_read_dxpl_id, &tot_space, NULL) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to check free space for file")
 
     ret_value = (hssize_t)tot_space;
@@ -1031,7 +1028,7 @@ H5Fget_file_image(hid_t file_id, void *buf_ptr, size_t buf_len)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
 
     /* call private get_file_image function */
-    if((ret_value = H5F_get_file_image(file, buf_ptr, buf_len)) < 0)
+    if((ret_value = H5F_get_file_image(file, buf_ptr, buf_len, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file image")
 
 done:
@@ -1364,16 +1361,16 @@ H5Fget_info2(hid_t obj_id, H5F_info2_t *finfo)
     HDmemset(finfo, 0, sizeof(*finfo));
 
     /* Get the size of the superblock and any superblock extensions */
-    if(H5F__super_size(f, H5AC_ind_dxpl_id, &finfo->super.super_size, &finfo->super.super_ext_size) < 0)
+    if(H5F__super_size(f, H5AC_ind_read_dxpl_id, &finfo->super.super_size, &finfo->super.super_ext_size) < 0)
 	HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock sizes")
 
     /* Get the size of any persistent free space */
-    if(H5MF_get_freespace(f, H5AC_ind_dxpl_id, &finfo->free.tot_space, &finfo->free.meta_size) < 0)
+    if(H5MF_get_freespace(f, H5AC_ind_read_dxpl_id, &finfo->free.tot_space, &finfo->free.meta_size) < 0)
 	HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve free space information")
 
     /* Check for SOHM info */
     if(H5F_addr_defined(f->shared->sohm_addr))
-        if(H5SM_ih_size(f, H5AC_ind_dxpl_id, &finfo->sohm.hdr_size, &finfo->sohm.msgs_info) < 0)
+        if(H5SM_ih_size(f, H5AC_ind_read_dxpl_id, &finfo->sohm.hdr_size, &finfo->sohm.msgs_info) < 0)
             HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve SOHM index & heap storage info")
 
     /* Set version # fields */
@@ -1511,7 +1508,7 @@ H5Fget_free_sections(hid_t file_id, H5F_mem_t type, size_t nsects,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "nsects must be > 0")
 
     /* Go get the free-space section information in the file */
-    if((ret_value = H5MF_get_free_sections(file, H5AC_ind_dxpl_id, type, nsects, sect_info)) < 0)
+    if((ret_value = H5MF_get_free_sections(file, H5AC_ind_read_dxpl_id, type, nsects, sect_info)) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to check free space for file")
 
 done:
@@ -1627,7 +1624,7 @@ H5Fstart_swmr_write(hid_t file_id)
     HDassert(file->shared->sblock->status_flags & H5F_SUPER_WRITE_ACCESS);
 
     /* Flush data buffers */
-    if(H5F_flush(file, H5AC_dxpl_id, FALSE) < 0)
+    if(H5F_flush(file, H5AC_ind_read_dxpl_id, FALSE) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file's cached information")
 
     /* Get the # of opened named datatypes and attributes */
@@ -1680,12 +1677,12 @@ H5Fstart_swmr_write(hid_t file_id)
 
     /* Set up I/O info for operation */
     fio_info.f = file;
-    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5AC_dxpl_id)))
-	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5AC_ind_read_dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
 
     /* Flush and reset the accumulator */
     if(H5F__accum_reset(&fio_info, TRUE) < 0)
-	HGOTO_ERROR(H5E_IO, H5E_CANTRESET, FAIL, "can't reset accumulator")
+        HGOTO_ERROR(H5E_IO, H5E_CANTRESET, FAIL, "can't reset accumulator")
 
     /* Turn on SWMR write in shared file open flags */
     file->shared->flags |= H5F_ACC_SWMR_WRITE;
@@ -1709,20 +1706,20 @@ H5Fstart_swmr_write(hid_t file_id)
 
     /* Mark superblock as dirty */
     if(H5F_super_dirty(file) < 0)
-	HGOTO_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
+        HGOTO_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
 
     /* Flush the superblock */
-    if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_dxpl_id) < 0)
-	HDONE_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush superblock")
+    if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_ind_read_dxpl_id) < 0)
+        HDONE_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush superblock")
 
     /* Evict all flushed entries in the cache except the pinned superblock */
-    if(H5F_evict_cache_entries(file, H5AC_dxpl_id) < 0)
-	HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to evict file's cached information")
+    if(H5F_evict_cache_entries(file, H5AC_ind_read_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to evict file's cached information")
 
     /* Refresh (reopen) the objects (groups & datasets) in the file */
     for(u = 0; u < grp_dset_count; u++) {
-	if(H5O_refresh_metadata_reopen(obj_ids[u], &obj_glocs[u], H5AC_dxpl_id, TRUE) < 0)
-	    HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't refresh-close object")
+        if(H5O_refresh_metadata_reopen(obj_ids[u], &obj_glocs[u], H5AC_ind_read_dxpl_id, TRUE) < 0)
+	        HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't refresh-close object")
     }
 
     /* Unlock the file */
@@ -1753,7 +1750,7 @@ done:
 	    HDONE_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
 
 	/* Flush the superblock */
-	if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_dxpl_id) < 0)
+	if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_ind_read_dxpl_id) < 0)
 	    HDONE_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush superblock")
     }
     /* Free memory */
@@ -1875,8 +1872,9 @@ done:
 /*-------------------------------------------------------------------------
  * Function:	H5Fformat_convert_super (Internal)
  *
- * Purpose:	Downgrade the superblock version for the tool h5format_convert.
- *		(NOTE: more needs to be done to this routine)
+ * Purpose:	Downgrade the superblock version to v2 and
+ *		downgrade persistent file space to non-persistent
+ *		for 1.8 library.
  *
  * Return:	Non-negative on success/Negative on failure
  *
@@ -1885,9 +1883,10 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5Fformat_convert_super(hid_t fid)
+H5Fformat_convert(hid_t fid)
 {
     H5F_t	*f = NULL;              /* File to flush */
+    hbool_t	mark_dirty = FALSE;
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1897,13 +1896,37 @@ H5Fformat_convert_super(hid_t fid)
         case H5I_FILE:
             if(NULL == (f = (H5F_t *)H5I_object(fid)))
                 HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
-	    if(f->shared->sblock->super_vers < HDF5_SUPERBLOCK_VERSION_LATEST)
+
+	    if(f->shared->sblock->super_vers > HDF5_SUPERBLOCK_VERSION_V18_LATEST) {
+		f->shared->sblock->super_vers = HDF5_SUPERBLOCK_VERSION_V18_LATEST;
+		mark_dirty = TRUE;
+	    }
+
+            if(f->shared->fs_strategy == H5F_FILE_SPACE_STRATEGY_DEF &&
+	       f->shared->fs_threshold == H5F_FREE_SPACE_THRESHOLD_DEF) {
+		if(mark_dirty) {
+		    /* Mark superblock as dirty */
+		    if(H5F_super_dirty(f) < 0)
+			HGOTO_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
+		}
 		HGOTO_DONE(SUCCEED)
-	    f->shared->sblock->super_vers = HDF5_SUPERBLOCK_VERSION_LATEST - 1;
+	    }
+
+	    /* Check to remove free-space manager info message from superblock extension */
+            if(H5F_addr_defined(f->shared->sblock->ext_addr)) {
+                if(H5F_super_ext_remove_msg(f, H5AC_ind_read_dxpl_id, H5O_FSINFO_ID) < 0)
+                    HGOTO_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "error in removing message from superblock extension")
+	    }
+
+            if(H5MF_try_close(f, H5AC_ind_read_dxpl_id) < 0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "unable to free free-space address")
+
+            f->shared->fs_strategy = H5F_FILE_SPACE_STRATEGY_DEF;
+            f->shared->fs_threshold = H5F_FREE_SPACE_THRESHOLD_DEF;
 
 	    /* Mark superblock as dirty */
 	    if(H5F_super_dirty(f) < 0)
-		HDONE_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
+		HGOTO_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, FAIL, "unable to mark superblock as dirty")
 
             break;
 
@@ -1928,4 +1951,4 @@ H5Fformat_convert_super(hid_t fid)
 
 done:
     FUNC_LEAVE_API(ret_value)
-} /* end H5Fformat_convert_super() */
+} /* end H5Fformat_convert() */
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index f4aa240..778baa0 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -1295,9 +1295,7 @@ H5FD__core_write(H5FD_t *_file, H5FD_mem_t H5_ATTR_UNUSED type, hid_t H5_ATTR_UN
                 HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "unable to allocate memory block of %llu bytes", (unsigned long long)new_eof)
         } /* end else */
 
-#ifdef H5_CLEAR_MEMORY
         HDmemset(x + file->eof, 0, (size_t)(new_eof - file->eof));
-#endif /* H5_CLEAR_MEMORY */
         file->mem = x;
 
         file->eof = new_eof;
@@ -1469,10 +1467,8 @@ H5FD__core_truncate(H5FD_t *_file, hid_t H5_ATTR_UNUSED dxpl_id, hbool_t closing
                     HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "unable to allocate memory block")
             } /* end else */
 
-#ifdef H5_CLEAR_MEMORY
             if(file->eof < new_eof)
                 HDmemset(x + file->eof, 0, (size_t)(new_eof - file->eof));
-#endif /* H5_CLEAR_MEMORY */
             file->mem = x;
 
             /* Update backing store, if using it and if closing */
diff --git a/src/H5FDint.c b/src/H5FDint.c
index 933752c..4ce8ceb 100644
--- a/src/H5FDint.c
+++ b/src/H5FDint.c
@@ -170,6 +170,26 @@ H5FD_read(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type, haddr_t add
     HDassert(TRUE == H5P_class_isa(H5P_CLASS(dxpl), H5P_CLS_DATASET_XFER_g));
     HDassert(buf);
 
+    /* Sanity check the dxpl type against the mem type */
+#ifdef H5_DEBUG_BUILD
+    {
+        H5FD_dxpl_type_t dxpl_type;    /* Property indicating the type of the internal dxpl */
+
+        /* get the dxpl type */
+        if(H5P_get(dxpl, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't retrieve dxpl type")
+
+        /* we shouldn't be here if the dxpl is labeled with NO I/O */
+        HDassert(H5FD_NOIO_DXPL != dxpl_type);
+
+        if(H5FD_MEM_DRAW == type)
+            HDassert(H5FD_RAWDATA_DXPL == dxpl_type);
+        else
+            HDassert(H5FD_METADATA_DXPL == dxpl_type);
+
+    }
+#endif /* H5_DEBUG_BUILD */
+
 #ifndef H5_HAVE_PARALLEL
     /* Do not return early for Parallel mode since the I/O could be a */
     /* collective transfer. */
@@ -227,6 +247,25 @@ H5FD_write(H5FD_t *file, const H5P_genplist_t *dxpl, H5FD_mem_t type, haddr_t ad
     HDassert(TRUE == H5P_class_isa(H5P_CLASS(dxpl), H5P_CLS_DATASET_XFER_g));
     HDassert(buf);
 
+    /* Sanity check the dxpl type against the mem type */
+#ifdef H5_DEBUG_BUILD
+    {
+        H5FD_dxpl_type_t dxpl_type;    /* Property indicating the type of the internal dxpl */
+
+        /* get the dxpl type */
+        if(H5P_get(dxpl, H5FD_DXPL_TYPE_NAME, &dxpl_type) < 0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't retrieve dxpl type")
+
+        /* we shouldn't be here if the dxpl is labeled with NO I/O */
+        HDassert(H5FD_NOIO_DXPL != dxpl_type);
+
+        if(H5FD_MEM_DRAW == type)
+            HDassert(H5FD_RAWDATA_DXPL == dxpl_type);
+        else
+            HDassert(H5FD_METADATA_DXPL == dxpl_type);
+    }
+#endif /* H5_DEBUG_BUILD */
+
 #ifndef H5_HAVE_PARALLEL
     /* Do not return early for Parallel mode since the I/O could be a */
     /* collective transfer. */
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index 7148615..ed70e20 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -96,12 +96,6 @@ static int H5FD_mpio_mpi_rank(const H5FD_t *_file);
 static int H5FD_mpio_mpi_size(const H5FD_t *_file);
 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		*/
-} H5FD_mpio_fapl_t;
-
 /* The MPIO file driver information */
 static const H5FD_class_mpi_t H5FD_mpio_g = {
     {   /* Start of superclass information */
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index 181ad39..b4460b8 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -1592,11 +1592,8 @@ H5FD_multi_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
     size_t size, void *_buf/*out*/)
 {
     H5FD_multi_t	*file = (H5FD_multi_t*)_file;
-    H5FD_multi_dxpl_t	dx;
-    htri_t              prop_exists = FALSE;    /* Whether the multi VFD DXPL property already exists */
     H5FD_mem_t		mt, mmt, hi = H5FD_MEM_DEFAULT;
     haddr_t		start_addr = 0;
-    dxpl_id = dxpl_id; /* Suppress compiler warning */
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
@@ -1618,8 +1615,7 @@ H5FD_multi_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
     assert(hi > 0);
 
     /* Read from that member */
-    return H5FDread(file->memb[hi], type, (prop_exists ? dx.memb_dxpl[hi] : H5P_DEFAULT),
-            addr - start_addr, size, _buf);
+    return H5FDread(file->memb[hi], type, dxpl_id, addr - start_addr, size, _buf);
 } /* end H5FD_multi_read() */
 
 

@@ -1644,11 +1640,8 @@ H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
     size_t size, const void *_buf)
 {
     H5FD_multi_t	*file = (H5FD_multi_t*)_file;
-    H5FD_multi_dxpl_t	dx;
-    htri_t              prop_exists = FALSE;    /* Whether the multi VFD DXPL property already exists */
     H5FD_mem_t		mt, mmt, hi = H5FD_MEM_DEFAULT;
     haddr_t		start_addr = 0;
-    dxpl_id = dxpl_id; /* Suppress compiler warning */
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
@@ -1670,8 +1663,7 @@ H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
     assert(hi > 0);
 
     /* Write to that member */
-    return H5FDwrite(file->memb[hi], type, (prop_exists ? dx.memb_dxpl[hi] : H5P_DEFAULT),
-            addr - start_addr, size, _buf);
+    return H5FDwrite(file->memb[hi], type, dxpl_id, addr - start_addr, size, _buf);
 } /* end H5FD_multi_write() */
 
 

diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index 2c18659..36e57a1 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -96,6 +96,25 @@ typedef struct {
     const void *driver_info;    /* Driver info, for open callbacks */
 } H5FD_driver_prop_t;
 
+#ifdef H5_HAVE_PARALLEL
+/* MPIO-specific file access properties */
+typedef struct H5FD_mpio_fapl_t {
+    MPI_Comm		comm;		/*communicator			*/
+    MPI_Info		info;		/*file information		*/
+} H5FD_mpio_fapl_t;
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef H5_DEBUG_BUILD
+/* Definitions for the internal DXPL types created in H5AC__init_package() */
+typedef enum {
+    H5FD_METADATA_DXPL = 0,
+    H5FD_NOIO_DXPL,
+    H5FD_RAWDATA_DXPL
+} H5FD_dxpl_type_t;
+
+#define H5FD_DXPL_TYPE_NAME              "H5P_dxpl_type"
+#endif /* H5_DEBUG_BUILD */
+
 
 /*****************************/
 /* Library Private Variables */
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index bc0b342..13ccd5c 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -127,23 +127,14 @@ typedef struct H5FD_stdio_t {
 #endif /* H5_HAVE_MINGW */
 #endif /* H5_HAVE_WIN32_API */
 
-/* Use file_xxx to indicate these are local macros, avoiding confusing 
- * with the global HD_xxx macros. 
- * Assume fseeko, which is POSIX standard, is always supported; 
- * but prefer to use fseeko64 if supported. 
+/* If these functions weren't re-defined for Windows, give them
+ * more platform-independent names.
  */
 #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
-    #else
-        #define file_fseek      fseeko
-        #define file_offset_t   off_t
-        #define file_ftruncate  ftruncate
-        #define file_ftell      ftello
-    #endif /* H5_HAVE_FSEEKO64 */
+    #define file_fseek      fseeko
+    #define file_offset_t   off_t
+    #define file_ftruncate  ftruncate
+    #define file_ftell      ftello
 #endif /* file_fseek */
 
 /* These macros check for overflow of various quantities.  These macros
diff --git a/src/H5FS.c b/src/H5FS.c
index bb45c75..00189a3 100644
--- a/src/H5FS.c
+++ b/src/H5FS.c
@@ -1263,7 +1263,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5FS_assert(const H5FS_t *fspace)
+H5FS_assert(const H5FS_t *fspace, hid_t dxpl_id)
 {
     FUNC_ENTER_NOAPI_NOINIT_NOERR
 #ifdef QAK
@@ -1273,7 +1273,7 @@ HDfprintf(stderr, "%s: fspace->tot_sect_count = %Hu\n", "H5FS_assert", fspace->t
     /* Checks for section info, if it's available */
     if(fspace->sinfo) {
         /* Sanity check sections */
-        H5FS_sect_assert(fspace);
+        H5FS_sect_assert(fspace, dxpl_id);
 
         /* General assumptions about the section size counts */
         HDassert(fspace->sinfo->tot_size_count >= fspace->sinfo->serial_size_count);
diff --git a/src/H5FScache.c b/src/H5FScache.c
index 657c5c4..9dab742 100644
--- a/src/H5FScache.c
+++ b/src/H5FScache.c
@@ -575,7 +575,7 @@ H5FS__cache_hdr_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
                 HDassert(fspace->sinfo->cache_info.size == fspace->alloc_sect_size);
 
                 /* Let the metadata cache know the section info moved */
-                if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, fspace->sect_addr, new_sect_addr) < 0)
+                if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, fspace->sect_addr, new_sect_addr, dxpl_id) < 0)
                     HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move section info")
 
                 fspace->sect_addr = new_sect_addr;
@@ -637,7 +637,7 @@ H5FS__cache_hdr_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
             HDassert(!H5F_addr_eq(fspace->sect_addr, new_sect_addr));
 
             /* Let the metadata cache know the section info moved */
-            if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, fspace->sect_addr, new_sect_addr) < 0)
+            if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, fspace->sect_addr, new_sect_addr, dxpl_id) < 0)
                 HGOTO_ERROR(H5E_FSPACE, H5E_CANTMOVE, FAIL, "unable to move section info")
 
             /* Update the internal address for the section info */
@@ -1163,7 +1163,7 @@ H5FS__cache_sinfo_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
         HDassert(!H5F_addr_eq(sinfo->fspace->sect_addr, sinfo_addr));
 
         /* Let the metadata cache know the section info moved */
-        if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, sinfo->fspace->sect_addr, sinfo_addr) < 0)
+        if(H5AC_move_entry((H5F_t *)f, H5AC_FSPACE_SINFO, sinfo->fspace->sect_addr, sinfo_addr, dxpl_id) < 0)
             HGOTO_ERROR(H5E_FSPACE, H5E_CANTMOVE, FAIL, "unable to move section info")
 
         /* Update the internal address for the section info */
diff --git a/src/H5FSpkg.h b/src/H5FSpkg.h
index bb5ba7b..616499f 100644
--- a/src/H5FSpkg.h
+++ b/src/H5FSpkg.h
@@ -245,8 +245,8 @@ H5_DLL herr_t H5FS_sinfo_dest(H5FS_sinfo_t *sinfo);
 
 /* Sanity check routines */
 #ifdef H5FS_DEBUG
-H5_DLL herr_t H5FS_assert(const H5FS_t *fspace);
-H5_DLL herr_t H5FS_sect_assert(const H5FS_t *fspace);
+H5_DLL herr_t H5FS_assert(const H5FS_t *fspace, hid_t dxpl_id);
+H5_DLL herr_t H5FS_sect_assert(const H5FS_t *fspace, hid_t dxpl_id);
 #endif /* H5FS_DEBUG */
 
 /* Testing routines */
diff --git a/src/H5FSprivate.h b/src/H5FSprivate.h
index 2dacce6..2dde410 100644
--- a/src/H5FSprivate.h
+++ b/src/H5FSprivate.h
@@ -107,7 +107,7 @@ typedef struct H5FS_section_class_t {
     htri_t (*can_shrink)(const H5FS_section_info_t *, void *);        /* Routine to determine if node can shrink container */
     herr_t (*shrink)(H5FS_section_info_t **, void *);   /* Routine to shrink container */
     herr_t (*free)(H5FS_section_info_t *);              /* Routine to free node */
-    herr_t (*valid)(const struct H5FS_section_class_t *, const H5FS_section_info_t *);   /* Routine to check if a section is valid */
+    herr_t (*valid)(const struct H5FS_section_class_t *, const H5FS_section_info_t *, hid_t dxpl_id);   /* Routine to check if a section is valid */
     H5FS_section_info_t *(*split)(H5FS_section_info_t *, hsize_t);     /* Routine to create the split section */
     herr_t (*debug)(const H5FS_section_info_t *, FILE *, int , int );   /* Routine to dump debugging information about a section */
 } H5FS_section_class_t;
diff --git a/src/H5FSsection.c b/src/H5FSsection.c
index 62500e7..5638f4f 100644
--- a/src/H5FSsection.c
+++ b/src/H5FSsection.c
@@ -1421,7 +1421,7 @@ done:
 
 #ifdef H5FS_DEBUG_ASSERT
 if(!(flags & (H5FS_ADD_DESERIALIZING | H5FS_ADD_SKIP_VALID)))
-    H5FS_assert(fspace);
+    H5FS_assert(fspace, dxpl_id);
 #endif /* H5FS_DEBUG_ASSERT */
 #ifdef H5FS_SINFO_DEBUG
 HDfprintf(stderr, "%s: Leaving, ret_value = %d\n", FUNC, ret_value);
@@ -1840,7 +1840,7 @@ done:
         HDONE_ERROR(H5E_FSPACE, H5E_CANTRELEASE, FAIL, "can't release section info")
 
 #ifdef H5FS_DEBUG_ASSERT
-    H5FS_assert(fspace);
+    H5FS_assert(fspace, dxpl_id);
 #endif /* H5FS_DEBUG_ASSERT */
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5FS_sect_find() */
@@ -2198,7 +2198,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5FS_sect_assert(const H5FS_t *fspace)
+H5FS_sect_assert(const H5FS_t *fspace, hid_t dxpl_id)
 {
     hsize_t separate_obj;       /* The number of separate objects managed */
 
@@ -2270,7 +2270,7 @@ HDfprintf(stderr, "%s: sect->size = %Hu, sect->addr = %a, sect->type = %u\n", "H
                         HDassert(H5F_addr_defined(sect->addr));
                         HDassert(fspace_node->sect_size == sect->size);
                         if(cls->valid)
-                            (*cls->valid)(cls, sect);
+                            (*cls->valid)(cls, sect, dxpl_id);
 
                         /* Add to correct count */
                         if(cls->flags & H5FS_CLS_GHOST_OBJ)
diff --git a/src/H5Faccum.c b/src/H5Faccum.c
index d8cd614..9515abd 100644
--- a/src/H5Faccum.c
+++ b/src/H5Faccum.c
@@ -112,10 +112,9 @@ H5FL_BLK_DEFINE_STATIC(meta_accum);
  *-------------------------------------------------------------------------
  */
 herr_t
-H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
+H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t map_type, haddr_t addr,
     size_t size, void *buf/*out*/)
 {
-    H5FD_mem_t  map_type;               /* Mapped memory type */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -125,9 +124,6 @@ H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
     HDassert(fio_info->dxpl);
     HDassert(buf);
 
-    /* Treat global heap as raw data */
-    map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
-
     /* Check if this information is in the metadata accumulator */
     if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
         H5F_meta_accum_t *accum;     /* Alias for file's metadata accumulator */
@@ -164,9 +160,9 @@ H5F__accum_read(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
 
                     /* Note the new buffer size */
                     accum->alloc_size = new_alloc_size;
-#ifdef H5_CLEAR_MEMORY
-    HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - accum->size));
-#endif /* H5_CLEAR_MEMORY */
+
+                    /* Clear the memory */
+                    HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - accum->size));
                 } /* end if */
 
                 /* Read the part before the metadata accumulator */
@@ -395,9 +391,9 @@ H5F__accum_adjust(H5F_meta_accum_t *accum, const H5F_io_info_t *fio_info,
             /* Update accumulator info */
             accum->buf = new_buf;
             accum->alloc_size = new_size;
-#ifdef H5_CLEAR_MEMORY
-HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - (accum->size + size)));
-#endif /* H5_CLEAR_MEMORY */
+
+            /* Clear the memory */
+            HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - (accum->size + size)));
         } /* end if */
     } /* end if */
 
@@ -426,10 +422,9 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
+H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t map_type, haddr_t addr,
     size_t size, const void *buf)
 {
-    H5FD_mem_t  map_type;               /* Mapped memory type */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -440,9 +435,6 @@ H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
     HDassert(fio_info->dxpl);
     HDassert(buf);
 
-    /* Treat global heap as raw data */
-    map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
-
     /* Check for accumulating metadata */
     if((fio_info->f->shared->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) {
         H5F_meta_accum_t *accum;     /* Alias for file's metadata accumulator */
@@ -628,9 +620,9 @@ H5F__accum_write(const H5F_io_info_t *fio_info, H5FD_mem_t type, haddr_t addr,
 
                             /* Note the new buffer size */
                             accum->alloc_size = new_alloc_size;
-#ifdef H5_CLEAR_MEMORY
-HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
-#endif /* H5_CLEAR_MEMORY */
+
+                            /* Clear the memory */
+                            HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
                         } /* end if */
 
                         /* Copy the new metadata to the buffer */
@@ -661,6 +653,7 @@ HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
                     /* Check if we need to resize the buffer */
                     if(size > accum->alloc_size) {
                         size_t new_size;        /* New size of accumulator */
+                        size_t clear_size;      /* Size of memory that needs clearing */
 
                         /* Adjust the buffer size to be a power of 2 that is large enough to hold data */
                         new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1)));
@@ -671,12 +664,10 @@ HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
 
                         /* Note the new buffer size */
                         accum->alloc_size = new_size;
-#ifdef H5_CLEAR_MEMORY
-{
-size_t clear_size = MAX(accum->size, size);
-HDmemset(accum->buf + clear_size, 0, (accum->alloc_size - clear_size));
-}
-#endif /* H5_CLEAR_MEMORY */
+
+                        /* Clear the memory */
+                        clear_size = MAX(accum->size, size);
+                        HDmemset(accum->buf + clear_size, 0, (accum->alloc_size - clear_size));
                     } /* end if */
                     else {
                         /* Check if we should shrink the accumulator buffer */
@@ -721,9 +712,9 @@ HDmemset(accum->buf + clear_size, 0, (accum->alloc_size - clear_size));
 
                     /* Note the new buffer size */
                     accum->alloc_size = new_size;
-#ifdef H5_CLEAR_MEMORY
-HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
-#endif /* H5_CLEAR_MEMORY */
+
+                    /* Clear the memory */
+                    HDmemset(accum->buf + size, 0, (accum->alloc_size - size));
                 } /* end if */
 
                 /* Update the metadata accumulator information */
diff --git a/src/H5Fdeprec.c b/src/H5Fdeprec.c
index d16e2d4..4a3bce0 100644
--- a/src/H5Fdeprec.c
+++ b/src/H5Fdeprec.c
@@ -133,12 +133,12 @@ H5Fget_info1(hid_t obj_id, H5F_info1_t *finfo)
     HDmemset(finfo, 0, sizeof(*finfo));
 
     /* Get the size of the superblock extension */
-    if(H5F__super_size(f, H5AC_ind_dxpl_id, NULL, &finfo->super_ext_size) < 0)
+    if(H5F__super_size(f, H5AC_ind_read_dxpl_id, NULL, &finfo->super_ext_size) < 0)
 	HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve superblock extension size")
 
     /* Check for SOHM info */
     if(H5F_addr_defined(f->shared->sohm_addr))
-        if(H5SM_ih_size(f, H5AC_ind_dxpl_id, &finfo->sohm.hdr_size, &finfo->sohm.msgs_info) < 0)
+        if(H5SM_ih_size(f, H5AC_ind_read_dxpl_id, &finfo->sohm.hdr_size, &finfo->sohm.msgs_info) < 0)
             HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "Unable to retrieve SOHM index & heap storage info")
 
 done:
diff --git a/src/H5Fint.c b/src/H5Fint.c
index 2b16c6c..54f4be6 100644
--- a/src/H5Fint.c
+++ b/src/H5Fint.c
@@ -187,6 +187,8 @@ H5F_get_access_plist(H5F_t *f, hbool_t app_ref)
 #ifdef H5_HAVE_PARALLEL
     if(H5P_set(new_plist, H5_COLL_MD_READ_FLAG_NAME, &(f->coll_md_read)) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set collective metadata read flag")
+    if(H5P_set(new_plist, H5F_ACS_COLL_MD_WRITE_FLAG_NAME, &(f->coll_md_write)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set collective metadata read flag")
 #endif /* H5_HAVE_PARALLEL */
 
     /* Prepare the driver property */
@@ -513,10 +515,11 @@ done:
  *-------------------------------------------------------------------------
  */
 htri_t
-H5F_is_hdf5(const char *name)
+H5F_is_hdf5(const char *name, hid_t dxpl_id)
 {
     H5FD_t	*file = NULL;           /* Low-level file struct */
     haddr_t     sig_addr;               /* Addess of hdf5 file signature */
+    H5P_genplist_t  *xfer_plist= NULL;  /* Dataset transfer property list object */
     htri_t	ret_value = FAIL;       /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT
@@ -525,8 +528,12 @@ H5F_is_hdf5(const char *name)
     if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, H5P_FILE_ACCESS_DEFAULT, HADDR_UNDEF)))
 	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file")
 
+    /* Get the property list object */
+    if(NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+
     /* The file is an hdf5 file if the hdf5 file signature can be found */
-    if(H5FD_locate_signature(file, H5AC_ind_dxpl_g, &sig_addr) < 0)
+    if(H5FD_locate_signature(file, xfer_plist, &sig_addr) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature")
     ret_value = (HADDR_UNDEF != sig_addr);
 
@@ -1265,7 +1272,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
             /* Flush the superblock */
             if(H5F_super_dirty(file) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTMARKDIRTY, NULL, "unable to mark superblock as dirty")
-            if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_dxpl_id) < 0)
+            if(H5F_flush_tagged_metadata(file, (haddr_t)0, H5AC_ind_read_dxpl_id) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, NULL, "unable to flush superblock")
 
 	    /* Remove the file lock for SWMR_WRITE */
@@ -1597,7 +1604,7 @@ H5F_try_close(H5F_t *f)
      * shared H5F_file_t struct. If the reference count for the H5F_file_t
      * struct reaches zero then destroy it also.
      */
-    if(H5F_dest(f, H5AC_dxpl_id, TRUE) < 0)
+    if(H5F_dest(f, H5AC_ind_read_dxpl_id, TRUE) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
 
 done:
@@ -2141,7 +2148,7 @@ H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
  *-------------------------------------------------------------------------
  */
 ssize_t
-H5F_get_file_image(H5F_t *file, void *buf_ptr, size_t buf_len)
+H5F_get_file_image(H5F_t *file, void *buf_ptr, size_t buf_len, hid_t dxpl_id)
 {
     H5FD_t     *fd_ptr;                 /* file driver */
     haddr_t     eoa;                    /* End of file address */
@@ -2209,8 +2216,9 @@ H5F_get_file_image(H5F_t *file, void *buf_ptr, size_t buf_len)
     /* test to see if a buffer was provided -- if not, we are done */
     if(buf_ptr != NULL) {
         size_t	space_needed;		/* size of file image */
-	hsize_t tmp;
+        hsize_t tmp;
         size_t tmp_size;
+        H5P_genplist_t *xfer_plist= NULL;  /* Dataset transfer property list object */
 
         /* Check for buffer too small */
         if((haddr_t)buf_len < eoa)
@@ -2218,12 +2226,16 @@ H5F_get_file_image(H5F_t *file, void *buf_ptr, size_t buf_len)
 
         space_needed = (size_t)eoa;
 
+        /* Get the property list object */
+        if(NULL == (xfer_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+            HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+
         /* read in the file image */
         /* (Note compensation for base address addition in internal routine) */
-        if(H5FD_read(fd_ptr, H5AC_ind_dxpl_g, H5FD_MEM_DEFAULT, 0, space_needed, buf_ptr) < 0)
+        if(H5FD_read(fd_ptr, xfer_plist, H5FD_MEM_DEFAULT, 0, space_needed, buf_ptr) < 0)
             HGOTO_ERROR(H5E_FILE, H5E_READERROR, FAIL, "file image read request failed")
 
-	/* Offset to "status_flags" in the superblock */
+        /* Offset to "status_flags" in the superblock */
         tmp = H5F_SUPER_STATUS_FLAGS_OFF(file->shared->sblock->super_vers);
         /* Size of "status_flags" depends on the superblock version */
         tmp_size = H5F_SUPER_STATUS_FLAGS_SIZE(file->shared->sblock->super_vers);
@@ -2422,3 +2434,33 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5F__set_eoa() */
 
+#ifdef H5_HAVE_PARALLEL
+

+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_coll_md_read
+ *
+ * Purpose:     Set the coll_md_read field with a new value.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              2/10/16
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5F_set_coll_md_read(H5F_t *f, H5P_coll_md_read_flag_t cmr)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    /* Sanity check */
+    HDassert(f);
+
+    f->coll_md_read = cmr;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* H5F_set_coll_md_read() */
+#endif /* H5_HAVE_PARALLEL */
+
diff --git a/src/H5Fio.c b/src/H5Fio.c
index d312b47..f0e3bc7 100644
--- a/src/H5Fio.c
+++ b/src/H5Fio.c
@@ -97,6 +97,8 @@ H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
     hid_t dxpl_id, void *buf/*out*/)
 {
     H5F_io_info_t fio_info;             /* I/O info for operation */
+    H5FD_mem_t  map_type;               /* Mapped memory type */
+    hid_t       my_dxpl_id = dxpl_id;   /* transfer property to use for I/O */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -113,13 +115,22 @@ HDfprintf(stderr, "%s: read from addr = %a, size = %Zu\n", FUNC, addr, size);
     if(H5F_addr_le(f->shared->tmp_addr, (addr + size)))
         HGOTO_ERROR(H5E_IO, H5E_BADRANGE, FAIL, "attempting I/O in temporary file space")
 
+    /* Treat global heap as raw data */
+    map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
+
+#ifdef H5_DEBUG_BUILD
+    /* GHEAP type is treated as RAW, so update the dxpl type property too */
+    if(H5FD_MEM_GHEAP == type)
+        my_dxpl_id = H5AC_rawdata_dxpl_id;
+#endif /* H5_DEBUG_BUILD */
+
     /* Set up I/O info for operation */
     fio_info.f = f;
-    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(my_dxpl_id)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
 
     /* Pass through metadata accumulator layer */
-    if(H5F__accum_read(&fio_info, type, addr, size, buf) < 0)
+    if(H5F__accum_read(&fio_info, map_type, addr, size, buf) < 0)
         HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "read through metadata accumulator failed")
 
 done:
@@ -147,6 +158,8 @@ H5F_block_write(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
     hid_t dxpl_id, const void *buf)
 {
     H5F_io_info_t fio_info;             /* I/O info for operation */
+    H5FD_mem_t  map_type;               /* Mapped memory type */
+    hid_t       my_dxpl_id = dxpl_id;   /* transfer property to use for I/O */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -164,13 +177,22 @@ HDfprintf(stderr, "%s: write to addr = %a, size = %Zu\n", FUNC, addr, size);
     if(H5F_addr_le(f->shared->tmp_addr, (addr + size)))
         HGOTO_ERROR(H5E_IO, H5E_BADRANGE, FAIL, "attempting I/O in temporary file space")
 
+    /* Treat global heap as raw data */
+    map_type = (type == H5FD_MEM_GHEAP) ? H5FD_MEM_DRAW : type;
+
+#ifdef H5_DEBUG_BUILD
+    /* GHEAP type is treated as RAW, so update the dxpl type property too */
+    if(H5FD_MEM_GHEAP == type)
+        my_dxpl_id = H5AC_rawdata_dxpl_id;
+#endif /* H5_DEBUG_BUILD */
+
     /* Set up I/O info for operation */
     fio_info.f = f;
-    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(dxpl_id)))
+    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(my_dxpl_id)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
 
     /* Pass through metadata accumulator layer */
-    if(H5F__accum_write(&fio_info, type, addr, size, buf) < 0)
+    if(H5F__accum_write(&fio_info, map_type, addr, size, buf) < 0)
         HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "write through metadata accumulator failed")
 
 done:
diff --git a/src/H5Fmount.c b/src/H5Fmount.c
index 99fa4f2..adde071 100644
--- a/src/H5Fmount.c
+++ b/src/H5Fmount.c
@@ -466,7 +466,7 @@ H5Fmount(hid_t loc_id, const char *name, hid_t child_id, hid_t plist_id)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property list")
 
     /* Do the mount */
-    if(H5F_mount(&loc, name, child, plist_id, H5AC_dxpl_id) < 0)
+    if(H5F_mount(&loc, name, child, plist_id, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to mount file")
 
 done:
@@ -509,7 +509,7 @@ H5Funmount(hid_t loc_id, const char *name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Unmount */
-    if (H5F_unmount(&loc, name, H5AC_dxpl_id) < 0)
+    if (H5F_unmount(&loc, name, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to unmount file")
 
 done:
diff --git a/src/H5Fmpi.c b/src/H5Fmpi.c
index ae15142..5434aa5 100644
--- a/src/H5Fmpi.c
+++ b/src/H5Fmpi.c
@@ -287,5 +287,74 @@ H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag)
 done:
     FUNC_LEAVE_API(ret_value)
 }
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5F_mpi_retrieve_comm
+ *
+ * Purpose:	Retrieves an MPI communicator from the file the location ID 
+ *              is in. If the loc_id is invalid, the fapl_id is used to 
+ *              retrieve the communicator.
+ *
+ * Return:	Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Mohamad Chaarawi
+ *		Feb 14, 2012
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_mpi_retrieve_comm(hid_t loc_id, hid_t acspl_id, MPI_Comm *mpi_comm)
+{
+    herr_t    ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+    HDassert(mpi_comm);
+    *mpi_comm = MPI_COMM_NULL;
+
+    /* if the loc_id is valid, then get the comm from the file
+       attached to the loc_id */
+    if(H5I_INVALID_HID != loc_id) {
+        H5G_loc_t loc;
+        H5F_t *f = NULL;
+
+        /* retrieve the file structure */
+        if(H5G_loc(loc_id, &loc) < 0)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+        f = loc.oloc->file;
+        HDassert(f);
+
+        /* check if MPIO driver is used */
+        if(H5F_HAS_FEATURE(f, H5FD_FEAT_HAS_MPI)) {
+            /* retrieve the file communicator */
+            if(MPI_COMM_NULL == (*mpi_comm = H5F_mpi_get_comm(f)))
+                HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't get MPI communicator")
+        }
+    }
+    /* otherwise, this if from H5Fopen or H5Fcreate and has to be collective */
+    else {
+        H5P_genplist_t *plist;      /* Property list pointer */
+
+        HDassert(H5P_isa_class(acspl_id, H5P_FILE_ACCESS));
+
+        if(NULL == (plist = H5P_object_verify(acspl_id, H5P_FILE_ACCESS)))
+            HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+
+        if(H5FD_MPIO == H5P_peek_driver(plist)) {
+            const H5FD_mpio_fapl_t *fa; /* MPIO fapl info */
+
+            if(NULL == (fa = (const H5FD_mpio_fapl_t *)H5P_peek_driver_info(plist)))
+                HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+            *mpi_comm = fa->comm;
+        }
+    }
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_mpi_retrieve_comm */
+
 #endif /* H5_HAVE_PARALLEL */
 
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 046ecfc..a297b6d 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -382,8 +382,9 @@ H5F_t *H5F_new(H5F_file_t *shared, unsigned flags, hid_t fcpl_id,
     hid_t fapl_id, H5FD_t *lf);
 herr_t H5F_dest(H5F_t *f, hid_t dxpl_id, hbool_t flush);
 H5_DLL herr_t H5F_flush(H5F_t *f, hid_t dxpl_id, hbool_t closing);
-H5_DLL htri_t H5F_is_hdf5(const char *name);
+H5_DLL htri_t H5F_is_hdf5(const char *name, hid_t dxpl_id);
 H5_DLL herr_t H5F_get_objects(const H5F_t *f, unsigned types, size_t max_index, hid_t *obj_id_list, hbool_t app_ref, size_t *obj_id_count_ptr);
+H5_DLL ssize_t H5F_get_file_image(H5F_t *f, void *buf_ptr, size_t buf_len, hid_t dxpl_id);
 H5_DLL herr_t H5F_close(H5F_t *f);
 
 /* File mount related routines */
@@ -399,7 +400,7 @@ H5_DLL herr_t H5F__super_free(H5F_super_t *sblock);
 
 /* Superblock extension related routines */
 H5_DLL herr_t H5F_super_ext_open(H5F_t *f, haddr_t ext_addr, H5O_loc_t *ext_ptr);
-H5_DLL herr_t H5F_super_ext_write_msg(H5F_t *f, hid_t dxpl_id, void *mesg, unsigned id, hbool_t may_create);
+H5_DLL herr_t H5F_super_ext_write_msg(H5F_t *f, hid_t dxpl_id, unsigned id, void *mesg, hbool_t may_create);
 H5_DLL herr_t H5F_super_ext_remove_msg(H5F_t *f, hid_t dxpl_id, unsigned id);
 H5_DLL herr_t H5F_super_ext_close(H5F_t *f, H5O_loc_t *ext_ptr, hid_t dxpl_id,
     hbool_t was_created);
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 195fc19..aabff99 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -27,6 +27,9 @@
 #include "H5FDpublic.h"		/* File drivers				*/
 
 /* Private headers needed by this file */
+#ifdef H5_HAVE_PARALLEL
+#include "H5Pprivate.h"		/* Property lists			*/
+#endif /* H5_HAVE_PARALLEL */
 #include "H5VMprivate.h"		/* Vectors and arrays */
 
 
@@ -314,6 +317,9 @@
 #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)))
+#ifdef H5_HAVE_PARALLEL
+#define H5F_COLL_MD_READ(F)     ((F)->coll_md_read)
+#endif /* H5_HAVE_PARALLEL */
 #else /* H5F_MODULE */
 #define H5F_INTENT(F)           (H5F_get_intent(F))
 #define H5F_OPEN_NAME(F)        (H5F_get_open_name(F))
@@ -358,6 +364,9 @@
 #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)))
+#ifdef H5_HAVE_PARALLEL
+#define H5F_COLL_MD_READ(F)     (H5F_coll_md_read(F))
+#endif /* H5_HAVE_PARALLEL */
 #endif /* H5F_MODULE */
 
 
@@ -486,6 +495,7 @@
 #define HDF5_SUPERBLOCK_VERSION_2	2	/* Revised version with superblock extension and checksum */
 #define HDF5_SUPERBLOCK_VERSION_3	3	/* With file locking and consistency flags (at least this version for SWMR support) */
 #define HDF5_SUPERBLOCK_VERSION_LATEST	HDF5_SUPERBLOCK_VERSION_3	/* The maximum super block format    */
+#define HDF5_SUPERBLOCK_VERSION_V18_LATEST HDF5_SUPERBLOCK_VERSION_2    /* The latest superblock version for v18 */
 #define HDF5_FREESPACE_VERSION	        0	/* of the Free-Space Info	  */
 #define HDF5_OBJECTDIR_VERSION	        0	/* of the Object Directory format */
 #define HDF5_SHAREDHEADER_VERSION       0	/* of the Shared-Header Info	  */
@@ -648,7 +658,6 @@ 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 ssize_t H5F_get_file_image(H5F_t *f, void *buf_ptr, size_t buf_len);
 H5_DLL H5F_t *H5F_get_parent(const H5F_t *f);
 H5_DLL unsigned H5F_get_nmounts(const H5F_t *f);
 H5_DLL unsigned H5F_get_read_attempts(const H5F_t *f);
@@ -686,6 +695,10 @@ H5_DLL struct H5UC_t *H5F_grp_btree_shared(const H5F_t *f);
 H5_DLL herr_t H5F_set_grp_btree_shared(H5F_t *f, struct H5UC_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);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL H5P_coll_md_read_flag_t H5F_coll_md_read(const H5F_t *f);
+H5_DLL void H5F_set_coll_md_read(H5F_t *f, H5P_coll_md_read_flag_t flag);
+#endif /* H5_HAVE_PARALLEL */
 
 /* Functions that retrieve values from VFD layer */
 H5_DLL hid_t H5F_get_driver_id(const H5F_t *f);
@@ -748,6 +761,7 @@ H5_DLL herr_t H5F_get_mpi_handle(const H5F_t *f, MPI_File **f_handle);
 H5_DLL int H5F_mpi_get_rank(const H5F_t *f);
 H5_DLL MPI_Comm H5F_mpi_get_comm(const H5F_t *f);
 H5_DLL int H5F_mpi_get_size(const H5F_t *f);
+H5_DLL herr_t H5F_mpi_retrieve_comm(hid_t loc_id, hid_t acspl_id, MPI_Comm *mpi_comm);
 #endif /* H5_HAVE_PARALLEL */
 
 /* External file cache routines */
diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h
index ad4620f..318f374 100644
--- a/src/H5Fpublic.h
+++ b/src/H5Fpublic.h
@@ -58,24 +58,24 @@
 #define H5F_ACC_EXCL	(H5CHECK H5OPEN 0x0004u)	/*fail if file already exists*/
 /* NOTE: 0x0008u was H5F_ACC_DEBUG, now deprecated */
 #define H5F_ACC_CREAT	(H5CHECK H5OPEN 0x0010u)	/*create non-existing files  */
+#define H5F_ACC_SWMR_WRITE	(H5CHECK 0x0020u) /*indicate that this file is
+                                                 * open for writing in a
+                                                 * single-writer/multi-reader (SWMR)
+                                                 * scenario.  Note that the
+                                                 * process(es) opening the file
+                                                 * for reading must open the file
+                                                 * with RDONLY access, and use
+                                                 * the special "SWMR_READ" access
+                                                 * flag. */
+#define H5F_ACC_SWMR_READ	(H5CHECK 0x0040u) /*indicate that this file is
+                                                 * open for reading in a
+                                                 * single-writer/multi-reader (SWMR)
+                                                 * scenario.  Note that the
+                                                 * process(es) opening the file
+                                                 * for SWMR reading must also
+                                                 * open the file with the RDONLY
+                                                 * flag.  */
 
-#define H5F_ACC_SWMR_WRITE (H5CHECK H5OPEN 0x0020u)     /*indicate that this file is
-                                                         * open for writing in a
-                                                         * single-writer/multi-reader (SWMR)
-                                                         * scenario.  Note that the
-                                                         * process(es) opening the file
-                                                         * for reading must open the file
-                                                         * with RDONLY access, and use
-                                                         * the special "SWMR_READ" access
-                                                         * flag. */
-#define H5F_ACC_SWMR_READ (H5CHECK H5OPEN 0x0040u)      /*indicate that this file is
-                                                         * open for reading in a
-                                                         * single-writer/multi-reader (SWMR)
-                                                         * scenario.  Note that the
-                                                         * process(es) opening the file
-                                                         * for SWMR reading must also
-                                                         * open the file with the RDONLY
-                                                         * flag.  */
 /* Value passed to H5Pset_elink_acc_flags to cause flags to be taken from the
  * parent file. */
 #define H5F_ACC_DEFAULT (H5CHECK H5OPEN 0xffffu)	/*ignore setting on lapl     */
@@ -254,7 +254,7 @@ H5_DLL herr_t H5Fstop_mdc_logging(hid_t file_id);
 H5_DLL herr_t H5Fget_mdc_logging_status(hid_t file_id,
                                         /*OUT*/ hbool_t *is_enabled,
                                         /*OUT*/ hbool_t *is_currently_logging);
-H5_DLL herr_t H5Fformat_convert_super(hid_t fid);
+H5_DLL herr_t H5Fformat_convert(hid_t fid);
 #ifdef H5_HAVE_PARALLEL
 H5_DLL herr_t H5Fset_mpi_atomicity(hid_t file_id, hbool_t flag);
 H5_DLL herr_t H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag);
diff --git a/src/H5Fquery.c b/src/H5Fquery.c
index 0baec78..34f8dd7 100644
--- a/src/H5Fquery.c
+++ b/src/H5Fquery.c
@@ -158,7 +158,7 @@ H5F_get_actual_name(const H5F_t *f)
  * Function:	H5F_get_extpath
  *
  * Purpose:	Retrieve the file's 'extpath' flags
- *		This is used by H5L_extern_traverse() to retrieve the main file's location
+ *		This is used by H5L_extern_traverse() and H5D_build_extfile_prefix() to retrieve the main file's location
  *		when searching the target file.
  *
  * Return:	'extpath' on success/abort on failure (shouldn't fail)
@@ -1124,3 +1124,31 @@ H5F_use_tmp_space(const H5F_t *f)
     FUNC_LEAVE_NOAPI(f->shared->use_tmp_space)
 } /* end H5F_use_tmp_space() */
 
+#ifdef H5_HAVE_PARALLEL
+

+/*-------------------------------------------------------------------------
+ * Function:	H5F_coll_md_read
+ *
+ * Purpose:	Retrieve the 'collective metadata reads' flag for the file.
+ *
+ * Return:	Success:	Non-negative, the 'collective metadata reads' flag
+ * 		Failure:	(can't happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at hdfgroup.org
+ *		Feb 10 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+H5P_coll_md_read_flag_t
+H5F_coll_md_read(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->coll_md_read)
+} /* end H5F_coll_md_read() */
+#endif /* H5_HAVE_PARALLEL */
+
diff --git a/src/H5Fsuper.c b/src/H5Fsuper.c
index 3752be4..a11648a 100644
--- a/src/H5Fsuper.c
+++ b/src/H5Fsuper.c
@@ -658,7 +658,7 @@ H5F__super_read(H5F_t *f, hid_t dxpl_id, hbool_t initial_read)
 		f->shared->sblock = sblock;
 #endif /* JRM */
 
-                if(H5F_super_ext_write_msg(f, dxpl_id, &drvinfo, H5O_DRVINFO_ID, FALSE) < 0)
+		if(H5F_super_ext_write_msg(f, dxpl_id, H5O_DRVINFO_ID, &drvinfo, FALSE) < 0)
                     HGOTO_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "error in writing message to superblock extension")
 
 #if 1 /* bug fix test code -- tidy this up if all goes well */ /* JRM */
@@ -995,7 +995,7 @@ H5F__super_init(H5F_t *f, hid_t dxpl_id)
 	    for(type = H5FD_MEM_SUPER; type < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, type))
                 fsinfo.fs_addr[type-1] = HADDR_UNDEF;
 
-            if(H5O_msg_create(&ext_loc, H5O_FSINFO_ID, H5O_MSG_FLAG_DONTSHARE, H5O_UPDATE_TIME, &fsinfo, dxpl_id) < 0)
+	    if(H5O_msg_create(&ext_loc, H5O_FSINFO_ID, H5O_MSG_FLAG_DONTSHARE, H5O_UPDATE_TIME, &fsinfo, dxpl_id) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update free-space info header message")
 	} /* end if */
     } /* end if */
@@ -1233,7 +1233,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5F_super_ext_write_msg(H5F_t *f, hid_t dxpl_id, void *mesg, unsigned id, hbool_t may_create)
+H5F_super_ext_write_msg(H5F_t *f, hid_t dxpl_id, unsigned id, void *mesg, hbool_t may_create)
 {
     H5P_genplist_t *dxpl = NULL;        /* DXPL for setting ring */
     H5AC_ring_t orig_ring = H5AC_RING_INV;      /* Original ring value */
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index 6f37ff6..e0b5df5 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -727,9 +727,6 @@ H5F__cache_superblock_serialize(const H5F_t *f, void *_image, size_t H5_ATTR_UNU
     /* (We'll rely on the cache to make sure it actually *is* flushed
        last (and collectively in parallel), but this check doesn't hurt) */
     HDassert(sblock->cache_info.flush_me_last);    
-#ifdef H5_HAVE_PARALLEL
-    HDassert(sblock->cache_info.flush_me_collectively);
-#endif
 
     /* Encode the common portion of the file superblock for all versions */
     HDmemcpy(image, H5F_SIGNATURE, (size_t)H5F_SIGNATURE_LEN);
diff --git a/src/H5Ftest.c b/src/H5Ftest.c
index b741e0d..344d7c1 100644
--- a/src/H5Ftest.c
+++ b/src/H5Ftest.c
@@ -109,7 +109,7 @@ H5F_get_sohm_mesg_count_test(hid_t file_id, unsigned type_id,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
 
     /* Retrieve count for message type */
-    if(H5SM_get_mesg_count_test(file, H5AC_ind_dxpl_id, type_id, mesg_count) < 0)
+    if(H5SM_get_mesg_count_test(file, H5AC_ind_read_dxpl_id, type_id, mesg_count) < 0)
         HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't retrieve shared message count")
 
 done:
diff --git a/src/H5G.c b/src/H5G.c
index e072d4f..5d920a4 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -290,7 +290,7 @@ H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id,
 {
     H5G_loc_t	    loc;                /* Location to create group */
     H5G_t	   *grp = NULL;         /* New group created */
-    hid_t           dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t           dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t	    ret_value;          /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -317,8 +317,8 @@ H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not group create property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&gapl_id, H5P_GROUP_ACCESS, H5P_GROUP_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&gapl_id, H5P_CLS_GACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Create the new group & get its ID */
     if(NULL == (grp = H5G__create_named(&loc, name, lcpl_id, gcpl_id, gapl_id, dxpl_id)))
@@ -376,7 +376,7 @@ H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id)
     H5G_loc_t	    loc;
     H5G_t	   *grp = NULL;
     H5G_obj_create_t gcrt_info;         /* Information for group creation */
-    hid_t           dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t           dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t	    ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -394,8 +394,8 @@ H5Gcreate_anon(hid_t loc_id, hid_t gcpl_id, hid_t gapl_id)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not group create property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&gapl_id, H5P_GROUP_ACCESS, H5P_GROUP_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&gapl_id, H5P_CLS_GACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up group creation info */
     gcrt_info.gcpl_id = gcpl_id;
@@ -453,7 +453,7 @@ H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id)
 {
     H5G_t       *grp = NULL;            /* Group opened */
     H5G_loc_t	loc;                    /* Location of parent for group */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t       ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -466,8 +466,8 @@ H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&gapl_id, H5P_GROUP_ACCESS, H5P_GROUP_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&gapl_id, H5P_CLS_GACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Open the group */
     if((grp = H5G__open_name(&loc, name, gapl_id, dxpl_id)) == NULL)
@@ -559,7 +559,7 @@ H5Gget_info(hid_t grp_id, H5G_info_t *grp_info)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
     /* Retrieve the group's information */
-    if(H5G__obj_info(loc.oloc, grp_info/*out*/, H5AC_ind_dxpl_id) < 0)
+    if(H5G__obj_info(loc.oloc, grp_info/*out*/, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't retrieve group info")
 
 done:
@@ -589,7 +589,7 @@ H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *grp_info,
     H5G_name_t  grp_path;            	/* Opened object group hier. path */
     H5O_loc_t   grp_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Location at 'name' found */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -604,8 +604,8 @@ H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *grp_info,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     grp_loc.oloc = &grp_oloc;
@@ -652,7 +652,7 @@ H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     H5G_name_t  grp_path;            	/* Opened object group hier. path */
     H5O_loc_t   grp_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Entry at 'name' found */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -672,8 +672,8 @@ H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     grp_loc.oloc = &grp_oloc;
@@ -762,7 +762,7 @@ H5Gflush(hid_t group_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
 
     /* Flush object's metadata to file */
-    if(H5O_flush_common(&grp->oloc, group_id, H5AC_dxpl_id) < 0)
+    if(H5O_flush_common(&grp->oloc, group_id, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTFLUSH, FAIL, "unable to flush group and object flush callback")
 
 done:
@@ -796,7 +796,7 @@ H5Grefresh(hid_t group_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
 
     /* Call private function to refresh group object */
-    if ((H5O_refresh_metadata(group_id, grp->oloc, H5AC_dxpl_id)) < 0)
+    if ((H5O_refresh_metadata(group_id, grp->oloc, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to refresh group")
 
 done:
diff --git a/src/H5Gbtree2.c b/src/H5Gbtree2.c
index b464930..ff7e200 100644
--- a/src/H5Gbtree2.c
+++ b/src/H5Gbtree2.c
@@ -78,7 +78,7 @@ typedef struct H5G_fh_ud_cmp_t {
 
 /* v2 B-tree driver callbacks for 'creation order' index */
 static herr_t H5G_dense_btree2_corder_store(void *native, const void *udata);
-static herr_t H5G_dense_btree2_corder_compare(const void *rec1, const void *rec2);
+static herr_t H5G_dense_btree2_corder_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5G_dense_btree2_corder_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5G_dense_btree2_corder_decode(const uint8_t *raw, void *native,
@@ -88,7 +88,7 @@ static herr_t H5G_dense_btree2_corder_debug(FILE *stream, int indent, int fwidth
 
 /* v2 B-tree driver callbacks for 'name' index */
 static herr_t H5G_dense_btree2_name_store(void *native, const void *udata);
-static herr_t H5G_dense_btree2_name_compare(const void *rec1, const void *rec2);
+static herr_t H5G__dense_btree2_name_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5G_dense_btree2_name_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5G_dense_btree2_name_decode(const uint8_t *raw, void *native,
@@ -111,12 +111,10 @@ const H5B2_class_t H5G_BT2_NAME[1]={{   /* B-tree class information */
     NULL,                               /* Create client callback context */
     NULL,                               /* Destroy client callback context */
     H5G_dense_btree2_name_store,        /* Record storage callback */
-    H5G_dense_btree2_name_compare,      /* Record comparison callback */
+    H5G__dense_btree2_name_compare,      /* Record comparison callback */
     H5G_dense_btree2_name_encode,       /* Record encoding callback */
     H5G_dense_btree2_name_decode,       /* Record decoding callback */
-    H5G_dense_btree2_name_debug,        /* Record debugging callback */
-    NULL,                               /* Create debugging context */
-    NULL                                /* Destroy debugging context */
+    H5G_dense_btree2_name_debug         /* Record debugging callback */
 }};
 
 /* v2 B-tree class for indexing 'creation order' field of links */
@@ -130,9 +128,7 @@ const H5B2_class_t H5G_BT2_CORDER[1]={{ /* B-tree class information */
     H5G_dense_btree2_corder_compare,    /* Record comparison callback */
     H5G_dense_btree2_corder_encode,     /* Record encoding callback */
     H5G_dense_btree2_corder_decode,     /* Record decoding callback */
-    H5G_dense_btree2_corder_debug,      /* Record debugging callback */
-    NULL,                               /* Create debugging context */
-    NULL                                /* Destroy debugging context */
+    H5G_dense_btree2_corder_debug       /* Record debugging callback */
 }};
 
 /*****************************/
@@ -220,7 +216,7 @@ H5G_dense_btree2_name_store(void *_nrecord, const void *_udata)
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5G_dense_btree2_name_compare
+ * Function:	H5G__dense_btree2_name_compare
  *
  * Purpose:	Compare two native information records, according to some key
  *
@@ -234,13 +230,13 @@ H5G_dense_btree2_name_store(void *_nrecord, const void *_udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5G_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5G__dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec, int *result)
 {
     const H5G_bt2_ud_common_t *bt2_udata = (const H5G_bt2_ud_common_t *)_bt2_udata;
     const H5G_dense_bt2_name_rec_t *bt2_rec = (const H5G_dense_bt2_name_rec_t *)_bt2_rec;
-    herr_t ret_value = FAIL;    /* Return value */
+    herr_t ret_value = SUCCEED;    /* Return value */
 
-    FUNC_ENTER_NOAPI_NOINIT_NOERR
+    FUNC_ENTER_STATIC
 
     /* Sanity check */
     HDassert(bt2_udata);
@@ -250,20 +246,19 @@ H5G_dense_btree2_name_compare(const void *_bt2_udata, const void *_bt2_rec)
 {
 unsigned u;
 
-HDfprintf(stderr, "%s: bt2_udata = {'%s', %x}\n", "H5G_dense_btree2_name_compare", bt2_udata->name, (unsigned)bt2_udata->name_hash);
-HDfprintf(stderr, "%s: bt2_rec = {%x, ", "H5G_dense_btree2_name_compare", (unsigned)bt2_rec->hash);
+HDfprintf(stderr, "%s: bt2_udata = {'%s', %x}\n", "H5G__dense_btree2_name_compare", bt2_udata->name, (unsigned)bt2_udata->name_hash);
+HDfprintf(stderr, "%s: bt2_rec = {%x, ", "H5G__dense_btree2_name_compare", (unsigned)bt2_rec->hash);
 for(u = 0; u < H5G_DENSE_FHEAP_ID_LEN; u++)
     HDfprintf(stderr, "%02x%s", bt2_rec->id[u], (u < (H5G_DENSE_FHEAP_ID_LEN - 1) ? " " : "}\n"));
 }
 #endif /* QAK */
     /* Check hash value */
     if(bt2_udata->name_hash < bt2_rec->hash)
-        ret_value = (-1);
+        *result = (-1);
     else if(bt2_udata->name_hash > bt2_rec->hash)
-        ret_value = 1;
+        *result = 1;
     else {
         H5G_fh_ud_cmp_t fh_udata;       /* User data for fractal heap 'op' callback */
-        herr_t status;                  /* Status from fractal heap 'op' routine */
 
         /* Sanity check */
         HDassert(bt2_udata->name_hash == bt2_rec->hash);
@@ -280,16 +275,17 @@ for(u = 0; u < H5G_DENSE_FHEAP_ID_LEN; u++)
         fh_udata.cmp = 0;
 
         /* Check if the user's link and the B-tree's link have the same name */
-        status = H5HF_op(bt2_udata->fheap, bt2_udata->dxpl_id, bt2_rec->id,
-                H5G_dense_fh_name_cmp, &fh_udata);
-        HDassert(status >= 0);
+        if(H5HF_op(bt2_udata->fheap, bt2_udata->dxpl_id, bt2_rec->id,
+                   H5G_dense_fh_name_cmp, &fh_udata) < 0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
 
         /* Callback will set comparison value */
-        ret_value = fh_udata.cmp;
+        *result = fh_udata.cmp;
     } /* end else */
 
+done:
     FUNC_LEAVE_NOAPI(ret_value)
-} /* H5G_dense_btree2_name_compare() */
+} /* H5G__dense_btree2_name_compare() */
 
 

 /*-------------------------------------------------------------------------
@@ -423,11 +419,10 @@ H5G_dense_btree2_corder_store(void *_nrecord, const void *_udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5G_dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec)
+H5G_dense_btree2_corder_compare(const void *_bt2_udata, const void *_bt2_rec, int *result)
 {
     const H5G_bt2_ud_common_t *bt2_udata = (const H5G_bt2_ud_common_t *)_bt2_udata;
     const H5G_dense_bt2_corder_rec_t *bt2_rec = (const H5G_dense_bt2_corder_rec_t *)_bt2_rec;
-    herr_t ret_value = FAIL;    /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT_NOERR
 
@@ -447,13 +442,13 @@ for(u = 0; u < H5G_DENSE_FHEAP_ID_LEN; u++)
 #endif /* QAK */
     /* Check creation order value */
     if(bt2_udata->corder < bt2_rec->corder)
-        ret_value = -1;
+        *result = -1;
     else if(bt2_udata->corder > bt2_rec->corder)
-        ret_value = 1;
+        *result = 1;
     else
-        ret_value = 0;
+        *result = 0;
 
-    FUNC_LEAVE_NOAPI(ret_value)
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5G_dense_btree2_corder_compare() */
 
 

diff --git a/src/H5Gcache.c b/src/H5Gcache.c
index a4f9530..ed1c4a3 100644
--- a/src/H5Gcache.c
+++ b/src/H5Gcache.c
@@ -328,10 +328,8 @@ H5G__cache_node_serialize(const H5F_t *f, void *_image, size_t len,
     if(H5G__ent_encode_vec(f, &image, sym->entry, sym->nsyms) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTENCODE, FAIL, "can't serialize")
 
-#ifdef H5_CLEAR_MEMORY
     /* Clear rest of symbol table node */
     HDmemset(image, 0, len - (size_t)(image - (uint8_t *)_image));
-#endif /* H5_CLEAR_MEMORY */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c
index e0bc78e..a775c58 100644
--- a/src/H5Gdeprec.c
+++ b/src/H5Gdeprec.c
@@ -222,7 +222,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint)
 
     /* Create the new group & get its ID */
     if(NULL == (grp = H5G__create_named(&loc, name, H5P_LINK_CREATE_DEFAULT,
-            tmp_gcpl, H5P_GROUP_ACCESS_DEFAULT, H5AC_dxpl_id)))
+            tmp_gcpl, H5P_GROUP_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)))
         HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group")
     if((ret_value = H5I_register(H5I_GROUP, grp, TRUE)) < 0)
 	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group")
@@ -274,7 +274,7 @@ H5Gopen1(hid_t loc_id, const char *name)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Open the group */
-    if((grp = H5G__open_name(&loc, name, H5P_DEFAULT, H5AC_ind_dxpl_id)) == NULL)
+    if((grp = H5G__open_name(&loc, name, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) == NULL)
         HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group")
 
     /* Register an atom for the group */
@@ -325,7 +325,7 @@ H5Glink(hid_t cur_loc_id, H5G_link_t type, const char *cur_name, const char *new
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
         /* Create the link */
-        if(H5L_create_soft(cur_name, &cur_loc, new_name, H5P_DEFAULT, H5P_DEFAULT, H5AC_dxpl_id) < 0)
+        if(H5L_create_soft(cur_name, &cur_loc, new_name, H5P_DEFAULT, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "unable to create link")
     } /* end else if */
     else
@@ -376,7 +376,7 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
         /* Create the link */
-        if(H5L_create_soft(cur_name, &new_loc, new_name, H5P_DEFAULT, H5P_DEFAULT, H5AC_dxpl_id) < 0)
+        if(H5L_create_soft(cur_name, &new_loc, new_name, H5P_DEFAULT, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "unable to create link")
     } /* end else if */
     else
@@ -433,7 +433,7 @@ H5G_link_hard(hid_t cur_loc_id, const char *cur_name, hid_t new_loc_id,
 
     /* Create the link */
     if(H5L_create_hard(cur_loc_p, cur_name, new_loc_p, new_name,
-                H5P_DEFAULT, H5P_DEFAULT, H5AC_dxpl_id) < 0)
+                H5P_DEFAULT, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "unable to create link")
 
 done:
@@ -539,7 +539,7 @@ H5G_move(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
 
     /* Move the link */
     if(H5L_move(src_loc_p, src_name, dst_loc_p, dst_name, FALSE, H5P_DEFAULT,
-            H5P_DEFAULT, H5AC_dxpl_id) < 0)
+            H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_LINK, H5E_CANTMOVE, FAIL, "unable to move link")
 
 done:
@@ -570,7 +570,7 @@ H5Gunlink(hid_t loc_id, const char *name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Call H5L routine... */
-    if(H5L_delete(&loc, name, H5P_DEFAULT, H5AC_dxpl_id) < 0)
+    if(H5L_delete(&loc, name, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
       HGOTO_ERROR(H5E_LINK, H5E_CANTDELETE, FAIL, "couldn't delete link")
 
 done:
@@ -602,7 +602,7 @@ H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
     /* Call the new link routine which provides this capability */
-    if(H5L_get_val(&loc, name, buf, size, H5P_DEFAULT, H5AC_ind_dxpl_id) < 0)
+    if(H5L_get_val(&loc, name, buf, size, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
       HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "couldn't get link info")
 
 done:
@@ -641,7 +641,7 @@ H5Gset_comment(hid_t loc_id, const char *name, const char *comment)
     if(!name || !*name)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
-    if(H5G_loc_set_comment(&loc, name, comment, H5P_DEFAULT, H5AC_dxpl_id) < 0)
+    if(H5G_loc_set_comment(&loc, name, comment, H5P_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to set comment value")
 
 done:
@@ -688,7 +688,7 @@ H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
     if(bufsize > 0 && !buf)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no buffer specified")
 
-    if((ret_value = (int)H5G_loc_get_comment(&loc, name, buf, bufsize, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = (int)H5G_loc_get_comment(&loc, name, buf, bufsize, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get comment value")
 
 done:
@@ -752,7 +752,7 @@ H5Giterate(hid_t loc_id, const char *name, int *idx_p, H5G_iterate_t op,
     lnk_op.op_func.op_old = op;
 
     /* Call private function. */
-    if((ret_value = H5G_iterate(loc_id, name, H5_INDEX_NAME, H5_ITER_INC, idx, &last_obj, &lnk_op, op_data, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_iterate(loc_id, name, H5_INDEX_NAME, H5_ITER_INC, idx, &last_obj, &lnk_op, op_data, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "group iteration failed")
 
     /* Set the index we stopped at */
@@ -794,7 +794,7 @@ H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
     /* Check args */
     if(H5G_loc(loc_id, &loc) < 0)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID")
-    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_dxpl_id) < 0)
+    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't get object type")
     if(obj_type != H5O_TYPE_GROUP)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group")
@@ -802,7 +802,7 @@ H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad pointer to # of objects")
 
     /* Retrieve information about the group */
-    if(H5G__obj_info(loc.oloc, &grp_info, H5AC_ind_dxpl_id) < 0)
+    if(H5G__obj_info(loc.oloc, &grp_info, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_CANTCOUNT, FAIL, "can't determine")
 
     /* Set the number of objects [sic: links] in the group */
@@ -847,7 +847,7 @@ H5Gget_objinfo(hid_t loc_id, const char *name, hbool_t follow_link,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
     /* Get info */
-    if(H5G_get_objinfo(&loc, name, follow_link, statbuf, H5AC_ind_dxpl_id) < 0)
+    if(H5G_get_objinfo(&loc, name, follow_link, statbuf, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "cannot stat object")
 
 done:
@@ -1040,13 +1040,13 @@ H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name, size_t size)
     /* Check args */
     if(H5G_loc(loc_id, &loc) < 0)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID")
-    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_dxpl_id) < 0)
+    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get object type")
     if(obj_type != H5O_TYPE_GROUP)
         HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a group")
 
     /* Call internal function */
-    if((ret_value = H5G_obj_get_name_by_idx(loc.oloc, H5_INDEX_NAME, H5_ITER_INC, idx, name, size, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_obj_get_name_by_idx(loc.oloc, H5_INDEX_NAME, H5_ITER_INC, idx, name, size, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_BADTYPE, FAIL, "can't get object name")
 
 done:
@@ -1082,13 +1082,13 @@ H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx)
     /* Check args */
     if(H5G_loc(loc_id, &loc) < 0)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "not a location ID")
-    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_dxpl_id) < 0)
+    if(H5O_obj_type(loc.oloc, &obj_type, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTGET, H5G_UNKNOWN, "can't get object type")
     if(obj_type != H5O_TYPE_GROUP)
         HGOTO_ERROR(H5E_SYM, H5E_BADTYPE, H5G_UNKNOWN, "not a group")
 
     /* Call internal function*/
-    if((ret_value = H5G_obj_get_type_by_idx(loc.oloc, idx, H5AC_ind_dxpl_id)) == H5G_UNKNOWN)
+    if((ret_value = H5G_obj_get_type_by_idx(loc.oloc, idx, H5AC_ind_read_dxpl_id)) == H5G_UNKNOWN)
 	HGOTO_ERROR(H5E_SYM, H5E_BADTYPE, H5G_UNKNOWN, "can't get object type")
 
 done:
diff --git a/src/H5Gint.c b/src/H5Gint.c
index f7f4afe..a165e3a 100644
--- a/src/H5Gint.c
+++ b/src/H5Gint.c
@@ -497,7 +497,7 @@ H5G_close(H5G_t *grp)
         /* Remove the group from the list of opened objects in the file */
         if(H5FO_top_decr(grp->oloc.file, grp->oloc.addr) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
-        if(H5FO_delete(grp->oloc.file, H5AC_dxpl_id, grp->oloc.addr) < 0)
+        if(H5FO_delete(grp->oloc.file, H5AC_ind_read_dxpl_id, grp->oloc.addr) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't remove group from list of open objects")
         if(H5O_close(&(grp->oloc)) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close")
@@ -1209,17 +1209,17 @@ H5G_get_create_plist(H5G_t *grp)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
 
     /* Retrieve any object creation properties */
-    if(H5O_get_create_plist(&grp->oloc, H5AC_ind_dxpl_id, new_plist) < 0)
+    if(H5O_get_create_plist(&grp->oloc, H5AC_ind_read_dxpl_id, new_plist) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't get object creation info")
 
     /* Check for the group having a group info message */
-    if((ginfo_exists = H5O_msg_exists(&(grp->oloc), H5O_GINFO_ID, H5AC_ind_dxpl_id)) < 0)
+    if((ginfo_exists = H5O_msg_exists(&(grp->oloc), H5O_GINFO_ID, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header")
     if(ginfo_exists) {
         H5O_ginfo_t ginfo;		/* Group info message            */
 
         /* Read the group info */
-        if(NULL == H5O_msg_read(&(grp->oloc), H5O_GINFO_ID, &ginfo, H5AC_ind_dxpl_id))
+        if(NULL == H5O_msg_read(&(grp->oloc), H5O_GINFO_ID, &ginfo, H5AC_ind_read_dxpl_id))
             HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't get group info")
 
         /* Set the group info for the property list */
@@ -1228,7 +1228,7 @@ H5G_get_create_plist(H5G_t *grp)
     } /* end if */
 
     /* Check for the group having a link info message */
-    if((linfo_exists = H5G__obj_get_linfo(&(grp->oloc), &linfo, H5AC_ind_dxpl_id)) < 0)
+    if((linfo_exists = H5G__obj_get_linfo(&(grp->oloc), &linfo, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header")
     if(linfo_exists) {
         /* Set the link info for the property list */
@@ -1237,13 +1237,13 @@ H5G_get_create_plist(H5G_t *grp)
     } /* end if */
 
     /* Check for the group having a pipeline message */
-    if((pline_exists = H5O_msg_exists(&(grp->oloc), H5O_PLINE_ID, H5AC_ind_dxpl_id)) < 0)
+    if((pline_exists = H5O_msg_exists(&(grp->oloc), H5O_PLINE_ID, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to read object header")
     if(pline_exists) {
         H5O_pline_t pline;      /* Pipeline message */
 
         /* Read the pipeline */
-        if(NULL == H5O_msg_read(&(grp->oloc), H5O_PLINE_ID, &pline, H5AC_ind_dxpl_id))
+        if(NULL == H5O_msg_read(&(grp->oloc), H5O_PLINE_ID, &pline, H5AC_ind_read_dxpl_id))
             HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't get link pipeline")
 
         /* Set the pipeline for the property list */
diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h
index 1ab5522..2ef99fd 100644
--- a/src/H5Gprivate.h
+++ b/src/H5Gprivate.h
@@ -37,13 +37,6 @@
 #include "H5RSprivate.h"        /* Reference-counted strings            */
 
 /*
- * Define this to enable debugging.
- */
-#ifdef NDEBUG
-#  undef H5G_DEBUG
-#endif
-
-/*
  * The disk size for a symbol table entry...
  */
 #define H5G_SIZEOF_SCRATCH      16
diff --git a/src/H5Gtest.c b/src/H5Gtest.c
index a8796fb..d69a804 100644
--- a/src/H5Gtest.c
+++ b/src/H5Gtest.c
@@ -97,7 +97,7 @@ H5G__is_empty_test(hid_t gid)
     H5G_t *grp = NULL;          /* Pointer to group */
     htri_t msg_exists = FALSE;  /* Indicate that a header message is present */
     htri_t linfo_exists = FALSE;/* Indicate that the 'link info' message is present */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     htri_t ret_value = TRUE;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -209,7 +209,7 @@ H5G__has_links_test(hid_t gid, unsigned *nmsgs)
 {
     H5G_t *grp = NULL;          /* Pointer to group */
     htri_t msg_exists = 0;      /* Indicate that a header message is present */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     htri_t ret_value = TRUE;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -268,7 +268,7 @@ H5G__has_stab_test(hid_t gid)
 {
     H5G_t *grp = NULL;          /* Pointer to group */
     htri_t msg_exists = 0;      /* Indicate that a header message is present */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     htri_t ret_value = TRUE;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -319,7 +319,7 @@ H5G__is_new_dense_test(hid_t gid)
 {
     H5G_t *grp = NULL;          /* Pointer to group */
     htri_t msg_exists = 0;      /* Indicate that a header message is present */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     htri_t ret_value = TRUE;    /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -390,7 +390,7 @@ H5G__new_dense_info_test(hid_t gid, hsize_t *name_count, hsize_t *corder_count)
     H5B2_t *bt2_corder = NULL;  /* v2 B-tree handle for creation order index */
     H5O_linfo_t linfo;		/* Link info message */
     H5G_t *grp = NULL;          /* Pointer to group */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     herr_t ret_value = SUCCEED; /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -471,7 +471,7 @@ H5G__lheap_size_test(hid_t gid, size_t *lheap_size)
 {
     H5G_t *grp = NULL;          /* Pointer to group */
     H5O_stab_t stab;		/* Symbol table message	*/
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     herr_t ret_value = SUCCEED; /* Return value */
 
     FUNC_ENTER_PACKAGE
@@ -613,7 +613,7 @@ H5G__verify_cached_stab_test(H5O_loc_t *grp_oloc, H5G_entry_t *ent)
 {
     H5O_stab_t  stab;                   /* Symbol table */
     H5HL_t      *heap = NULL;           /* Pointer to local heap */
-    hid_t dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_PACKAGE_TAG(dxpl_id, grp_oloc->addr, FAIL)
@@ -770,7 +770,7 @@ H5G__verify_cached_stabs_test(hid_t gid)
     H5O_stab_t          stab;                   /* Symbol table message */
     H5G_bt_common_t     udata = {NULL, NULL};   /* Dummy udata so H5B_iterate doesn't freak out */
     haddr_t             prev_tag = HADDR_UNDEF; /* Previous metadata tag */
-    hid_t               dxpl_id = H5AC_ind_dxpl_id;  /* transfer property list used for this operation */
+    hid_t               dxpl_id = H5AC_ind_read_dxpl_id;  /* transfer property list used for this operation */
     herr_t              ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_PACKAGE
diff --git a/src/H5HFbtree2.c b/src/H5HFbtree2.c
index d82de93..d4a30b8 100644
--- a/src/H5HFbtree2.c
+++ b/src/H5HFbtree2.c
@@ -71,11 +71,10 @@ typedef struct H5HF_huge_bt2_ctx_t {
 /* Common callbacks */
 static void *H5HF__huge_bt2_crt_context(void *udata);
 static herr_t H5HF__huge_bt2_dst_context(void *ctx);
-static void *H5HF__huge_bt2_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t addr);
 
 /* Callbacks for indirect objects */
 static herr_t H5HF__huge_bt2_indir_store(void *native, const void *udata);
-static herr_t H5HF__huge_bt2_indir_compare(const void *rec1, const void *rec2);
+static herr_t H5HF__huge_bt2_indir_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5HF__huge_bt2_indir_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5HF__huge_bt2_indir_decode(const uint8_t *raw, void *native,
@@ -85,7 +84,7 @@ static herr_t H5HF__huge_bt2_indir_debug(FILE *stream, int indent, int fwidth,
 
 /* Callbacks for filtered indirect objects */
 static herr_t H5HF__huge_bt2_filt_indir_store(void *native, const void *udata);
-static herr_t H5HF__huge_bt2_filt_indir_compare(const void *rec1, const void *rec2);
+static herr_t H5HF__huge_bt2_filt_indir_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5HF__huge_bt2_filt_indir_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5HF__huge_bt2_filt_indir_decode(const uint8_t *raw, void *native,
@@ -95,7 +94,7 @@ static herr_t H5HF__huge_bt2_filt_indir_debug(FILE *stream, int indent, int fwid
 
 /* Callbacks for direct objects */
 static herr_t H5HF__huge_bt2_dir_store(void *native, const void *udata);
-static herr_t H5HF__huge_bt2_dir_compare(const void *rec1, const void *rec2);
+static herr_t H5HF__huge_bt2_dir_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5HF__huge_bt2_dir_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5HF__huge_bt2_dir_decode(const uint8_t *raw, void *native,
@@ -105,7 +104,7 @@ static herr_t H5HF__huge_bt2_dir_debug(FILE *stream, int indent, int fwidth,
 
 /* Callbacks for filtered direct objects */
 static herr_t H5HF__huge_bt2_filt_dir_store(void *native, const void *udata);
-static herr_t H5HF__huge_bt2_filt_dir_compare(const void *rec1, const void *rec2);
+static herr_t H5HF__huge_bt2_filt_dir_compare(const void *rec1, const void *rec2, int *result);
 static herr_t H5HF__huge_bt2_filt_dir_encode(uint8_t *raw, const void *native,
     void *ctx);
 static herr_t H5HF__huge_bt2_filt_dir_decode(const uint8_t *raw, void *native,
@@ -127,9 +126,7 @@ const H5B2_class_t H5HF_HUGE_BT2_INDIR[1]={{ /* B-tree class information */
     H5HF__huge_bt2_indir_compare,           /* Record comparison callback */
     H5HF__huge_bt2_indir_encode,            /* Record encoding callback */
     H5HF__huge_bt2_indir_decode,            /* Record decoding callback */
-    H5HF__huge_bt2_indir_debug,             /* Record debugging callback */
-    H5HF__huge_bt2_crt_dbg_context,         /* Create debugging context */
-    H5HF__huge_bt2_dst_context              /* Destroy debugging context */
+    H5HF__huge_bt2_indir_debug              /* Record debugging callback */
 }};
 
 /* v2 B-tree class for indirectly accessed, filtered 'huge' objects */
@@ -143,9 +140,7 @@ const H5B2_class_t H5HF_HUGE_BT2_FILT_INDIR[1]={{ /* B-tree class information */
     H5HF__huge_bt2_filt_indir_compare,      /* Record comparison callback */
     H5HF__huge_bt2_filt_indir_encode,       /* Record encoding callback */
     H5HF__huge_bt2_filt_indir_decode,       /* Record decoding callback */
-    H5HF__huge_bt2_filt_indir_debug,        /* Record debugging callback */
-    H5HF__huge_bt2_crt_dbg_context,         /* Create debugging context */
-    H5HF__huge_bt2_dst_context              /* Destroy debugging context */
+    H5HF__huge_bt2_filt_indir_debug         /* Record debugging callback */
 }};
 
 /* v2 B-tree class for directly accessed 'huge' objects */
@@ -159,9 +154,7 @@ const H5B2_class_t H5HF_HUGE_BT2_DIR[1]={{  /* B-tree class information */
     H5HF__huge_bt2_dir_compare,             /* Record comparison callback */
     H5HF__huge_bt2_dir_encode,              /* Record encoding callback */
     H5HF__huge_bt2_dir_decode,              /* Record decoding callback */
-    H5HF__huge_bt2_dir_debug,               /* Record debugging callback */
-    H5HF__huge_bt2_crt_dbg_context,         /* Create debugging context */
-    H5HF__huge_bt2_dst_context              /* Destroy debugging context */
+    H5HF__huge_bt2_dir_debug                /* Record debugging callback */
 }};
 
 /* v2 B-tree class for directly accessed, filtered 'huge' objects */
@@ -175,9 +168,7 @@ const H5B2_class_t H5HF_HUGE_BT2_FILT_DIR[1]={{ /* B-tree class information */
     H5HF__huge_bt2_filt_dir_compare,        /* Record comparison callback */
     H5HF__huge_bt2_filt_dir_encode,         /* Record encoding callback */
     H5HF__huge_bt2_filt_dir_decode,         /* Record decoding callback */
-    H5HF__huge_bt2_filt_dir_debug,          /* Record debugging callback */
-    H5HF__huge_bt2_crt_dbg_context,         /* Create debugging context */
-    H5HF__huge_bt2_dst_context              /* Destroy debugging context */
+    H5HF__huge_bt2_filt_dir_debug           /* Record debugging callback */
 }};
 
 /*****************************/
@@ -270,46 +261,6 @@ H5HF__huge_bt2_dst_context(void *_ctx)
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5HF__huge_bt2_crt_dbg_context
- *
- * Purpose:	Create context for debugging callback
- *
- * Return:	Success:	non-NULL
- *		Failure:	NULL
- *
- * Programmer:	Quincey Koziol
- *              Tuesday, December 1, 2009
- *
- *-------------------------------------------------------------------------
- */
-static void *
-H5HF__huge_bt2_crt_dbg_context(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t H5_ATTR_UNUSED addr)
-{
-    H5HF_huge_bt2_ctx_t *ctx;   /* Callback context structure */
-    void *ret_value = NULL;     /* Return value */
-
-    FUNC_ENTER_STATIC
-
-    /* Sanity check */
-    HDassert(f);
-
-    /* Allocate callback context */
-    if(NULL == (ctx = H5FL_MALLOC(H5HF_huge_bt2_ctx_t)))
-        HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate callback context")
-
-    /* Determine the size of addresses & lengths in the file */
-    ctx->sizeof_addr = H5F_SIZEOF_ADDR(f);
-    ctx->sizeof_size = H5F_SIZEOF_SIZE(f);
-
-    /* Set return value */
-    ret_value = ctx;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* H5HF__huge_bt2_crt_dbg_context() */
-
-

-/*-------------------------------------------------------------------------
  * Function:	H5HF__huge_bt2_indir_found
  *
  * Purpose:	Retrieve record for indirectly accessed 'huge' object, when
@@ -407,11 +358,14 @@ H5HF__huge_bt2_indir_store(void *nrecord, const void *udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF__huge_bt2_indir_compare(const void *_rec1, const void *_rec2)
+H5HF__huge_bt2_indir_compare(const void *_rec1, const void *_rec2, int *result)
 {
     FUNC_ENTER_STATIC_NOERR
 
-    FUNC_LEAVE_NOAPI((herr_t)(((const H5HF_huge_bt2_indir_rec_t *)_rec1)->id - ((const H5HF_huge_bt2_indir_rec_t *)_rec2)->id))
+    *result = (int)(((const H5HF_huge_bt2_indir_rec_t *)_rec1)->id - 
+                    ((const H5HF_huge_bt2_indir_rec_t *)_rec2)->id);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5HF__huge_bt2_indir_compare() */
 
 

@@ -607,11 +561,14 @@ H5HF__huge_bt2_filt_indir_store(void *nrecord, const void *udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF__huge_bt2_filt_indir_compare(const void *_rec1, const void *_rec2)
+H5HF__huge_bt2_filt_indir_compare(const void *_rec1, const void *_rec2, int *result)
 {
     FUNC_ENTER_STATIC_NOERR
 
-    FUNC_LEAVE_NOAPI((herr_t)(((const H5HF_huge_bt2_filt_indir_rec_t *)_rec1)->id - ((const H5HF_huge_bt2_filt_indir_rec_t *)_rec2)->id))
+    *result = (int)(((const H5HF_huge_bt2_filt_indir_rec_t *)_rec1)->id - 
+                    ((const H5HF_huge_bt2_filt_indir_rec_t *)_rec2)->id);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5HF__huge_bt2_filt_indir_compare() */
 
 

@@ -786,26 +743,25 @@ H5HF__huge_bt2_dir_store(void *nrecord, const void *udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF__huge_bt2_dir_compare(const void *_rec1, const void *_rec2)
+H5HF__huge_bt2_dir_compare(const void *_rec1, const void *_rec2, int *result)
 {
     const H5HF_huge_bt2_dir_rec_t *rec1 = (const H5HF_huge_bt2_dir_rec_t *)_rec1;
     const H5HF_huge_bt2_dir_rec_t *rec2 = (const H5HF_huge_bt2_dir_rec_t *)_rec2;
-    herr_t ret_value = FAIL;    /* Return value */
 
     FUNC_ENTER_STATIC_NOERR
 
     if(rec1->addr < rec2->addr)
-        ret_value = -1;
+        *result = -1;
     else if(rec1->addr > rec2->addr)
-        ret_value = 1;
+        *result = 1;
     else if(rec1->len < rec2->len)
-        ret_value = -1;
+        *result = -1;
     else if(rec1->len > rec2->len)
-        ret_value = 1;
+        *result = 1;
     else
-        ret_value = 0;
+        *result = 0;
 
-    FUNC_LEAVE_NOAPI(ret_value)
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5HF__huge_bt2_dir_compare() */
 
 

@@ -999,26 +955,25 @@ H5HF__huge_bt2_filt_dir_store(void *nrecord, const void *udata)
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF__huge_bt2_filt_dir_compare(const void *_rec1, const void *_rec2)
+H5HF__huge_bt2_filt_dir_compare(const void *_rec1, const void *_rec2, int *result)
 {
     const H5HF_huge_bt2_filt_dir_rec_t *rec1 = (const H5HF_huge_bt2_filt_dir_rec_t *)_rec1;
     const H5HF_huge_bt2_filt_dir_rec_t *rec2 = (const H5HF_huge_bt2_filt_dir_rec_t *)_rec2;
-    herr_t ret_value = FAIL;    /* Return value */
 
     FUNC_ENTER_STATIC_NOERR
 
     if(rec1->addr < rec2->addr)
-        ret_value = -1;
+        *result = -1;
     else if(rec1->addr > rec2->addr)
-        ret_value = 1;
+        *result = 1;
     else if(rec1->len < rec2->len)
-        ret_value = -1;
+        *result = -1;
     else if(rec1->len > rec2->len)
-        ret_value = 1;
+        *result = 1;
     else
-        ret_value = 0;
+        *result = 0;
 
-    FUNC_LEAVE_NOAPI(ret_value)
+    FUNC_LEAVE_NOAPI(SUCCEED)
 } /* H5HF__huge_bt2_filt_dir_compare() */
 
 

diff --git a/src/H5HFcache.c b/src/H5HFcache.c
index 7337f39..b14b7fc 100644
--- a/src/H5HFcache.c
+++ b/src/H5HFcache.c
@@ -1304,7 +1304,7 @@ H5HF__cache_iblock_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
         HDassert(!H5F_addr_eq(iblock->addr, iblock_addr));
 
         /* Let the metadata cache know the block moved */
-        if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_IBLOCK, iblock->addr, iblock_addr) < 0)
+        if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_IBLOCK, iblock->addr, iblock_addr, dxpl_id) < 0)
             HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move indirect block")
 
         /* Update the internal address for the block */
@@ -2391,7 +2391,7 @@ H5HF__cache_dblock_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
 
                 /* Let the metadata cache know, if the block moved */
                 if(!H5F_addr_eq(hdr->man_dtable.table_addr, dblock_addr))
-                    if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, hdr->man_dtable.table_addr, dblock_addr) < 0)
+                    if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, hdr->man_dtable.table_addr, dblock_addr, dxpl_id) < 0)
                         HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move direct block")
 
                 /* Update information about compressed direct block's 
@@ -2449,7 +2449,7 @@ H5HF__cache_dblock_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
 
                 /* Let the metadata cache know, if the block moved */
                 if(!H5F_addr_eq(par_iblock->ents[par_entry].addr, dblock_addr))
-                    if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, par_iblock->ents[par_entry].addr, dblock_addr) < 0)
+                    if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, par_iblock->ents[par_entry].addr, dblock_addr, dxpl_id) < 0)
                         HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move direct block")
 
                 /* Update information about compressed direct block's 
@@ -2501,7 +2501,7 @@ H5HF__cache_dblock_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
                 HDassert(!H5F_addr_eq(hdr->man_dtable.table_addr, dblock_addr));
 
                 /* Let the metadata cache know the block moved */
-                if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, hdr->man_dtable.table_addr, dblock_addr) < 0)
+                if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, hdr->man_dtable.table_addr, dblock_addr, dxpl_id) < 0)
                     HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move direct block")
 
                 /* Update information about direct block's location */
@@ -2525,7 +2525,7 @@ H5HF__cache_dblock_pre_serialize(const H5F_t *f, hid_t dxpl_id, void *_thing,
                 HDassert(!H5F_addr_eq(par_iblock->ents[par_entry].addr, dblock_addr));
 
                 /* Let the metadata cache know the block moved */
-                if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, par_iblock->ents[par_entry].addr, dblock_addr) < 0)
+                if(H5AC_move_entry((H5F_t *)f, H5AC_FHEAP_DBLOCK, par_iblock->ents[par_entry].addr, dblock_addr, dxpl_id) < 0)
                     HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move direct block")
 
                 /* Update information about direct block's location */
@@ -2874,10 +2874,23 @@ H5HF__cache_verify_hdr_descendants_clean(H5F_t *f, hid_t dxpl_id,
                      * While the fractal heap makes heavy use of the udata
                      * in this case, since we know that the entry is in cache,
                      * we can pass NULL udata.
+                     *
+                     * Note that we must set the dxpl tag to avoid a failure
+                     * in H5C_protect() if H5C_DO_TAGGING_SANITY_CHECKS is set.
+                     * Do this unconditionally.  Can't do this at a higher
+                     * level since this call can be triggered by any protect 
+                     * or a flush.
+                     *
+                     * Use the tag assigned to the hdr -- this tag should 
+                     * be used all the way down the fractal heap.
 		     */
+                    H5_BEGIN_TAG(dxpl_id, hdr->cache_info.tag, FAIL)
+
                     if(NULL == (root_iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, root_iblock_addr, NULL, H5C__READ_ONLY_FLAG)))
-                        HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
+                        HGOTO_ERROR_TAG(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
                     unprotect_root_iblock = TRUE;
+
+		    H5_END_TAG(FAIL)
 		} /* end if */
                 else {
 		    /* the root iblock is protected, and we have no
@@ -2935,11 +2948,24 @@ H5HF__cache_verify_hdr_descendants_clean(H5F_t *f, hid_t dxpl_id,
                      * While the fractal heap makes heavy use of the udata
                      * in this case, since we know that the entry is in cache,
                      * we can pass NULL udata.
+                     *
+                     * Note that we must set the dxpl tag to avoid a failure
+                     * in H5C_protect() if H5C_DO_TAGGING_SANITY_CHECKS is set.
+                     * Do this unconditionally.  Can't do this at a higher
+                     * level since this call can be triggered by any protect 
+                     * or a flush.
+                     *
+                     * Use the tag assigned to the hdr -- this tag should 
+                     * be used all the way down the fractal heap.
                      */
+                    H5_BEGIN_TAG(dxpl_id, hdr->cache_info.tag, FAIL)
+
                     if(NULL == (iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, root_iblock_addr, NULL, H5C__READ_ONLY_FLAG)))
-                        HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
+                        HGOTO_ERROR_TAG(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
                     unprotect_root_iblock = TRUE;
                     HDassert(iblock == root_iblock);
+
+		    H5_END_TAG(FAIL)
 		} /* end if */
 	    } /* end else */
 
@@ -2947,8 +2973,9 @@ H5HF__cache_verify_hdr_descendants_clean(H5F_t *f, hid_t dxpl_id,
              * in memory for the duration of the call.  Do some sanity checks,
 	     * and then call H5HF__cache_verify_iblock_descendants_clean().
              */
-            HDassert(hdr->root_iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
-            HDassert(hdr->root_iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
+	    HDassert(root_iblock);
+	    HDassert(root_iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+	    HDassert(root_iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
 
             if(H5HF__cache_verify_iblock_descendants_clean(f, dxpl_id, root_iblock, &root_iblock_status, clean) < 0)
                 HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify root iblock & descendants clean.")
@@ -3325,10 +3352,24 @@ H5HF__cache_verify_descendant_iblocks_clean(H5F_t *f, hid_t dxpl_id,
 			    /* fractal heap makes heavy use of the udata */
 			    /* in this case, since we know that the      */
 			    /* entry is in cache, we can pass NULL udata */
+                            /*                                           */
+                            /* Note that we must set the dxpl tag to     */
+                            /* avoid a failure in H5C_protect() if       */
+                            /* H5C_DO_TAGGING_SANITY_CHECKS is set.      */
+                            /* Do this unconditionally.  Can't do this   */
+                            /* at a higher level since this call can be  */
+                            /* triggered by any protect or a flush.      */
+                            /*                                           */
+                            /* Use the tag assigned to the iblock --     */
+                            /* this tag should be used all the way down  */
+                            /* the fractal heap.                         */
+                            H5_BEGIN_TAG(dxpl_id, iblock->cache_info.tag, FAIL)
 
 			    if(NULL == (child_iblock = (H5HF_indirect_t *) H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK, child_iblock_addr, NULL, H5C__READ_ONLY_FLAG)))
-                                HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
+                                HGOTO_ERROR_TAG(H5E_HEAP, H5E_CANTPROTECT, FAIL, "H5AC_protect() faild.")
 			    unprotect_child_iblock = TRUE;
+
+                            H5_END_TAG(FAIL)
 			} /* end if */
                         else {
 			    /* child iblock is protected -- use             */
diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c
index 73db840..1272ab0 100644
--- a/src/H5HFdblock.c
+++ b/src/H5HFdblock.c
@@ -146,9 +146,7 @@ H5HF_man_dblock_create(hid_t dxpl_id, H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblo
 /* XXX: Change to using free-list factories */
     if((dblock->blk = H5FL_BLK_MALLOC(direct_block, dblock->size)) == NULL)
         HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(dblock->blk, 0, dblock->size);
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(dblock->blk, 0, dblock->size);
 
     dblock->write_buf = NULL;
     dblock->write_size = 0;
diff --git a/src/H5HFhuge.c b/src/H5HFhuge.c
index 2b01a74..2f0b034 100644
--- a/src/H5HFhuge.c
+++ b/src/H5HFhuge.c
@@ -379,7 +379,7 @@ HDfprintf(stderr, "%s: obj_size = %Zu, obj = %p\n", FUNC, obj_size, obj);
         HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, FAIL, "file allocation failed for fractal heap huge object")
 
     /* Write the object's data to disk */
-    if(H5F_block_write(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, write_size, dxpl_id, write_buf) < 0)
+    if(H5F_block_write(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, write_size, H5AC_rawdata_dxpl_id, write_buf) < 0)
         HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "writing 'huge' object to file failed")
 
     /* Release buffer for writing, if we had one */
@@ -770,7 +770,7 @@ H5HF_huge_op_real(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
 
     /* Read the object's (possibly filtered) data from the file */
     /* (reads directly into application's buffer if no filters are present) */
-    if(H5F_block_read(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, (size_t)obj_size, dxpl_id, read_buf) < 0)
+    if(H5F_block_read(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, (size_t)obj_size, H5AC_rawdata_dxpl_id, read_buf) < 0)
         HGOTO_ERROR(H5E_HEAP, H5E_READERROR, FAIL, "can't read 'huge' object's data from the file")
 
     /* Check for I/O pipeline filter on heap */
@@ -889,7 +889,7 @@ H5HF_huge_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
 
     /* Write the object's data to the file */
     /* (writes directly from application's buffer) */
-    if(H5F_block_write(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, obj_size, dxpl_id, obj) < 0)
+    if(H5F_block_write(hdr->f, H5FD_MEM_FHEAP_HUGE_OBJ, obj_addr, obj_size, H5AC_rawdata_dxpl_id, obj) < 0)
         HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "writing 'huge' object to file failed")
 
 done:
diff --git a/src/H5HFiblock.c b/src/H5HFiblock.c
index f3ec78f..341f423 100644
--- a/src/H5HFiblock.c
+++ b/src/H5HFiblock.c
@@ -315,7 +315,7 @@ H5HF_iblock_decr(H5HF_indirect_t *iblock)
             /* Detach from parent indirect block */
             if(iblock->parent) {
                 /* Detach from parent indirect block */
-                if(H5HF_man_iblock_detach(iblock->parent, H5AC_dxpl_id, iblock->par_entry) < 0)
+                if(H5HF_man_iblock_detach(iblock->parent, H5AC_ind_read_dxpl_id, iblock->par_entry) < 0)
                     HGOTO_ERROR(H5E_HEAP, H5E_CANTATTACH, FAIL, "can't detach from parent indirect block")
                 iblock->parent = NULL;
                 iblock->par_entry = 0;
@@ -339,7 +339,7 @@ H5HF_iblock_decr(H5HF_indirect_t *iblock)
             if (!H5F_IS_TMP_ADDR(hdr->f, iblock_addr))
                 cache_flags |= H5AC__FREE_FILE_SPACE_FLAG;
 
-            if(H5AC_expunge_entry(hdr->f, H5AC_dxpl_id, H5AC_FHEAP_IBLOCK, iblock_addr, cache_flags) < 0)
+            if(H5AC_expunge_entry(hdr->f, H5AC_ind_read_dxpl_id, H5AC_FHEAP_IBLOCK, iblock_addr, cache_flags) < 0)
                 HGOTO_ERROR(H5E_HEAP, H5E_CANTREMOVE, FAIL, "unable to remove indirect block from cache")
         } /* end if */
     } /* end if */
@@ -630,7 +630,7 @@ H5HF_man_iblock_root_double(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_si
 
     /* Move object in cache, if it actually was relocated */
     if(H5F_addr_ne(iblock->addr, new_addr)) {
-        if(H5AC_move_entry(hdr->f, H5AC_FHEAP_IBLOCK, iblock->addr, new_addr) < 0)
+        if(H5AC_move_entry(hdr->f, H5AC_FHEAP_IBLOCK, iblock->addr, new_addr, dxpl_id) < 0)
             HGOTO_ERROR(H5E_HEAP, H5E_CANTMOVE, FAIL, "unable to move fractal heap root indirect block")
         iblock->addr = new_addr;
     } /* end if */
@@ -799,7 +799,7 @@ H5HF_man_iblock_root_halve(H5HF_indirect_t *iblock, hid_t dxpl_id)
 
     /* Move object in cache, if it actually was relocated */
     if(H5F_addr_ne(iblock->addr, new_addr)) {
-        if(H5AC_move_entry(hdr->f, H5AC_FHEAP_IBLOCK, iblock->addr, new_addr) < 0)
+        if(H5AC_move_entry(hdr->f, H5AC_FHEAP_IBLOCK, iblock->addr, new_addr, dxpl_id) < 0)
             HGOTO_ERROR(H5E_HEAP, H5E_CANTSPLIT, FAIL, "unable to move fractal heap root indirect block")
         iblock->addr = new_addr;
     } /* end if */
diff --git a/src/H5HFsection.c b/src/H5HFsection.c
index 8699827..37ff8f4 100644
--- a/src/H5HFsection.c
+++ b/src/H5HFsection.c
@@ -99,7 +99,7 @@ static htri_t H5HF_sect_single_can_shrink(const H5FS_section_info_t *sect,
 static herr_t H5HF_sect_single_shrink(H5FS_section_info_t **_sect,
     void *udata);
 static herr_t H5HF_sect_single_valid(const H5FS_section_class_t *cls,
-    const H5FS_section_info_t *sect);
+    const H5FS_section_info_t *sect, hid_t dxpl_id);
 
 /* 'row' section routines */
 static H5HF_free_section_t *H5HF_sect_row_create(haddr_t sect_off,
@@ -129,7 +129,7 @@ static herr_t H5HF_sect_row_shrink(H5FS_section_info_t **sect,
     void *udata);
 static herr_t H5HF_sect_row_free(H5FS_section_info_t *sect);
 static herr_t H5HF_sect_row_valid(const H5FS_section_class_t *cls,
-    const H5FS_section_info_t *sect);
+    const H5FS_section_info_t *sect, hid_t dxpl_id);
 static herr_t H5HF_sect_row_debug(const H5FS_section_info_t *sect,
     FILE *stream, int indent, int fwidth);
 
@@ -1172,7 +1172,7 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF_sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5FS_section_info_t *_sect)
+H5HF_sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5FS_section_info_t *_sect, hid_t dxpl_id)
 {
     const H5HF_free_section_t *sect = (const H5HF_free_section_t *)_sect;   /* Pointer to section to check */
 
@@ -1222,7 +1222,7 @@ H5HF_sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5F
                 H5HF_direct_t *dblock;      /* Direct block for section */
 
                 /* Protect the direct block for the section */
-                dblock = H5HF_man_dblock_protect(iblock->hdr, H5AC_dxpl_id, dblock_addr, dblock_size, iblock, sect->u.single.par_entry, H5AC__READ_ONLY_FLAG);
+                dblock = H5HF_man_dblock_protect(iblock->hdr, dxpl_id, dblock_addr, dblock_size, iblock, sect->u.single.par_entry, H5AC__READ_ONLY_FLAG);
                 HDassert(dblock);
 
                 /* Sanity check settings for section */
@@ -1233,7 +1233,7 @@ H5HF_sect_single_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls, const H5F
                         (sect->sect_info.addr + sect->sect_info.size)));
 
                 /* Release direct block */
-                status = H5AC_unprotect(iblock->hdr->f, H5AC_dxpl_id, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET);
+                status = H5AC_unprotect(iblock->hdr->f, dxpl_id, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET);
                 HDassert(status >= 0);
             } /* end if */
         } /* end if */
@@ -1992,7 +1992,8 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HF_sect_row_valid(const H5FS_section_class_t *cls, const H5FS_section_info_t *_sect)
+H5HF_sect_row_valid(const H5FS_section_class_t *cls, const H5FS_section_info_t *_sect, 
+                    hid_t H5_ATTR_UNUSED dxpl_id)
 {
     H5HF_sect_private_t *cls_prvt;    /* Pointer to class private info */
     const H5HF_hdr_t *hdr;      /* Fractal heap header */
diff --git a/src/H5HFtiny.c b/src/H5HFtiny.c
index bdfe30d..711ceb9 100644
--- a/src/H5HFtiny.c
+++ b/src/H5HFtiny.c
@@ -177,10 +177,9 @@ HDfprintf(stderr, "%s: obj_size = %Zu\n", FUNC, obj_size);
                 ((enc_obj_size & H5HF_TINY_MASK_EXT_1) >> 8));
         *id++ = enc_obj_size & H5HF_TINY_MASK_EXT_2;
     } /* end else */
+
     HDmemcpy(id, obj, obj_size);
-#ifdef H5_CLEAR_MEMORY
-HDmemset(id + obj_size, 0, (hdr->id_len - ((size_t)1 + (size_t)hdr->tiny_len_extended + obj_size)));
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(id + obj_size, 0, (hdr->id_len - ((size_t)1 + (size_t)hdr->tiny_len_extended + obj_size)));
 
     /* Update statistics about heap */
     hdr->tiny_size += obj_size;
diff --git a/src/H5HG.c b/src/H5HG.c
index 41c5007..f95b607 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -154,22 +154,20 @@ H5HG_create(H5F_t *f, hid_t dxpl_id, size_t size)
     /* Create it */
     H5_CHECK_OVERFLOW(size, size_t, hsize_t);
     if(HADDR_UNDEF == (addr = H5MF_alloc(f, H5FD_MEM_GHEAP, dxpl_id, (hsize_t)size)))
-	HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to allocate file space for global heap")
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to allocate file space for global heap")
     if(NULL == (heap = H5FL_MALLOC(H5HG_heap_t)))
-	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
     heap->addr = addr;
     heap->size = size;
     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")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(heap->chunk, 0, size);
-#endif /* H5_CLEAR_MEMORY */
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
+    HDmemset(heap->chunk, 0, size);
     heap->nalloc = H5HG_NOBJS(f, size);
     heap->nused = 1; /* account for index 0, which is used for the free object */
     if(NULL == (heap->obj = H5FL_SEQ_MALLOC(H5HG_obj_t, heap->nalloc)))
-	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
 
     /* Initialize the header */
     HDmemcpy(heap->chunk, H5HG_MAGIC, (size_t)H5_SIZEOF_MAGIC);
@@ -452,9 +450,7 @@ H5HG_extend(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t need)
     /* Re-allocate the heap information in memory */
     if(NULL == (new_chunk = H5FL_BLK_REALLOC(gheap_chunk, heap->chunk, (heap->size + need))))
         HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "new heap allocation failed")
-#ifdef H5_CLEAR_MEMORY
-HDmemset(new_chunk + heap->size, 0, need);
-#endif /* H5_CLEAR_MEMORY */
+    HDmemset(new_chunk + heap->size, 0, need);
 
     /* Adjust the size of the heap */
     old_size = heap->size;
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index 678da7f..d0dde89 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -630,10 +630,8 @@ H5HL__cache_prefix_serialize(const H5F_t *f, void *_image, size_t len,
         /* Sanity check */
         HDassert((size_t)(image - (uint8_t *)_image) <= len);
 
-#ifdef H5_CLEAR_MEMORY
         /* Clear rest of local heap */
         HDmemset(image, 0, len - (size_t)(image - (uint8_t *)_image));
-#endif /* H5_CLEAR_MEMORY */
     } /* end else */
 
     FUNC_LEAVE_NOAPI(SUCCEED)
diff --git a/src/H5HLdblk.c b/src/H5HLdblk.c
index 6a4d8ce..69e0334 100644
--- a/src/H5HLdblk.c
+++ b/src/H5HLdblk.c
@@ -266,7 +266,7 @@ H5HL__dblk_realloc(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t new_heap_size))
                 H5E_THROW(H5E_CANTRESIZE, "unable to resize heap data block in cache");
 
             /* Relocate the heap data block in the cache */
-            if(FAIL == H5AC_move_entry(f, H5AC_LHEAP_DBLK, old_addr, new_addr))
+            if(FAIL == H5AC_move_entry(f, H5AC_LHEAP_DBLK, old_addr, new_addr, dxpl_id))
                 H5E_THROW(H5E_CANTMOVE, "unable to move heap data block in cache");
 
         } /* end else */
diff --git a/src/H5I.c b/src/H5I.c
index e952388..075f86e 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -2118,7 +2118,7 @@ H5Iget_name(hid_t id, char *name/*out*/, size_t size)
 	HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't retrieve object location")
 
     /* Call internal group routine to retrieve object's name */
-    if((ret_value = H5G_get_name(&loc, name, size, NULL, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_get_name(&loc, name, size, NULL, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't retrieve object name")
 
 done:
diff --git a/src/H5Itest.c b/src/H5Itest.c
index 9d451c6..506ca87 100644
--- a/src/H5Itest.c
+++ b/src/H5Itest.c
@@ -89,7 +89,7 @@ H5I_get_name_test(hid_t id, char *name/*out*/, size_t size, hbool_t *cached)
 	HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't retrieve object location")
 
     /* Call internal group routine to retrieve object's name */
-    if((ret_value = H5G_get_name(&loc, name, size, cached, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_get_name(&loc, name, size, cached, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_ATOM, H5E_CANTGET, FAIL, "can't retrieve object name")
 
 done:
diff --git a/src/H5L.c b/src/H5L.c
index 84d8d35..b5c6240 100644
--- a/src/H5L.c
+++ b/src/H5L.c
@@ -93,6 +93,17 @@ typedef struct {
     hid_t dxpl_id;                      /* Dataset transfer property list */
 } H5L_trav_mv2_t;
 
+/* User data for path traversal routine for checking if a link exists */
+typedef struct {
+    /* Down */
+    char *sep;                          /* Pointer to next separator in the string */
+    hid_t lapl_id;                      /* Link access property list */
+    hid_t dxpl_id;                      /* Dataset transfer property list */
+
+    /* Up */
+    hbool_t exists;                     /* Whether the link exists or not */
+} H5L_trav_le_t;
+
 /* User data for path traversal routine for getting link value */
 typedef struct {
     size_t size;                        /* Size of user buffer */
@@ -170,10 +181,13 @@ static herr_t H5L_move_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
 static herr_t H5L_move_dest_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
     const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
     H5G_own_loc_t *own_loc/*out*/);
-static herr_t H5L_exists_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
+static herr_t H5L__exists_final_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
+    const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
+    H5G_own_loc_t *own_loc/*out*/);
+static herr_t H5L__exists_inter_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
     const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
     H5G_own_loc_t *own_loc/*out*/);
-static htri_t H5L_exists(const H5G_loc_t *loc, const char *name, hid_t lapl_id,
+static htri_t H5L__exists(const H5G_loc_t *loc, const char *name, hid_t lapl_id,
     hid_t dxpl_id);
 static herr_t H5L_get_info_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
     const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
@@ -322,7 +336,7 @@ H5Lmove(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
 {
     H5G_loc_t	src_loc, *src_loc_p;
     H5G_loc_t	dst_loc, *dst_loc_p;
-    hid_t       dxpl_id = H5AC_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t      ret_value=SUCCEED;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -343,6 +357,12 @@ H5Lmove(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id,
+                               ((src_loc_id != H5L_SAME_LOC) ? src_loc_id : dst_loc_id),
+                               TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Set up src & dst location pointers */
     src_loc_p = &src_loc;
     dst_loc_p = &dst_loc;
@@ -351,10 +371,6 @@ H5Lmove(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     else if(dst_loc_id == H5L_SAME_LOC)
         dst_loc_p = src_loc_p;
 
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Move the link */
     if(H5L_move(src_loc_p, src_name, dst_loc_p, dst_name, FALSE, lcpl_id,
             lapl_id, dxpl_id) < 0)
@@ -385,7 +401,7 @@ H5Lcopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
 {
     H5G_loc_t	src_loc, *src_loc_p;
     H5G_loc_t	dst_loc, *dst_loc_p;
-    hid_t       dxpl_id = H5AC_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t      ret_value=SUCCEED;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -406,6 +422,12 @@ H5Lcopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id,
+                               ((src_loc_id != H5L_SAME_LOC) ? src_loc_id : dst_loc_id),
+                               TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Set up src & dst location pointers */
     src_loc_p = &src_loc;
     dst_loc_p = &dst_loc;
@@ -414,10 +436,6 @@ H5Lcopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     else if(dst_loc_id == H5L_SAME_LOC)
         dst_loc_p = src_loc_p;
 
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Copy the link */
     if(H5L_move(src_loc_p, src_name, dst_loc_p, dst_name, TRUE, lcpl_id,
                 lapl_id, dxpl_id) < 0)
@@ -451,7 +469,7 @@ H5Lcreate_soft(const char *link_target,
     hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id)
 {
     H5G_loc_t	link_loc;               /* Group location for new link */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -468,8 +486,8 @@ H5Lcreate_soft(const char *link_target,
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, link_loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Create the link */
     if(H5L_create_soft(link_target, &link_loc, link_name, lcpl_id, lapl_id, dxpl_id) < 0)
@@ -502,7 +520,7 @@ H5Lcreate_hard(hid_t cur_loc_id, const char *cur_name,
 {
     H5G_loc_t	cur_loc, *cur_loc_p;
     H5G_loc_t	new_loc, *new_loc_p;
-    hid_t       dxpl_id = H5AC_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t      ret_value = SUCCEED;            /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -523,6 +541,10 @@ H5Lcreate_hard(hid_t cur_loc_id, const char *cur_name,
     if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, cur_loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Set up current & new location pointers */
     cur_loc_p = &cur_loc;
     new_loc_p = &new_loc;
@@ -533,10 +555,6 @@ H5Lcreate_hard(hid_t cur_loc_id, const char *cur_name,
     else if(cur_loc_p->oloc->file != new_loc_p->oloc->file)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should be in the same file.")
 
-    /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
-
     /* Create the link */
     if(H5L_create_hard(cur_loc_p, cur_name, new_loc_p, new_name,
                 lcpl_id, lapl_id, dxpl_id) < 0)
@@ -576,7 +594,7 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
     const void *udata, size_t udata_size, hid_t lcpl_id, hid_t lapl_id)
 {
     H5G_loc_t	link_loc;
-    hid_t       dxpl_id = H5AC_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t      ret_value = SUCCEED;       /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -592,8 +610,8 @@ H5Lcreate_ud(hid_t link_loc_id, const char *link_name, H5L_type_t link_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid link class")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, link_loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Create external link */
     if(H5L_create_ud(&link_loc, link_name, udata, udata_size, link_type, lcpl_id, lapl_id, dxpl_id) < 0)
@@ -625,7 +643,7 @@ herr_t
 H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Group's location */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -638,8 +656,8 @@ H5Ldelete(hid_t loc_id, const char *name, hid_t lapl_id)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Unlink */
     if(H5L_delete(&loc, name, lapl_id, dxpl_id) < 0)
@@ -675,7 +693,7 @@ H5Ldelete_by_idx(hid_t loc_id, const char *group_name,
 {
     H5G_loc_t	loc;                    /* Group's location */
     H5L_trav_rmbi_t udata;              /* User data for callback */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -692,14 +710,14 @@ H5Ldelete_by_idx(hid_t loc_id, const char *group_name,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up user data for unlink operation */
     udata.idx_type = idx_type;
     udata.order = order;
     udata.n = n;
-    udata.dxpl_id = H5AC_dxpl_id;
+    udata.dxpl_id = dxpl_id;
 
     /* Traverse the group hierarchy to remove the link */
     if(H5G_traverse(&loc, group_name, H5G_TARGET_SLINK|H5G_TARGET_UDLINK|H5G_TARGET_MOUNT, 
@@ -735,7 +753,7 @@ H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/, size_t size,
     hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Group location for location to query */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -748,8 +766,8 @@ H5Lget_val(hid_t loc_id, const char *name, void *buf/*out*/, size_t size,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Get the link value */
     if(H5L_get_val(&loc, name, buf, size, lapl_id, dxpl_id) < 0)
@@ -785,7 +803,7 @@ H5Lget_val_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
 {
     H5G_loc_t	loc;                    /* Group location for location to query */
     H5L_trav_gvbi_t udata;              /* User data for callback */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -803,8 +821,8 @@ H5Lget_val_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up user data for retrieving information */
     udata.idx_type = idx_type;
@@ -842,7 +860,7 @@ htri_t
 H5Lexists(hid_t loc_id, const char *name, hid_t lapl_id)
 {
     H5G_loc_t	loc;
-    hid_t       dxpl_id = H5AC_ind_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     htri_t ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -855,11 +873,11 @@ H5Lexists(hid_t loc_id, const char *name, hid_t lapl_id)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Check for the existence of the link */
-    if((ret_value = H5L_exists(&loc, name, lapl_id, dxpl_id)) < 0)
+    if((ret_value = H5L__exists(&loc, name, lapl_id, dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to get link info")
 
 done:
@@ -886,7 +904,7 @@ H5Lget_info(hid_t loc_id, const char *name, H5L_info_t *linfo /*out*/,
     hid_t lapl_id)
 {
     H5G_loc_t	loc;
-    hid_t       dxpl_id = H5AC_ind_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t ret_value = SUCCEED;
 
     FUNC_ENTER_API(FAIL)
@@ -899,12 +917,12 @@ H5Lget_info(hid_t loc_id, const char *name, H5L_info_t *linfo /*out*/,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Get the link information */
     if(H5L_get_info(&loc, name, linfo, lapl_id, dxpl_id) < 0)
-	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to get link info")
+	HGOTO_ERROR(H5E_LINK, H5E_NOTFOUND, FAIL, "unable to get link info")
 
 done:
     FUNC_LEAVE_API(ret_value)
@@ -932,7 +950,7 @@ H5Lget_info_by_idx(hid_t loc_id, const char *group_name,
 {
     H5G_loc_t	loc;                    /* Group location for group to query */
     H5L_trav_gibi_t udata;              /* User data for callback */
-    hid_t  dxpl_id = H5AC_ind_dxpl_id;  /* dxpl used by library */
+    hid_t  dxpl_id = H5AC_ind_read_dxpl_id;  /* dxpl used by library */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -950,8 +968,8 @@ H5Lget_info_by_idx(hid_t loc_id, const char *group_name,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up user data for callback */
     udata.idx_type = idx_type;
@@ -963,8 +981,7 @@ H5Lget_info_by_idx(hid_t loc_id, const char *group_name,
     /* Traverse the group hierarchy to locate the object to get info about */
     if(H5G_traverse(&loc, group_name, H5G_TARGET_SLINK|H5G_TARGET_UDLINK, 
                     H5L_get_info_by_idx_cb, &udata, lapl_id, dxpl_id) < 0)
-	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to get link info")
-
+	HGOTO_ERROR(H5E_LINK, H5E_NOTFOUND, FAIL, "unable to get link info")
 
 done:
     FUNC_LEAVE_API(ret_value)
@@ -1122,7 +1139,7 @@ H5Lget_name_by_idx(hid_t loc_id, const char *group_name,
 {
     H5G_loc_t	loc;            /* Location of group */
     H5L_trav_gnbi_t udata;      /* User data for callback */
-    hid_t   dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t   dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     ssize_t ret_value;          /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1140,8 +1157,8 @@ H5Lget_name_by_idx(hid_t loc_id, const char *group_name,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up user data for callback */
     udata.idx_type = idx_type;
@@ -1155,7 +1172,7 @@ H5Lget_name_by_idx(hid_t loc_id, const char *group_name,
     /* Traverse the group hierarchy to locate the link to get name of */
     if(H5G_traverse(&loc, group_name, H5G_TARGET_SLINK|H5G_TARGET_UDLINK, 
                     H5L_get_name_by_idx_cb, &udata, lapl_id, dxpl_id) < 0)
-        HGOTO_ERROR(H5E_SYM, H5E_EXISTS, FAIL, "name doesn't exist")
+        HGOTO_ERROR(H5E_LINK, H5E_EXISTS, FAIL, "name doesn't exist")
 
     /* Set the return value */
     ret_value = udata.name_len;
@@ -1220,8 +1237,7 @@ H5Literate(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
     lnk_op.op_func.op_new = op;
 
     /* Iterate over the links */
-    if((ret_value = H5G_iterate(grp_id, ".", idx_type, order, idx, &last_lnk, &lnk_op, 
-                                op_data, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_iterate(grp_id, ".", idx_type, order, idx, &last_lnk, &lnk_op, op_data, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "link iteration failed")
 
     /* Set the index we stopped at */
@@ -1263,7 +1279,7 @@ H5Literate_by_name(hid_t loc_id, const char *group_name,
     H5G_link_iterate_t lnk_op;  /* Link operator */
     hsize_t     last_lnk;       /* Index of last object looked at */
     hsize_t	idx;            /* Internal location to hold index */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id;         /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id;         /* dxpl used by library */
     herr_t ret_value;           /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1281,8 +1297,8 @@ H5Literate_by_name(hid_t loc_id, const char *group_name,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up iteration beginning/end info */
     idx = (idx_p == NULL ? 0 : *idx_p);
@@ -1295,7 +1311,7 @@ H5Literate_by_name(hid_t loc_id, const char *group_name,
     /* Iterate over the links */
     if((ret_value = H5G_iterate(loc_id, group_name, idx_type, order, idx, &last_lnk, &lnk_op, 
                                 op_data, lapl_id, dxpl_id)) < 0)
-	HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "link iteration failed")
+	HGOTO_ERROR(H5E_LINK, H5E_BADITER, FAIL, "link iteration failed")
 
     /* Set the index we stopped at */
     if(idx_p)
@@ -1356,7 +1372,7 @@ H5Lvisit(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no callback operator specified")
 
     /* Call internal group visitation routine */
-    if((ret_value = H5G_visit(grp_id, ".", idx_type, order, op, op_data, H5P_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_visit(grp_id, ".", idx_type, order, op, op_data, H5P_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "link visitation failed")
 
 done:
@@ -1396,7 +1412,7 @@ herr_t
 H5Lvisit_by_name(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     H5_iter_order_t order, H5L_iterate_t op, void *op_data, hid_t lapl_id)
 {
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1414,12 +1430,12 @@ H5Lvisit_by_name(hid_t loc_id, const char *group_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no callback operator specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Call internal group visitation routine */
     if((ret_value = H5G_visit(loc_id, group_name, idx_type, order, op, op_data, lapl_id, dxpl_id)) < 0)
-	HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "link visitation failed")
+	HGOTO_ERROR(H5E_LINK, H5E_BADITER, FAIL, "link visitation failed")
 
 done:
     FUNC_LEAVE_API(ret_value)
@@ -2752,9 +2768,10 @@ done:
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5L_exists_cb
+ * Function:	H5L__exists_final_cb
  *
- * Purpose:	Callback for checking whether a link exists
+ * Purpose:	Callback for checking whether a link exists, as the final
+ *              component of a path
  *
  * Return:	Non-negative on success/Negative on failure
  *
@@ -2764,30 +2781,162 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5L_exists_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc/*in*/, const char H5_ATTR_UNUSED *name,
+H5L__exists_final_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc/*in*/, const char H5_ATTR_UNUSED *name,
     const H5O_link_t *lnk, H5G_loc_t H5_ATTR_UNUSED *obj_loc, void *_udata/*in,out*/,
     H5G_own_loc_t *own_loc/*out*/)
 {
-    hbool_t *udata = (hbool_t *)_udata;   /* User data passed in */
+    H5L_trav_le_t *udata = (H5L_trav_le_t *)_udata;   /* User data passed in */
 
-    FUNC_ENTER_NOAPI_NOINIT_NOERR
+    FUNC_ENTER_STATIC_NOERR
 
     /* Check if the name in this group resolved to a valid link */
-    *udata = (hbool_t)(lnk != NULL);
+    udata->exists = (hbool_t)(lnk != NULL);
 
     /* Indicate that this callback didn't take ownership of the group *
      * location for the object */
     *own_loc = H5G_OWN_NONE;
 
     FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5L_exists_cb() */
+} /* end H5L__exists_final_cb() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5L__exists_inter_cb
+ *
+ * Purpose:	Callback for checking whether a link exists, as an intermediate
+ *              component of a path
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, December 31 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5L__exists_inter_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc/*in*/, const char H5_ATTR_UNUSED *name,
+    const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
+    H5G_own_loc_t *own_loc/*out*/)
+{
+    H5L_trav_le_t *udata = (H5L_trav_le_t *)_udata;   /* User data passed in */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_STATIC
+
+    /* Check if the name in this group resolved to a valid link */
+    if(lnk != NULL) {
+        /* Check for more components to the path */
+        if(udata->sep) {
+            H5G_traverse_t cb_func;     /* Callback function for tranversal */
+            char *next;                 /* Pointer to next component name */
+
+            /* Look for another separator */
+            next = udata->sep;
+            if(NULL == (udata->sep = HDstrchr(udata->sep, '/')))
+                cb_func = H5L__exists_final_cb;
+            else {
+                /* Chew through adjacent separators, if present */
+                do {
+                    *udata->sep = '\0';
+                    udata->sep++;
+                } while('/' == *udata->sep);
+                cb_func = H5L__exists_inter_cb;
+            } /* end else */
+            if(H5G_traverse(obj_loc, next, H5G_TARGET_SLINK | H5G_TARGET_UDLINK, cb_func, udata, udata->lapl_id, udata->dxpl_id) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't determine if link exists")
+        } /* end if */
+        else
+            udata->exists = TRUE;
+    } /* end if */
+    else
+        udata->exists = FALSE;
+
+    /* Indicate that this callback didn't take ownership of the group *
+     * location for the object */
+    *own_loc = H5G_OWN_NONE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5L__exists_inter_cb() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5L_exists
+ * Function:	H5L_exists_tolerant
  *
  * Purpose:	Returns whether a link exists in a group
  *
+ * Note:	Same as H5L_exists, except that missing links are reported
+ *		as 'FALSE' instead of causing failures
+ *
+ * Return:	Non-negative (TRUE/FALSE) on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, December 31 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5L_exists_tolerant(const H5G_loc_t *loc, const char *name, hid_t lapl_id, hid_t dxpl_id)
+{
+    H5L_trav_le_t udata;        /* User data for traversal */
+    H5G_traverse_t cb_func;     /* Callback function for tranversal */
+    char *name_copy = NULL;     /* Duplicate of name */
+    char *name_trav;            /* Name to traverse */
+    htri_t ret_value = FAIL;    /* Return value */
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+    /* Sanity checks */
+    HDassert(loc);
+    HDassert(name);
+
+    /* Copy the name and skip leading '/'s */
+    name_trav = name_copy = H5MM_strdup(name);
+    while('/' == *name_trav)
+        name_trav++;
+
+    /* A path of "/" will always exist in a file */
+    if('\0' == *name_trav)
+        HGOTO_DONE(TRUE)
+
+    /* Set up user data & correct callback */
+    udata.lapl_id = lapl_id;
+    udata.dxpl_id = dxpl_id;
+    udata.exists = FALSE;
+    if(NULL == (udata.sep = HDstrchr(name_trav, '/')))
+        cb_func = H5L__exists_final_cb;
+    else {
+        /* Chew through adjacent separators, if present */
+        do {
+            *udata.sep = '\0';
+            udata.sep++;
+        } while('/' == *udata.sep);
+        cb_func = H5L__exists_inter_cb;
+    } /* end else */
+
+    /* Traverse the group hierarchy to locate the link to check */
+    if(H5G_traverse(loc, name_trav, H5G_TARGET_SLINK | H5G_TARGET_UDLINK, cb_func, &udata, lapl_id, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "can't determine if link exists")
+
+    /* Set return value */
+    ret_value = (htri_t)udata.exists;
+
+done:
+    /* Release duplicated string */
+    H5MM_xfree(name_copy);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5L_exists_tolerant() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	H5L__exists
+ *
+ * Purpose:	Returns whether a link exists in a group
+ *
+ * Note:	Same as H5L_exists_tolerant, except that missing links are reported
+ *		as failures
+ *
  * Return:	Non-negative (TRUE/FALSE) on success/Negative on failure
  *
  * Programmer:	Quincey Koziol
@@ -2796,23 +2945,28 @@ H5L_exists_cb(H5G_loc_t H5_ATTR_UNUSED *grp_loc/*in*/, const char H5_ATTR_UNUSED
  *-------------------------------------------------------------------------
  */
 static htri_t
-H5L_exists(const H5G_loc_t *loc, const char *name, hid_t lapl_id, hid_t dxpl_id)
+H5L__exists(const H5G_loc_t *loc, const char *name, hid_t lapl_id, hid_t dxpl_id)
 {
-    hbool_t exists = FALSE;     /* Whether the link exists in the group */
+    H5L_trav_le_t udata;        /* User data for traversal */
     htri_t ret_value = FAIL;    /* Return value */
 
-    FUNC_ENTER_NOAPI_NOINIT
+    FUNC_ENTER_STATIC
+
+    /* A path of "/" will always exist in a file */
+    if(0 == HDstrcmp(name, "/"))
+        HGOTO_DONE(TRUE)
 
     /* Traverse the group hierarchy to locate the object to get info about */
-    if(H5G_traverse(loc, name, H5G_TARGET_SLINK|H5G_TARGET_UDLINK, H5L_exists_cb, &exists, lapl_id, dxpl_id) < 0)
+    udata.exists = FALSE;
+    if(H5G_traverse(loc, name, H5G_TARGET_SLINK | H5G_TARGET_UDLINK, H5L__exists_final_cb, &udata, lapl_id, dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_EXISTS, FAIL, "path doesn't exist")
 
     /* Set return value */
-    ret_value = (htri_t)exists;
+    ret_value = (htri_t)udata.exists;
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
-} /* H5L_exists() */
+} /* H5L__exists() */
 
 

 /*-------------------------------------------------------------------------
diff --git a/src/H5Lexternal.c b/src/H5Lexternal.c
index c509d34..7f59e50 100644
--- a/src/H5Lexternal.c
+++ b/src/H5Lexternal.c
@@ -222,6 +222,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
     char        *actual_file_name = NULL; /* Parent file's actual name */
     H5P_genplist_t  *fa_plist;          /* File access property list pointer */
     H5F_close_degree_t 	fc_degree = H5F_CLOSE_WEAK;  /* File close degree for target file */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t ret_value = H5I_INVALID_HID;  /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -245,6 +246,10 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
     if(NULL == (plist = H5P_object_verify(lapl_id, H5P_LINK_ACCESS)))
         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, cur_group, FALSE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Get the fapl_id set for lapl_id if any */
     if(H5P_get(plist, H5L_ACS_ELINK_FAPL_NAME, &fapl_id) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fapl for links")
@@ -282,7 +287,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
         parent_file_name = H5F_OPEN_NAME(loc.oloc->file);
 
         /* Query length of parent group name */
-        if((group_name_len = H5G_get_name(&loc, NULL, (size_t) 0, NULL, lapl_id, H5AC_ind_dxpl_id)) < 0)
+        if((group_name_len = H5G_get_name(&loc, NULL, (size_t) 0, NULL, lapl_id, dxpl_id)) < 0)
             HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to retrieve length of group name")
 
         /* Account for null terminator */
@@ -297,7 +302,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
             parent_group_name = local_group_name;
 
         /* Get parent group name */
-        if(H5G_get_name(&loc, parent_group_name, (size_t) group_name_len, NULL, lapl_id, H5AC_ind_dxpl_id) < 0)
+        if(H5G_get_name(&loc, parent_group_name, (size_t) group_name_len, NULL, lapl_id, dxpl_id) < 0)
             HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "unable to retrieve group name")
 
         /* Make callback */
@@ -328,7 +333,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
     /* target file_name is an absolute pathname: see RM for detailed description */
     if(H5_CHECK_ABSOLUTE(file_name) || H5_CHECK_ABS_PATH(file_name)) {
         /* Try opening file */
-        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id))) {
+        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id))) {
             char *ptr;
 
             H5E_clear_stack(NULL);
@@ -347,7 +352,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
     } /* end if */
     else if(H5_CHECK_ABS_DRIVE(file_name)) {
         /* Try opening file */
-        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id))) {
+        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id))) {
 
             H5E_clear_stack(NULL);
 
@@ -377,7 +382,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
                         HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't prepend prefix to filename")
 		    } /* end if */
 
-                    ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id);
+                    ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id);
                     full_name = (char *)H5MM_xfree(full_name);
                     if(ext_file != NULL)
                         break;
@@ -395,7 +400,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
         if(my_prefix) {
             if(H5L_build_name(my_prefix, temp_file_name, &full_name/*out*/) < 0)
                 HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't prepend prefix to filename")
-            if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
+            if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id)))
                 H5E_clear_stack(NULL);
             full_name = (char *)H5MM_xfree(full_name);
         } /* end if */
@@ -408,7 +413,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
         if(NULL != (extpath = H5F_EXTPATH(loc.oloc->file))) {
             if(H5L_build_name(extpath, temp_file_name, &full_name/*out*/) < 0)
                 HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't prepend prefix to filename")
-            if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
+            if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id)))
                 H5E_clear_stack(NULL);
             full_name = (char *)H5MM_xfree(full_name);
         } /* end if */
@@ -416,7 +421,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
 
     /* try the relative file_name stored in temp_file_name */
     if(ext_file == NULL) {
-        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, temp_file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
+        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, temp_file_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id)))
             H5E_clear_stack(NULL);
     } /* end if */
 
@@ -443,7 +448,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
             HGOTO_ERROR(H5E_LINK, H5E_CANTGET, FAIL, "can't prepend prefix to filename")
 
         /* Try opening with the resolved name */
-        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
+        if(NULL == (ext_file = H5F_efc_open(loc.oloc->file, full_name, intent, H5P_FILE_CREATE_DEFAULT, fapl_id, dxpl_id)))
             HGOTO_ERROR(H5E_LINK, H5E_CANTOPENFILE, FAIL, "unable to open external file, external link file name = '%s', temp_file_name = '%s'", file_name, temp_file_name)
         full_name = (char *)H5MM_xfree(full_name);
     } /* end if */
@@ -454,7 +459,7 @@ H5L_extern_traverse(const char H5_ATTR_UNUSED *link_name, hid_t cur_group,
         HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "unable to create location for file")
 
     /* Open the object referenced in the external file */
-    if((ext_obj = H5O_open_name(&root_loc, obj_name, lapl_id, FALSE)) < 0)
+    if((ext_obj = H5O_open_name(&root_loc, obj_name, lapl_id, dxpl_id, FALSE)) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open object")
 
     /* Set return value */
@@ -563,7 +568,7 @@ H5Lcreate_external(const char *file_name, const char *obj_name,
     size_t      file_name_len;          /* Length of file name string */
     size_t      norm_obj_name_len;      /* Length of normalized object name string */
     uint8_t    *p;                      /* Pointer into external link buffer */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */ 
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */ 
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -599,8 +604,8 @@ H5Lcreate_external(const char *file_name, const char *obj_name,
     HDstrncpy((char *)p, norm_obj_name, buf_size - (file_name_len + 1));       /* External link's object */
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, link_loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_LINK, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Create an external link */
     if(H5L_create_ud(&link_loc, link_name, ext_link_buf, buf_size, H5L_TYPE_EXTERNAL, lcpl_id, lapl_id, dxpl_id) < 0)
diff --git a/src/H5Lprivate.h b/src/H5Lprivate.h
index f3079bc..1c8690b 100644
--- a/src/H5Lprivate.h
+++ b/src/H5Lprivate.h
@@ -81,6 +81,8 @@ H5_DLL hid_t H5L_get_default_lcpl(void);
 H5_DLL herr_t H5L_move(H5G_loc_t *src_loc, const char *src_name,
     H5G_loc_t *dst_loc, const char *dst_name, hbool_t copy_flag,
     hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id);
+H5_DLL htri_t H5L_exists_tolerant(const H5G_loc_t *loc, const char *name, hid_t lapl_id,
+    hid_t dxpl_id);
 H5_DLL herr_t H5L_get_info(const H5G_loc_t *loc, const char *name,
     H5L_info_t *linkbuf/*out*/, hid_t lapl_id, hid_t dxpl_id);
 H5_DLL herr_t H5L_delete(H5G_loc_t *loc, const char *name, hid_t lapl_id,
diff --git a/src/H5MF.c b/src/H5MF.c
index 0f2857e..c8973e3 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -86,6 +86,7 @@ typedef struct {
 /* Allocator routines */
 static herr_t H5MF_alloc_create(H5F_t *f, hid_t dxpl_id, H5FD_mem_t type);
 static herr_t H5MF_alloc_close(H5F_t *f, hid_t dxpl_id, H5FD_mem_t type);
+static herr_t H5MF_close_delete(H5F_t *f, hid_t dxpl_id);
 
 
 /*********************/
@@ -1145,6 +1146,141 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5MF_close_shrink_eoa() */
 
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5MF_close_delete
+ *
+ * Purpose:     The coding is copied from H5MF_close() "else" statement
+ *		to this routine so it can also be called by H5MF_try_close().
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:  
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5MF_close_delete(H5F_t *f, hid_t dxpl_id)
+{
+    H5FD_mem_t type;                    /* Memory type for iteration */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(FAIL)
+#ifdef H5MF_ALLOC_DEBUG
+HDfprintf(stderr, "%s: Entering\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG */
+
+    /* check args */
+    HDassert(f);
+    HDassert(f->shared);
+
+    /* super_vers can be 0, 1, 2 */
+    /* Iterate over all the free space types that have managers and get each free list's space */
+    for(type = H5FD_MEM_DEFAULT; type < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, type)) {
+#ifdef H5MF_ALLOC_DEBUG_MORE
+HDfprintf(stderr, "%s: Check 1.0 - f->shared->fs_man[%u] = %p, f->shared->fs_addr[%u] = %a\n", FUNC, (unsigned)type, f->shared->fs_man[type], (unsigned)type, f->shared->fs_addr[type]);
+#endif /* H5MF_ALLOC_DEBUG_MORE */
+	    /* If the free space manager for this type is open, close it */
+	    if(f->shared->fs_man[type]) {
+#ifdef H5MF_ALLOC_DEBUG_MORE
+HDfprintf(stderr, "%s: Before closing free space manager\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG_MORE */
+		if(H5FS_close(f, dxpl_id, f->shared->fs_man[type]) < 0)
+		    HGOTO_ERROR(H5E_FSPACE, H5E_CANTRELEASE, FAIL, "can't release free space info")
+		f->shared->fs_man[type] = NULL;
+		f->shared->fs_state[type] = H5F_FS_STATE_CLOSED;
+	    } /* end if */
+#ifdef H5MF_ALLOC_DEBUG_MORE
+HDfprintf(stderr, "%s: Check 2.0 - f->shared->fs_man[%u] = %p, f->shared->fs_addr[%u] = %a\n", FUNC, (unsigned)type, f->shared->fs_man[type], (unsigned)type, f->shared->fs_addr[type]);
+#endif /* H5MF_ALLOC_DEBUG_MORE */
+
+	    /* If there is free space manager info for this type, delete it */
+	    if(H5F_addr_defined(f->shared->fs_addr[type])) {
+		haddr_t tmp_fs_addr;            /* Temporary holder for free space manager address */
+
+		/* Put address into temporary variable and reset it */
+		/* (Avoids loopback in file space freeing routine) */
+		tmp_fs_addr = f->shared->fs_addr[type];
+		f->shared->fs_addr[type] = HADDR_UNDEF;
+
+		/* Shift to "deleting" state, to make certain we don't track any
+		 *  file space freed as a result of deleting the free space manager.
+		 */
+		f->shared->fs_state[type] = H5F_FS_STATE_DELETING;
+
+#ifdef H5MF_ALLOC_DEBUG_MORE
+HDfprintf(stderr, "%s: Before deleting free space manager\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG_MORE */
+
+		/* Delete free space manager for this type */
+		if(H5FS_delete(f, dxpl_id, tmp_fs_addr) < 0)
+		    HGOTO_ERROR(H5E_FSPACE, H5E_CANTFREE, FAIL, "can't delete free space manager")
+
+		/* Shift [back] to closed state */
+		HDassert(f->shared->fs_state[type] == H5F_FS_STATE_DELETING);
+		f->shared->fs_state[type] = H5F_FS_STATE_CLOSED;
+
+		/* Sanity check that the free space manager for this type wasn't started up again */
+		HDassert(!H5F_addr_defined(f->shared->fs_addr[type]));
+	    } /* end if */
+    } /* end for */
+
+done:
+#ifdef H5MF_ALLOC_DEBUG
+HDfprintf(stderr, "%s: Leaving\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG */
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5MF_close_delete() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5MF_try_close
+ *
+ * Purpose:     This is called by H5Fformat_convert() to close and delete
+ *		free-space managers when downgrading persistent free-space
+ *		to non-persistent.
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:  
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5MF_try_close(H5F_t *f, hid_t dxpl_id)
+{
+    H5P_genplist_t *dxpl = NULL;        /* DXPL for setting ring */
+    H5AC_ring_t orig_ring = H5AC_RING_INV;      /* Original ring value */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(FAIL)
+#ifdef H5MF_ALLOC_DEBUG
+HDfprintf(stderr, "%s: Entering\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG */
+
+    /* check args */
+    HDassert(f);
+
+    /* Set the ring type in the DXPL */
+    if(H5AC_set_ring(dxpl_id, H5AC_RING_FSM, &dxpl, &orig_ring) < 0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTSET, FAIL, "unable to set ring value")
+
+    if(H5MF_close_delete(f, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTSET, FAIL, "unable to close delete free-space managers")
+
+done:
+    /* Reset the ring in the DXPL */
+    if(H5AC_reset_ring(dxpl, orig_ring) < 0)
+        HDONE_ERROR(H5E_RESOURCE, H5E_CANTSET, FAIL, "unable to set property value")
+
+#ifdef H5MF_ALLOC_DEBUG
+HDfprintf(stderr, "%s: Leaving\n", FUNC);
+#endif /* H5MF_ALLOC_DEBUG */
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5MF_try_close() */
+
 

 /*-------------------------------------------------------------------------
  * Function:    H5MF_close
@@ -1237,7 +1373,7 @@ HDfprintf(stderr, "%s: Entering\n", FUNC);
 
 	/* Write free-space manager info message to superblock extension object header */
 	/* Create the superblock extension object header in advance if needed */
-	if(H5F_super_ext_write_msg(f, dxpl_id, &fsinfo, H5O_FSINFO_ID, TRUE) < 0)
+	if(H5F_super_ext_write_msg(f, dxpl_id, H5O_FSINFO_ID, &fsinfo, TRUE) < 0)
 	    HGOTO_ERROR(H5E_RESOURCE, H5E_WRITEERROR, FAIL, "error in writing message to superblock extension")
 
 	/* Re-allocate free-space manager header and/or section info header */
@@ -1272,7 +1408,7 @@ HDfprintf(stderr, "%s: Entering\n", FUNC);
 
 	/* Update the free space manager info message in superblock extension object header */
 	if(update)
-            if(H5F_super_ext_write_msg(f, dxpl_id, &fsinfo, H5O_FSINFO_ID, FALSE) < 0)
+	    if(H5F_super_ext_write_msg(f, dxpl_id, H5O_FSINFO_ID, &fsinfo, FALSE) < 0)
 	        HGOTO_ERROR(H5E_RESOURCE, H5E_WRITEERROR, FAIL, "error in writing message to superblock extension")
 
 	/* Final close of free-space managers */
@@ -1287,55 +1423,10 @@ HDfprintf(stderr, "%s: Entering\n", FUNC);
 	} /* end for */
     } /* end if */
     else {  /* super_vers can be 0, 1, 2 */
-	/* Iterate over all the free space types that have managers and get each free list's space */
-	for(type = H5FD_MEM_DEFAULT; type < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, type)) {
-#ifdef H5MF_ALLOC_DEBUG_MORE
-HDfprintf(stderr, "%s: Check 1.0 - f->shared->fs_man[%u] = %p, f->shared->fs_addr[%u] = %a\n", FUNC, (unsigned)type, f->shared->fs_man[type], (unsigned)type, f->shared->fs_addr[type]);
-#endif /* H5MF_ALLOC_DEBUG_MORE */
-	    /* If the free space manager for this type is open, close it */
-	    if(f->shared->fs_man[type]) {
-#ifdef H5MF_ALLOC_DEBUG_MORE
-HDfprintf(stderr, "%s: Before closing free space manager\n", FUNC);
-#endif /* H5MF_ALLOC_DEBUG_MORE */
-		if(H5FS_close(f, dxpl_id, f->shared->fs_man[type]) < 0)
-		    HGOTO_ERROR(H5E_FSPACE, H5E_CANTRELEASE, FAIL, "can't release free space info")
-		f->shared->fs_man[type] = NULL;
-		f->shared->fs_state[type] = H5F_FS_STATE_CLOSED;
-	    } /* end if */
-#ifdef H5MF_ALLOC_DEBUG_MORE
-HDfprintf(stderr, "%s: Check 2.0 - f->shared->fs_man[%u] = %p, f->shared->fs_addr[%u] = %a\n", FUNC, (unsigned)type, f->shared->fs_man[type], (unsigned)type, f->shared->fs_addr[type]);
-#endif /* H5MF_ALLOC_DEBUG_MORE */
 
-	    /* If there is free space manager info for this type, delete it */
-	    if(H5F_addr_defined(f->shared->fs_addr[type])) {
-		haddr_t tmp_fs_addr;            /* Temporary holder for free space manager address */
-
-		/* Put address into temporary variable and reset it */
-		/* (Avoids loopback in file space freeing routine) */
-		tmp_fs_addr = f->shared->fs_addr[type];
-		f->shared->fs_addr[type] = HADDR_UNDEF;
-
-		/* Shift to "deleting" state, to make certain we don't track any
-		 *  file space freed as a result of deleting the free space manager.
-		 */
-		f->shared->fs_state[type] = H5F_FS_STATE_DELETING;
-
-#ifdef H5MF_ALLOC_DEBUG_MORE
-HDfprintf(stderr, "%s: Before deleting free space manager\n", FUNC);
-#endif /* H5MF_ALLOC_DEBUG_MORE */
-
-		/* Delete free space manager for this type */
-		if(H5FS_delete(f, dxpl_id, tmp_fs_addr) < 0)
-		    HGOTO_ERROR(H5E_FSPACE, H5E_CANTFREE, FAIL, "can't delete free space manager")
-
-		/* Shift [back] to closed state */
-		HDassert(f->shared->fs_state[type] == H5F_FS_STATE_DELETING);
-		f->shared->fs_state[type] = H5F_FS_STATE_CLOSED;
+	if(H5MF_close_delete(f, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't initialize file free space")
 
-		/* Sanity check that the free space manager for this type wasn't started up again */
-		HDassert(!H5F_addr_defined(f->shared->fs_addr[type]));
-	    } /* end if */
-	} /* end for */
     } /* end else */
 
     /* Free the space in aggregators (again) */
diff --git a/src/H5MFprivate.h b/src/H5MFprivate.h
index 024cc91..22ed308 100644
--- a/src/H5MFprivate.h
+++ b/src/H5MFprivate.h
@@ -21,8 +21,6 @@
  *
  * Purpose:             Private header file for file memory management.
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 #ifndef _H5MFprivate_H
@@ -36,13 +34,6 @@
 /* Library Private Macros */
 /**************************/
 
-/*
- * Feature: Define H5MF_DEBUG on the compiler command line if you want to
- *	    see diagnostics from this layer.
- */
-#ifdef NDEBUG
-#  undef H5MF_DEBUG
-#endif
 
 /****************************/
 /* Library Private Typedefs */
@@ -63,6 +54,7 @@ H5_DLL herr_t H5MF_init_merge_flags(H5F_t *f);
 H5_DLL herr_t H5MF_get_freespace(H5F_t *f, hid_t dxpl_id, hsize_t *tot_space,
     hsize_t *meta_size);
 H5_DLL herr_t H5MF_close(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5MF_try_close(H5F_t *f, hid_t dxpl_id);
 
 /* File space allocation routines */
 H5_DLL haddr_t H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
diff --git a/src/H5MFsection.c b/src/H5MFsection.c
index f333356..e5a0cf0 100644
--- a/src/H5MFsection.c
+++ b/src/H5MFsection.c
@@ -66,7 +66,7 @@ static htri_t H5MF_sect_simple_can_merge(const H5FS_section_info_t *sect1,
 static herr_t H5MF_sect_simple_merge(H5FS_section_info_t *sect1,
     H5FS_section_info_t *sect2, void *udata);
 static herr_t H5MF_sect_simple_valid(const H5FS_section_class_t *cls,
-    const H5FS_section_info_t *sect);
+    const H5FS_section_info_t *sect, hid_t dxpl_id);
 static H5FS_section_info_t *H5MF_sect_simple_split(H5FS_section_info_t *sect,
     hsize_t frag_size);
 
@@ -488,7 +488,7 @@ H5MF_sect_simple_valid(const H5FS_section_class_t H5_ATTR_UNUSED *cls,
 #ifdef NDEBUG
     H5_ATTR_UNUSED
 #endif /* NDEBUG */
-    *_sect)
+    *_sect, hid_t H5_ATTR_UNUSED dxpl_id)
 {
 #ifndef NDEBUG
     const H5MF_free_section_t *sect = (const H5MF_free_section_t *)_sect;   /* File free section */
diff --git a/src/H5MM.c b/src/H5MM.c
index 09e6461..5c2a731 100644
--- a/src/H5MM.c
+++ b/src/H5MM.c
@@ -125,10 +125,10 @@ static size_t H5MM_peak_alloc_blocks_count_s = 0;
  * Function:    H5MM__is_our_block
  *
  * Purpose:     Try to determine if a memory buffer has been allocated through
- *		the H5MM* interface, instead of the system's malloc() routines.
+ *              the H5MM* interface, instead of the system's malloc() routines.
  *
- * Return:	Success:    TRUE/FALSE
- *		Failure:    (Can't fail)
+ * Return:      Success:    TRUE/FALSE
+ *              Failure:    (Can't fail)
  *
  * Programmer:  Quincey Koziol
  *              Dec 30 2015
@@ -149,7 +149,7 @@ H5MM__is_our_block(void *mem)
  *
  * Purpose:     Check a block wrapper around a buffer to validate it.
  *
- * Return:	N/A (void)
+ * Return:      N/A (void)
  *
  * Programmer:  Quincey Koziol
  *              Dec 30 2015
@@ -173,9 +173,9 @@ H5MM__sanity_check_block(const H5MM_block_t *block)
  * Function:    H5MM__sanity_check
  *
  * Purpose:     Check a buffer to validate it (just calls
- *		H5MM__sanity_check_block after finding block for buffer)
+ *              H5MM__sanity_check_block after finding block for buffer)
  *
- * Return:	N/A (void)
+ * Return:      N/A (void)
  *
  * Programmer:  Quincey Koziol
  *              Dec 30 2015
@@ -196,7 +196,7 @@ H5MM__sanity_check(void *mem)
  *
  * Purpose:     Sanity check all current memory allocations.
  *
- * Return:	N/A (void)
+ * Return:      N/A (void)
  *
  * Programmer:  Quincey Koziol
  *              Jan  5 2016
@@ -206,7 +206,7 @@ H5MM__sanity_check(void *mem)
 void
 H5MM_sanity_check_all(void)
 {
-    H5MM_block_t *curr;
+    H5MM_block_t *curr = NULL;
 
     curr = H5MM_block_head_s.next;
     while(curr != &H5MM_block_head_s) {
@@ -221,7 +221,7 @@ H5MM_sanity_check_all(void)
  *
  * Purpose:     Final sanity checks on memory allocation.
  *
- * Return:	N/A (void)
+ * Return:      N/A (void)
  *
  * Programmer:  Quincey Koziol
  *              Jan  1 2016
@@ -257,8 +257,8 @@ H5MM_final_sanity_check(void)
  *              considered an error condition since allocations of zero
  *              bytes usually indicate problems.
  *  
- * Return:  Success:    Pointer new memory
- *          Failure:	NULL
+ * Return:      Success:    Pointer to new memory
+ *              Failure:    NULL
  *
  * Programmer:  Quincey Koziol
  *              Nov  8 2003
@@ -268,7 +268,7 @@ H5MM_final_sanity_check(void)
 void *
 H5MM_malloc(size_t size)
 {
-    void *ret_value;
+    void *ret_value = NULL;
 
     HDassert(size);
 
@@ -346,8 +346,8 @@ H5MM_malloc(size_t size)
  *              bytes usually indicate problems.
  *
  *
- * Return:  Success:    Pointer new memory
- *          Failure:	NULL
+ * Return:      Success:    Pointer to new memory
+ *              Failure:    NULL
  *
  * Programmer:	Quincey Koziol
  *              Nov  8 2003
@@ -357,7 +357,7 @@ H5MM_malloc(size_t size)
 void *
 H5MM_calloc(size_t size)
 {
-    void *ret_value;
+    void *ret_value = NULL;
 
     HDassert(size);
 
@@ -392,8 +392,9 @@ H5MM_calloc(size_t size)
  *              Note that the (NULL, 0) combination is undefined behavior
  *              in the C standard.
  *
- * Return:  Success:    Ptr to new memory if size > 0, NULL if size is zero
- *          Failure:    NULL (input buffer is unchanged on failure)
+ * Return:      Success:    Ptr to new memory if size > 0
+ *                          NULL if size is zero
+ *              Failure:    NULL (input buffer is unchanged on failure)
  *
  * Programmer:  Robb Matzke
  *              Jul 10 1997
@@ -403,7 +404,7 @@ H5MM_calloc(size_t size)
 void *
 H5MM_realloc(void *mem, size_t size)
 {
-    void *ret_value;
+    void *ret_value = NULL;
 
     /* Use FUNC_ENTER_NOAPI_NOINIT_NOERR here to avoid performance issues */
     FUNC_ENTER_NOAPI_NOINIT_NOERR
@@ -458,7 +459,6 @@ H5MM_realloc(void *mem, size_t size)
  *              Failure:    abort()
  *
  * Programmer:  Robb Matzke
- *              matzke at llnl.gov
  *              Jul 10 1997
  *-------------------------------------------------------------------------
  */
@@ -490,17 +490,16 @@ done:
  *              an error will be raised.
  *
  * Return:      Success:    Pointer to a new string
- *              Failure:    abort()
+ *              Failure:    NULL
  *
  * Programmer:  Robb Matzke
- *              matzke at llnl.gov
  *              Jul 10 1997
  *-------------------------------------------------------------------------
  */
 char *
 H5MM_strdup(const char *s)
 {
-    char *ret_value;
+    char *ret_value = NULL;
 
     FUNC_ENTER_NOAPI(NULL)
 
@@ -528,7 +527,6 @@ done:
  *              Failure:    never fails
  *
  * Programmer:  Robb Matzke
- *              matzke at llnl.gov
  *              Jul 10 1997
  *
  *-------------------------------------------------------------------------
diff --git a/src/H5O.c b/src/H5O.c
index db667d8..3dda713 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -112,9 +112,9 @@ const H5O_msg_class_t *const H5O_msg_class_g[] = {
     H5O_MSG_EFL,		/*0x0007 Data storage -- external data files */
     H5O_MSG_LAYOUT,		/*0x0008 Data Layout			*/
 #ifdef H5O_ENABLE_BOGUS
-    H5O_MSG_BOGUS,		/*0x0009 "Bogus" (for testing)		*/
+    H5O_MSG_BOGUS_VALID,	/*0x0009 "Bogus valid" (for testing)	*/
 #else /* H5O_ENABLE_BOGUS */
-    NULL,			/*0x0009 "Bogus" (for testing)		*/
+    NULL,			/*0x0009 "Bogus valid" (for testing)	*/
 #endif /* H5O_ENABLE_BOGUS */
     H5O_MSG_GINFO,		/*0x000A Group information		*/
     H5O_MSG_PLINE,		/*0x000B Data storage -- filter pipeline */
@@ -131,6 +131,11 @@ const H5O_msg_class_t *const H5O_msg_class_g[] = {
     H5O_MSG_REFCOUNT,		/*0x0016 Object's ref. count		*/
     H5O_MSG_FSINFO,		/*0x0017 Free-space manager info message */
     H5O_MSG_UNKNOWN,		/*0x0018 Placeholder for unknown message */
+#ifdef H5O_ENABLE_BOGUS
+    H5O_MSG_BOGUS_INVALID, 	/*0x0019 "Bogus invalid" (for testing) 	*/
+#else /* H5O_ENABLE_BOGUS */
+    NULL,                      /*0x0019 "Bogus invalid" (for testing)  	*/
+#endif /* H5O_ENABLE_BOGUS */
 };
 
 /* Declare a free list to manage the H5O_t struct */
@@ -231,6 +236,7 @@ hid_t
 H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id)
 {
     H5G_loc_t	loc;
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t       ret_value = FAIL;
 
     FUNC_ENTER_API(FAIL)
@@ -242,8 +248,12 @@ H5Oopen(hid_t loc_id, const char *name, hid_t lapl_id)
     if(!name || !*name)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Open the object */
-    if((ret_value = H5O_open_name(&loc, name, lapl_id, TRUE)) < 0)
+    if((ret_value = H5O_open_name(&loc, name, lapl_id, dxpl_id, TRUE)) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open object")
 
 done:
@@ -282,7 +292,7 @@ H5Oopen_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     H5G_loc_t   obj_loc;                /* Location used to open group */
     H5G_name_t  obj_path;            	/* Opened object group hier. path */
     H5O_loc_t   obj_oloc;            	/* Opened object object location */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hbool_t     loc_found = FALSE;      /* Entry at 'name' found */
     hid_t       ret_value = FAIL;
 
@@ -300,8 +310,8 @@ H5Oopen_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     obj_loc.oloc = &obj_oloc;
@@ -390,7 +400,7 @@ H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
     H5G_name_reset(obj_loc.path);       /* objects opened through this routine don't have a path name */
 
     /* Open the object */
-    if((ret_value = H5O_open_by_loc(&obj_loc, lapl_id, H5AC_ind_dxpl_id, TRUE)) < 0)
+    if((ret_value = H5O_open_by_loc(&obj_loc, lapl_id, H5AC_ind_read_dxpl_id, TRUE)) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open object")
 
 done:
@@ -426,7 +436,7 @@ H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id,
 {
     H5G_loc_t	new_loc;
     H5G_loc_t	obj_loc;
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;       /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -450,8 +460,8 @@ H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id,
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, obj_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Link to the object */
     if(H5L_link(&new_loc, new_name, &obj_loc, lcpl_id, lapl_id, dxpl_id) < 0)
@@ -495,7 +505,7 @@ H5Oincr_refcount(hid_t object_id)
     if((oloc = H5O_get_loc(object_id)) == NULL)
         HGOTO_ERROR(H5E_ATOM, H5E_BADVALUE, FAIL, "unable to get object location from ID")
 
-    if(H5O_link(oloc, 1, H5AC_dxpl_id) < 0)
+    if(H5O_link(oloc, 1, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "modifying object link count failed")
 
 done:
@@ -536,7 +546,7 @@ H5Odecr_refcount(hid_t object_id)
     if((oloc = H5O_get_loc(object_id)) == NULL)
         HGOTO_ERROR(H5E_ATOM, H5E_BADVALUE, FAIL, "unable to get object location from ID")
 
-    if(H5O_link(oloc, -1, H5AC_dxpl_id) < 0)
+    if(H5O_link(oloc, -1, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "modifying object link count failed")
 
 done:
@@ -561,7 +571,7 @@ htri_t
 H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Location info */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     htri_t      ret_value = FAIL;       /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -574,8 +584,8 @@ H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Check if the object exists */
     if((ret_value = H5G_loc_exists(&loc, name, lapl_id, dxpl_id)) < 0)
@@ -615,7 +625,7 @@ H5Oget_info(hid_t loc_id, H5O_info_t *oinfo)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
 
     /* Retrieve the object's information */
-    if(H5G_loc_info(&loc, ".", TRUE, oinfo/*out*/, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id) < 0)
+    if(H5G_loc_info(&loc, ".", TRUE, oinfo/*out*/, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "object not found")
 
 done:
@@ -640,7 +650,7 @@ herr_t
 H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo, hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Location of group */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -655,8 +665,8 @@ H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo, hid_t lap
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Retrieve the object's information */
     if(H5G_loc_info(&loc, name, TRUE, oinfo/*out*/, lapl_id, dxpl_id) < 0)
@@ -690,7 +700,7 @@ H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     H5G_name_t  obj_path;            	/* Opened object group hier. path */
     H5O_loc_t   obj_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Entry at 'name' found */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -710,8 +720,8 @@ H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no info struct")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up opened group location to fill in */
     obj_loc.oloc = &obj_oloc;
@@ -724,7 +734,7 @@ H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     loc_found = TRUE;
 
     /* Retrieve the object's information */
-    if(H5O_get_info(obj_loc.oloc, H5AC_ind_dxpl_id, TRUE, oinfo) < 0)
+    if(H5O_get_info(obj_loc.oloc, dxpl_id, TRUE, oinfo) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't retrieve object info")
 
 done:
@@ -767,7 +777,7 @@ H5Oset_comment(hid_t obj_id, const char *comment)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
     /* (Re)set the object's comment */
-    if(H5G_loc_set_comment(&loc, ".", comment, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id) < 0)
+    if(H5G_loc_set_comment(&loc, ".", comment, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "object not found")
 
 done:
@@ -797,7 +807,7 @@ H5Oset_comment_by_name(hid_t loc_id, const char *name, const char *comment,
     hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Location of group */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -810,8 +820,8 @@ H5Oset_comment_by_name(hid_t loc_id, const char *name, const char *comment,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* (Re)set the object's comment */
     if(H5G_loc_set_comment(&loc, name, comment, lapl_id, dxpl_id) < 0)
@@ -852,7 +862,7 @@ H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
 
     /* Retrieve the object's comment */
-    if((ret_value = H5G_loc_get_comment(&loc, ".", comment/*out*/, bufsize, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5G_loc_get_comment(&loc, ".", comment/*out*/, bufsize, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "object not found")
 
 done:
@@ -881,7 +891,7 @@ H5Oget_comment_by_name(hid_t loc_id, const char *name, char *comment, size_t buf
     hid_t lapl_id)
 {
     H5G_loc_t	loc;                    /* Location of group */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     ssize_t     ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -894,8 +904,8 @@ H5Oget_comment_by_name(hid_t loc_id, const char *name, char *comment, size_t buf
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Retrieve the object's comment */
     if((ret_value = H5G_loc_get_comment(&loc, name, comment/*out*/, bufsize, lapl_id, dxpl_id)) < 0)
@@ -956,7 +966,7 @@ H5Ovisit(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no callback operator specified")
 
     /* Call internal object visitation routine */
-    if((ret_value = H5O_visit(obj_id, ".", idx_type, order, op, op_data, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id)) < 0)
+    if((ret_value = H5O_visit(obj_id, ".", idx_type, order, op, op_data, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id)) < 0)
 	HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "object visitation failed")
 
 done:
@@ -1000,7 +1010,7 @@ herr_t
 H5Ovisit_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
     H5_iter_order_t order, H5O_iterate_t op, void *op_data, hid_t lapl_id)
 {
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value;              /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -1018,8 +1028,8 @@ H5Ovisit_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no callback operator specified")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&lapl_id, H5P_LINK_ACCESS, H5P_LINK_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&lapl_id, H5P_CLS_LACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Call internal object visitation routine */
     if((ret_value = H5O_visit(loc_id, obj_name, idx_type, order, op, op_data, lapl_id, dxpl_id)) < 0)
@@ -1465,13 +1475,12 @@ done:
  *-------------------------------------------------------------------------
  */
 hid_t
-H5O_open_name(H5G_loc_t *loc, const char *name, hid_t lapl_id, hbool_t app_ref)
+H5O_open_name(H5G_loc_t *loc, const char *name, hid_t lapl_id, hid_t dxpl_id, hbool_t app_ref)
 {
     H5G_loc_t   obj_loc;                /* Location used to open group */
     H5G_name_t  obj_path;            	/* Opened object group hier. path */
     H5O_loc_t   obj_oloc;            	/* Opened object object location */
     hbool_t     loc_found = FALSE;      /* Entry at 'name' found */
-    hid_t       dxpl_id = H5AC_ind_dxpl_id; /* dxpl used by library */
     hid_t       ret_value = FAIL;
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -2257,9 +2266,10 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned mesg_flags)
+H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned bogus_id, unsigned mesg_flags)
 {
     size_t	idx;                /* Local index variable */
+    H5O_msg_class_t *type;	    /* Message class type */
     herr_t ret_value = SUCCEED;     /* Return value */
 
     FUNC_ENTER_NOAPI(FAIL)
@@ -2269,7 +2279,8 @@ H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned mesg_flags)
 
     /* Look for existing message */
     for(idx = 0; idx < oh->nmesgs; idx++)
-	if(H5O_MSG_BOGUS == oh->mesg[idx].type)
+	if(H5O_MSG_BOGUS_VALID == oh->mesg[idx].type || 
+	   H5O_MSG_BOGUS_INVALID == oh->mesg[idx].type)
             break;
 
     /* Create a new message */
@@ -2283,8 +2294,15 @@ H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned mesg_flags)
         /* Update the native value */
         bogus->u = H5O_BOGUS_VALUE;
 
+	if(bogus_id == H5O_BOGUS_VALID_ID)
+	    type = H5O_MSG_BOGUS_VALID;
+	else if(bogus_id == H5O_BOGUS_INVALID_ID)
+	    type = H5O_MSG_BOGUS_INVALID;
+	else
+	    HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "invalid ID for 'bogus' message")
+
         /* Allocate space in the object header for bogus message */
-	if(H5O_msg_alloc(f, dxpl_id, oh, H5O_MSG_BOGUS, &mesg_flags, bogus, &idx) < 0)
+	if(H5O_msg_alloc(f, dxpl_id, oh, type, &mesg_flags, bogus, &idx) < 0)
 	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to allocate space for 'bogus' message")
 
         /* Point to "bogus" information (take it over) */
diff --git a/src/H5Obogus.c b/src/H5Obogus.c
index de205f6..d1085c8 100644
--- a/src/H5Obogus.c
+++ b/src/H5Obogus.c
@@ -47,9 +47,9 @@ static herr_t H5O_bogus_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *
 			     int indent, int fwidth);
 
 /* This message derives from H5O message class */
-const H5O_msg_class_t H5O_MSG_BOGUS[1] = {{
-    H5O_BOGUS_ID,            	/*message id number             */
-    "bogus",                 	/*message name for debugging    */
+const H5O_msg_class_t H5O_MSG_BOGUS_VALID[1] = {{
+    H5O_BOGUS_VALID_ID,		/*message id number             */
+    "bogus valid",             	/*message name for debugging    */
     0,     	                /*native message size           */
     0,				/* messages are sharable?       */
     H5O_bogus_decode,        	/*decode message                */
@@ -70,6 +70,30 @@ const H5O_msg_class_t H5O_MSG_BOGUS[1] = {{
     H5O_bogus_debug         	/*debug the message             */
 }};
 
+/* This message derives from H5O message class */
+const H5O_msg_class_t H5O_MSG_BOGUS_INVALID[1] = {{
+    H5O_BOGUS_INVALID_ID, 	/*message id number             */
+    "bogus invalid",          	/*message name for debugging    */
+    0,                          /*native message size           */
+    0,                          /* messages are sharable?       */
+    H5O_bogus_decode,           /*decode message                */
+    H5O_bogus_encode,           /*encode message                */
+    NULL,                       /*copy the native value         */
+    H5O_bogus_size,             /*raw message size              */
+    NULL,                       /*free internal memory          */
+    NULL,                       /*free method                   */
+    NULL,                       /* file delete method           */
+    NULL,                       /* link method                  */
+    NULL,                       /*set share method              */
+    NULL,                       /*can share method              */
+    NULL,                       /* pre copy native value to file */
+    NULL,                       /* copy native value to file    */
+    NULL,                       /* post copy native value to file    */
+    NULL,                       /* get creation index           */
+    NULL,                       /* set creation index           */
+    H5O_bogus_debug             /*debug the message             */
+}};
+
 

 /*-------------------------------------------------------------------------
  * Function:    H5O_bogus_decode
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index 28de0eb..831b08a 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -1095,7 +1095,7 @@ H5O__cache_chk_notify(H5AC_notify_action_t action, void *_thing)
                 if(chk_proxy->cont_chunkno == 0)
                     parent = chk_proxy->oh;
                 else {
-                    if(NULL == (cont_chk_proxy = H5O_chunk_protect(chk_proxy->f, H5AC_ind_dxpl_id, chk_proxy->oh, chk_proxy->cont_chunkno)))
+                    if(NULL == (cont_chk_proxy = H5O_chunk_protect(chk_proxy->f, H5AC_ind_read_dxpl_id, chk_proxy->oh, chk_proxy->cont_chunkno)))
                         HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header chunk")
                     parent = cont_chk_proxy;
                 } /* end else */
@@ -1122,7 +1122,7 @@ H5O__cache_chk_notify(H5AC_notify_action_t action, void *_thing)
 
                 /* Add flush dependency on object header proxy, if proxy exists */
                 if(chk_proxy->oh->proxy_present)
-                    if(H5O__proxy_depend(chk_proxy->f, H5AC_ind_dxpl_id, chk_proxy->oh, chk_proxy) < 0)
+                    if(H5O__proxy_depend(chk_proxy->f, H5AC_ind_read_dxpl_id, chk_proxy->oh, chk_proxy) < 0)
                         HGOTO_ERROR(H5E_OHDR, H5E_CANTDEPEND, FAIL, "can't create flush dependency on object header proxy")
 
 	    case H5AC_NOTIFY_ACTION_AFTER_FLUSH:
@@ -1151,7 +1151,7 @@ H5O__cache_chk_notify(H5AC_notify_action_t action, void *_thing)
 
 done:
     if(cont_chk_proxy)
-        if(H5O_chunk_unprotect(chk_proxy->f, H5AC_ind_dxpl_id, cont_chk_proxy, FALSE) < 0)
+        if(H5O_chunk_unprotect(chk_proxy->f, H5AC_ind_read_dxpl_id, cont_chk_proxy, FALSE) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to unprotect object header chunk")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1419,10 +1419,6 @@ H5O__chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image
         else
             id = *chunk_image++;
 
-        /* Check for unknown message ID getting encoded in file */
-        if(id >= H5O_UNKNOWN_ID)
-            HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "'unknown' message ID encoded in file?!?")
-
         /* Message size */
         UINT16DECODE(chunk_image, mesg_size);
         HDassert(mesg_size == H5O_ALIGN_OH(oh, mesg_size));
@@ -1492,8 +1488,13 @@ H5O__chunk_deserialize(H5O_t *oh, haddr_t addr, size_t len, const uint8_t *image
 
             /* Point unknown messages at 'unknown' message class */
             /* (Usually from future versions of the library) */
-            if(id >= NELMTS(H5O_msg_class_g) || NULL == H5O_msg_class_g[id]) {
-                H5O_unknown_t *unknown;     /* Pointer to "unknown" message info */
+	    if(id >= H5O_UNKNOWN_ID ||
+#ifdef H5O_ENABLE_BOGUS
+	       id == H5O_BOGUS_VALID_ID ||
+#endif
+	       NULL == H5O_msg_class_g[id]) {
+
+		H5O_unknown_t *unknown;     /* Pointer to "unknown" message info */
 
                 /* Allocate "unknown" message info */
                 if(NULL == (unknown = H5FL_MALLOC(H5O_unknown_t)))
diff --git a/src/H5Ocopy.c b/src/H5Ocopy.c
index 97ed056..c69d2c7 100644
--- a/src/H5Ocopy.c
+++ b/src/H5Ocopy.c
@@ -213,10 +213,11 @@ H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     /* for opening the destination object */
     H5G_name_t  src_path;               /* Opened source object hier. path */
     H5O_loc_t   src_oloc;               /* Opened source object object location */
+    htri_t      dst_exists;             /* Does destination name exist already? */
     hbool_t     loc_found = FALSE;      /* Location at 'name' found */
     hbool_t     obj_open = FALSE;       /* Entry at 'name' found */
-
-    herr_t      ret_value = SUCCEED;        /* Return value */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
+    herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
     H5TRACE6("e", "i*si*sii", src_loc_id, src_name, dst_loc_id, dst_name,
@@ -233,22 +234,10 @@ H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination name specified")
 
     /* check if destination name already exists */
-    {
-        H5G_name_t  tmp_path;
-        H5O_loc_t   tmp_oloc;
-        H5G_loc_t   tmp_loc;
-
-        /* Set up group location */
-        tmp_loc.oloc = &tmp_oloc;
-        tmp_loc.path = &tmp_path;
-        H5G_loc_reset(&tmp_loc);
-
-        /* Check if object already exists in destination */
-        if(H5G_loc_find(&dst_loc, dst_name, &tmp_loc, H5P_DEFAULT, H5AC_ind_dxpl_id) >= 0) {
-            H5G_name_free(&tmp_path);
-            HGOTO_ERROR(H5E_SYM, H5E_EXISTS, FAIL, "destination object already exists")
-        } /* end if */
-    }
+    if((dst_exists = H5L_exists_tolerant(&dst_loc, dst_name, H5P_DEFAULT, dxpl_id)) < 0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "unable to check if destination name exists")
+    if(TRUE == dst_exists)
+        HGOTO_ERROR(H5E_OHDR, H5E_EXISTS, FAIL, "destination object already exists")
 
     /* Set up opened group location to fill in */
     src_loc.oloc = &src_oloc;
@@ -256,7 +245,7 @@ H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
     H5G_loc_reset(&src_loc);
 
     /* Find the source object to copy */
-    if(H5G_loc_find(&loc, src_name, &src_loc/*out*/, H5P_DEFAULT, H5AC_ind_dxpl_id) < 0)
+    if(H5G_loc_find(&loc, src_name, &src_loc/*out*/, H5P_DEFAULT, dxpl_id) < 0)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "source object not found")
     loc_found = TRUE;
 
@@ -282,7 +271,7 @@ H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not object copy property list")
 
     /* Do the actual copying of the object */
-    if(H5O_copy_obj(&src_loc, &dst_loc, dst_name, ocpypl_id, lcpl_id, H5AC_dxpl_id) < 0)
+    if(H5O_copy_obj(&src_loc, &dst_loc, dst_name, ocpypl_id, lcpl_id, dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
 
 done:
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index ebcb5d3..745d027 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -527,7 +527,7 @@ H5O_fill_copy(const void *_src, void *_dst)
             H5T_path_t *tpath;      /* Conversion information */
 
             /* Set up type conversion function */
-            if(NULL == (tpath = H5T_path_find(src->type, dst->type, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+            if(NULL == (tpath = H5T_path_find(src->type, dst->type, NULL, NULL, H5AC_noio_dxpl_id, FALSE)))
                 HGOTO_ERROR(H5E_OHDR, H5E_UNSUPPORTED, NULL, "unable to convert between src and dst data types")
 
             /* If necessary, convert fill value datatypes (which copies VL components, etc.) */
@@ -555,7 +555,7 @@ H5O_fill_copy(const void *_src, void *_dst)
                 } /* end if */
 
                 /* Convert fill value */
-                if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, dst->buf, bkg_buf, H5AC_ind_dxpl_id) < 0) {
+                if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, dst->buf, bkg_buf, H5AC_noio_dxpl_id) < 0) {
                     H5I_dec_ref(src_id);
                     H5I_dec_ref(dst_id);
                     if(bkg_buf)
@@ -709,7 +709,7 @@ H5O_fill_reset_dyn(H5O_fill_t *fill)
                 HGOTO_ERROR(H5E_OHDR, H5E_CANTCREATE, FAIL, "can't create scalar dataspace")
 
             /* Reclaim any variable length components of the fill value */
-            if(H5D_vlen_reclaim(fill_type_id, fill_space, H5P_DATASET_XFER_DEFAULT, fill->buf) < 0) {
+            if(H5D_vlen_reclaim(fill_type_id, fill_space, H5AC_noio_dxpl_id, fill->buf) < 0) {
                 H5S_close(fill_space);
                 HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "unable to reclaim variable-length fill value data")
             } /* end if */
diff --git a/src/H5Oflush.c b/src/H5Oflush.c
index 00fa937..3fdc365 100644
--- a/src/H5Oflush.c
+++ b/src/H5Oflush.c
@@ -81,19 +81,19 @@ H5Oflush(hid_t obj_id)
 
     /* Get the object pointer */
     if(NULL == (obj_ptr = H5I_object(obj_id)))
-	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier")
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid object identifier")
 
     /* Get the object class */
-    if(NULL == (obj_class = H5O_obj_class(oloc, H5AC_dxpl_id)))
-	HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to determine object class")
+    if(NULL == (obj_class = H5O_obj_class(oloc, H5AC_ind_read_dxpl_id)))
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to determine object class")
 
     /* Flush the object of this class */
-    if(obj_class->flush && obj_class->flush(obj_ptr, H5AC_dxpl_id) < 0)
-	HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush object")
+    if(obj_class->flush && obj_class->flush(obj_ptr, H5AC_ind_read_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush object")
 
     /* Flush the object metadata and invoke flush callback */
-    if(H5O_flush_common(oloc, obj_id, H5AC_dxpl_id) < 0)
-	HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush object and object flush callback")
+    if(H5O_flush_common(oloc, obj_id, H5AC_ind_read_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTFLUSH, FAIL, "unable to flush object and object flush callback")
 
 done:
     FUNC_LEAVE_API(ret_value)
@@ -203,7 +203,7 @@ H5Orefresh(hid_t oid)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an object")
 
     /* Private function */
-    if(H5O_refresh_metadata(oid, *oloc, H5AC_dxpl_id) < 0)
+    if(H5O_refresh_metadata(oid, *oloc, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to refresh object")
 
 done:
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index 5963094..31a60e3 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -771,7 +771,7 @@ H5O__layout_encode(H5F_t *f, hbool_t H5_ATTR_UNUSED disable_shared, uint8_t *p,
                 UINT32ENCODE(heap_block_p, chksum)
 
                 /* Insert block into global heap */
-                if(H5HG_insert(f, H5AC_ind_dxpl_id, block_size, heap_block, &((H5O_layout_t *)mesg)->storage.u.virt.serial_list_hobjid) < 0) /* Casting away const OK  --NAF */
+                if(H5HG_insert(f, H5AC_ind_read_dxpl_id, block_size, heap_block, &((H5O_layout_t *)mesg)->storage.u.virt.serial_list_hobjid) < 0) /* Casting away const OK  --NAF */
                     HGOTO_ERROR(H5E_OHDR, H5E_CANTINSERT, FAIL, "unable to insert virtual dataset heap block")
             } /* end if */
 
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
index c98aca2..7473397 100644
--- a/src/H5Opkg.h
+++ b/src/H5Opkg.h
@@ -544,11 +544,13 @@ H5_DLLVAR const H5O_msg_class_t H5O_MSG_EFL[1];
 H5_DLLVAR const H5O_msg_class_t H5O_MSG_LAYOUT[1];
 
 #ifdef H5O_ENABLE_BOGUS
-/* "Bogus" Message. (0x0009) */
+/* "Bogus valid" Message. (0x0009) */
+/* "Bogus invalid" Message. (0x0019) */
 /*
  * Used for debugging - should never be found in valid HDF5 file.
  */
-H5_DLLVAR const H5O_msg_class_t H5O_MSG_BOGUS[1];
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_BOGUS_VALID[1];
+H5_DLLVAR const H5O_msg_class_t H5O_MSG_BOGUS_INVALID[1];
 #endif /* H5O_ENABLE_BOGUS */
 
 /* Group Information Message. (0x000a) */
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index 3c7b78a..834bf1f 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -99,7 +99,13 @@ typedef struct H5O_proxy_t H5O_proxy_t;
 #ifdef H5O_ENABLE_BOGUS
 #define H5O_BOGUS_MSG_FLAGS_NAME        "bogus msg flags"       /* Flags for 'bogus' message */
 #define H5O_BOGUS_MSG_FLAGS_SIZE        sizeof(uint8_t)
+
+/* bogus ID can be either (a) H5O_BOGUS_VALID_ID 0x0009 or (b) H5O_BOGUS_INVALID_ID 0x0019 */
+#define H5O_BOGUS_MSG_ID_NAME        "bogus msg id" 		/* ID for 'bogus' message */
+#define H5O_BOGUS_MSG_ID_SIZE        sizeof(unsigned)
+
 #endif /* H5O_ENABLE_BOGUS */
+
 #ifdef H5O_ENABLE_BAD_MESG_COUNT
 #define H5O_BAD_MESG_COUNT_NAME         "bad message count"       /* Flag setting bad message count */
 #define H5O_BAD_MESG_COUNT_SIZE         sizeof(hbool_t)
@@ -184,7 +190,7 @@ typedef struct H5O_copy_t {
 #define H5O_LINK_ID     0x0006          /* Link Message. */
 #define H5O_EFL_ID	0x0007          /* External File List Message  */
 #define H5O_LAYOUT_ID	0x0008          /* Data Layout Message.  */
-#define H5O_BOGUS_ID	0x0009          /* "Bogus" Message.  */
+#define H5O_BOGUS_VALID_ID	0x0009  /* "Bogus valid" Message.  */
 #define H5O_GINFO_ID	0x000a          /* Group info Message.  */
 #define H5O_PLINE_ID	0x000b          /* Filter pipeline message.  */
 #define H5O_ATTR_ID	0x000c          /* Attribute Message.  */
@@ -201,6 +207,7 @@ typedef struct H5O_copy_t {
 #define H5O_FSINFO_ID   0x0017          /* Free-space manager info message.  */
 #define H5O_UNKNOWN_ID  0x0018          /* Placeholder message ID for unknown message.  */
                                         /* (this should never exist in a file) */
+#define H5O_BOGUS_INVALID_ID	0x0019  /* "Bogus invalid" Message.  */
 
 /* Shared object message types.
  * Shared objects can be committed, in which case the shared message contains
@@ -838,7 +845,7 @@ H5_DLL herr_t H5O_touch(const H5O_loc_t *loc, hbool_t force, hid_t dxpl_id);
 H5_DLL herr_t H5O_touch_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
     hbool_t force);
 #ifdef H5O_ENABLE_BOGUS
-H5_DLL herr_t H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned mesg_flags);
+H5_DLL herr_t H5O_bogus_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned mesg_id, unsigned mesg_flags);
 #endif /* H5O_ENABLE_BOGUS */
 H5_DLL herr_t H5O_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
 H5_DLL herr_t H5O_get_hdr_info(const H5O_loc_t *oloc, hid_t dxpl_id, H5O_hdr_info_t *hdr);
@@ -846,7 +853,7 @@ H5_DLL herr_t H5O_get_info(const H5O_loc_t *oloc, hid_t dxpl_id, hbool_t want_ih
     H5O_info_t *oinfo);
 H5_DLL herr_t H5O_obj_type(const H5O_loc_t *loc, H5O_type_t *obj_type, hid_t dxpl_id);
 H5_DLL herr_t H5O_get_create_plist(const H5O_loc_t *loc, hid_t dxpl_id, struct H5P_genplist_t *oc_plist);
-H5_DLL hid_t H5O_open_name(H5G_loc_t *loc, const char *name, hid_t lapl_id, hbool_t app_ref);
+H5_DLL hid_t H5O_open_name(H5G_loc_t *loc, const char *name, hid_t lapl_id, hid_t dxpl_id, hbool_t app_ref);
 H5_DLL herr_t H5O_get_nlinks(const H5O_loc_t *loc, hid_t dxpl_id, hsize_t *nlinks);
 H5_DLL void *H5O_obj_create(H5F_t *f, H5O_type_t obj_type, void *crt_info, H5G_loc_t *obj_loc, hid_t dxpl_id);
 H5_DLL haddr_t H5O_get_oh_addr(const H5O_t *oh);
diff --git a/src/H5Oproxy.c b/src/H5Oproxy.c
index 67388fb..a06f50a 100644
--- a/src/H5Oproxy.c
+++ b/src/H5Oproxy.c
@@ -324,12 +324,12 @@ H5O__proxy_notify(H5AC_notify_action_t action, void *_thing)
 
             /* Create flush dependencies on all other object header chunks */
             for(u = 1; u < proxy->oh->nchunks; u++) {
-                if(NULL == (chk_proxy = H5O_chunk_protect(proxy->f, H5AC_ind_dxpl_id, proxy->oh, u)))
+                if(NULL == (chk_proxy = H5O_chunk_protect(proxy->f, H5AC_ind_read_dxpl_id, proxy->oh, u)))
                     HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header chunk")
 /* same as before, but looks backward...need to check into that..(proxy, chk_proxy) */
                 if(H5O__proxy_depend_core(chk_proxy, proxy) < 0)
                     HGOTO_ERROR(H5E_OHDR, H5E_CANTDEPEND, FAIL, "unable to create flush dependency")
-                if(H5O_chunk_unprotect(proxy->f, H5AC_ind_dxpl_id, chk_proxy, FALSE) < 0)
+                if(H5O_chunk_unprotect(proxy->f, H5AC_ind_read_dxpl_id, chk_proxy, FALSE) < 0)
                     HGOTO_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to unprotect object header chunk")
                 chk_proxy = NULL;
             } /* end for */
@@ -372,7 +372,7 @@ H5O__proxy_notify(H5AC_notify_action_t action, void *_thing)
 done:
     if(chk_proxy) {
         HDassert(ret_value < 0);
-        if(H5O_chunk_unprotect(proxy->f, H5AC_ind_dxpl_id, chk_proxy, FALSE) < 0)
+        if(H5O_chunk_unprotect(proxy->f, H5AC_ind_read_dxpl_id, chk_proxy, FALSE) < 0)
             HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to unprotect object header chunk")
     } /* end if */
 
diff --git a/src/H5Otest.c b/src/H5Otest.c
index 1c149e3..c3e487d 100644
--- a/src/H5Otest.c
+++ b/src/H5Otest.c
@@ -108,14 +108,14 @@ H5O_is_attr_dense_test(hid_t oid)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
 
     /* Get the object header */
-    if(NULL == (oh = H5O_protect(loc, H5AC_ind_dxpl_id, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (oh = H5O_protect(loc, H5AC_ind_read_dxpl_id, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header")
 
     /* Check for attribute info stored */
     ainfo.fheap_addr = HADDR_UNDEF;
     if(oh->version > H5O_VERSION_1) {
         /* Check for (& retrieve if available) attribute info */
-        if(H5A_get_ainfo(loc->file, H5AC_ind_dxpl_id, oh, &ainfo) < 0)
+        if(H5A_get_ainfo(loc->file, H5AC_ind_read_dxpl_id, oh, &ainfo) < 0)
             HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't check for attribute info message")
     } /* end if */
 
@@ -130,7 +130,7 @@ H5O_is_attr_dense_test(hid_t oid)
         ret_value = FALSE;
 
 done:
-    if(oh && H5O_unprotect(loc, H5AC_ind_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
+    if(oh && H5O_unprotect(loc, H5AC_ind_read_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -173,13 +173,13 @@ H5O_is_attr_empty_test(hid_t oid)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
 
     /* Get the object header */
-    if(NULL == (oh = H5O_protect(loc, H5AC_ind_dxpl_id, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (oh = H5O_protect(loc, H5AC_ind_read_dxpl_id, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header")
 
     /* Check for attribute info stored */
     if(oh->version > H5O_VERSION_1) {
         /* Check for (& retrieve if available) attribute info */
-        if((ainfo_exists = H5A_get_ainfo(loc->file, H5AC_ind_dxpl_id, oh, &ainfo)) < 0)
+        if((ainfo_exists = H5A_get_ainfo(loc->file, H5AC_ind_read_dxpl_id, oh, &ainfo)) < 0)
             HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't check for attribute info message")
     } /* end if */
 
@@ -195,10 +195,10 @@ H5O_is_attr_empty_test(hid_t oid)
                 HDassert(nattrs == 0);
 
                 /* Set metadata tag in dxpl_id */
-                H5_BEGIN_TAG(H5AC_ind_dxpl_id, loc->addr, FAIL);
+                H5_BEGIN_TAG(H5AC_ind_read_dxpl_id, loc->addr, FAIL);
 
                 /* Open the name index v2 B-tree */
-                if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_dxpl_id, ainfo.name_bt2_addr, NULL)))
+                if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_read_dxpl_id, ainfo.name_bt2_addr, NULL)))
                     HGOTO_ERROR_TAG(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for name index")
 
                 /* Reset metadata tag in dxpl_id */
@@ -221,9 +221,9 @@ H5O_is_attr_empty_test(hid_t oid)
 
 done:
     /* Release resources */
-    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_dxpl_id) < 0)
+    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_read_dxpl_id) < 0)
         HDONE_ERROR(H5E_OHDR, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for name index")
-    if(oh && H5O_unprotect(loc, H5AC_ind_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
+    if(oh && H5O_unprotect(loc, H5AC_ind_read_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -266,14 +266,14 @@ H5O_num_attrs_test(hid_t oid, hsize_t *nattrs)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
 
     /* Get the object header */
-    if(NULL == (oh = H5O_protect(loc, H5AC_ind_dxpl_id, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (oh = H5O_protect(loc, H5AC_ind_read_dxpl_id, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header")
 
     /* Check for attribute info stored */
     ainfo.fheap_addr = HADDR_UNDEF;
     if(oh->version > H5O_VERSION_1) {
         /* Check for (& retrieve if available) attribute info */
-        if(H5A_get_ainfo(loc->file, H5AC_ind_dxpl_id, oh, &ainfo) < 0)
+        if(H5A_get_ainfo(loc->file, H5AC_ind_read_dxpl_id, oh, &ainfo) < 0)
             HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, FAIL, "can't check for attribute info message")
     } /* end if */
 
@@ -288,10 +288,10 @@ H5O_num_attrs_test(hid_t oid, hsize_t *nattrs)
             HDassert(obj_nattrs == 0);
 
             /* Set metadata tag in dxpl_id */
-            H5_BEGIN_TAG(H5AC_ind_dxpl_id, loc->addr, FAIL);
+            H5_BEGIN_TAG(H5AC_ind_read_dxpl_id, loc->addr, FAIL);
 
             /* Open the name index v2 B-tree */
-            if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_dxpl_id, ainfo.name_bt2_addr, NULL)))
+            if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_read_dxpl_id, ainfo.name_bt2_addr, NULL)))
                 HGOTO_ERROR_TAG(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for name index")
 
             /* Reset metadata tag in dxpl_id */
@@ -311,9 +311,9 @@ H5O_num_attrs_test(hid_t oid, hsize_t *nattrs)
 
 done:
     /* Release resources */
-    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_dxpl_id) < 0)
+    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_read_dxpl_id) < 0)
         HDONE_ERROR(H5E_OHDR, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for name index")
-    if(oh && H5O_unprotect(loc, H5AC_ind_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
+    if(oh && H5O_unprotect(loc, H5AC_ind_read_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -358,17 +358,17 @@ H5O_attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
 
     /* Set metadata tag in dxpl_id */
-    H5_BEGIN_TAG(H5AC_ind_dxpl_id, loc->addr, FAIL);
+    H5_BEGIN_TAG(H5AC_ind_read_dxpl_id, loc->addr, FAIL);
 
     /* Get the object header */
-    if(NULL == (oh = H5O_protect(loc, H5AC_ind_dxpl_id, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (oh = H5O_protect(loc, H5AC_ind_read_dxpl_id, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR_TAG(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header")
 
     /* Check for attribute info stored */
     ainfo.fheap_addr = HADDR_UNDEF;
     if(oh->version > H5O_VERSION_1) {
         /* Check for (& retrieve if available) attribute info */
-        if(H5A_get_ainfo(loc->file, H5AC_ind_dxpl_id, oh, &ainfo) < 0)
+        if(H5A_get_ainfo(loc->file, H5AC_ind_read_dxpl_id, oh, &ainfo) < 0)
             HGOTO_ERROR_TAG(H5E_ATTR, H5E_CANTGET, FAIL, "can't check for attribute info message")
     } /* end if */
 
@@ -379,7 +379,7 @@ H5O_attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count)
         HGOTO_DONE_TAG(FAIL, FAIL)
 
     /* Open the name index v2 B-tree */
-    if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_dxpl_id, ainfo.name_bt2_addr, NULL)))
+    if(NULL == (bt2_name = H5B2_open(loc->file, H5AC_ind_read_dxpl_id, ainfo.name_bt2_addr, NULL)))
         HGOTO_ERROR_TAG(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for name index")
 
     /* Retrieve # of records in name index */
@@ -389,7 +389,7 @@ H5O_attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count)
     /* Check if there is a creation order index */
     if(H5F_addr_defined(ainfo.corder_bt2_addr)) {
         /* Open the creation order index v2 B-tree */
-        if(NULL == (bt2_corder = H5B2_open(loc->file, H5AC_ind_dxpl_id, ainfo.corder_bt2_addr, NULL)))
+        if(NULL == (bt2_corder = H5B2_open(loc->file, H5AC_ind_read_dxpl_id, ainfo.corder_bt2_addr, NULL)))
             HGOTO_ERROR_TAG(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for creation order index")
 
         /* Retrieve # of records in creation order index */
@@ -404,11 +404,11 @@ H5O_attr_dense_info_test(hid_t oid, hsize_t *name_count, hsize_t *corder_count)
 
 done:
     /* Release resources */
-    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_dxpl_id) < 0)
+    if(bt2_name && H5B2_close(bt2_name, H5AC_ind_read_dxpl_id) < 0)
         HDONE_ERROR(H5E_OHDR, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for name index")
-    if(bt2_corder && H5B2_close(bt2_corder, H5AC_ind_dxpl_id) < 0)
+    if(bt2_corder && H5B2_close(bt2_corder, H5AC_ind_read_dxpl_id) < 0)
         HDONE_ERROR(H5E_OHDR, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for creation order index")
-    if(oh && H5O_unprotect(loc, H5AC_ind_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
+    if(oh && H5O_unprotect(loc, H5AC_ind_read_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -452,7 +452,7 @@ H5O_check_msg_marked_test(hid_t oid, hbool_t flag_val)
         HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found")
 
     /* Get the object header */
-    if(NULL == (oh = H5O_protect(loc, H5AC_ind_dxpl_id, H5AC__READ_ONLY_FLAG)))
+    if(NULL == (oh = H5O_protect(loc, H5AC_ind_read_dxpl_id, H5AC__READ_ONLY_FLAG)))
 	HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header")
 
     /* Locate "unknown" message  */
@@ -471,7 +471,7 @@ H5O_check_msg_marked_test(hid_t oid, hbool_t flag_val)
         HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "'unknown' message type not found")
 
 done:
-    if(oh && H5O_unprotect(loc, H5AC_ind_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
+    if(oh && H5O_unprotect(loc, H5AC_ind_read_dxpl_id, oh, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Pdapl.c b/src/H5Pdapl.c
index 9f7822e..c63bc84 100644
--- a/src/H5Pdapl.c
+++ b/src/H5Pdapl.c
@@ -16,8 +16,8 @@
 /*-------------------------------------------------------------------------
  *
  * Created:		H5Pdapl.c
- *			October 27, 2008
- *			Neil Fortner <nfortne2 at hdfgroup.org>
+ *              October 27, 2008
+ *              Neil Fortner <nfortne2 at hdfgroup.org>
  *
  * Purpose:		Dataset access property list class routines
  *
@@ -39,7 +39,8 @@
 #include "H5Eprivate.h"		/* Error handling */
 #include "H5Fprivate.h"		/* Files */
 #include "H5Iprivate.h"		/* IDs */
-#include "H5Ppkg.h"		/* Property lists */
+#include "H5Ppkg.h"         /* Property lists */
+#include "H5MMprivate.h"	/* Memory management */
 
 
 /****************/
@@ -75,6 +76,17 @@
 /* Definition for append flush */
 #define H5D_ACS_APPEND_FLUSH_SIZE            	sizeof(H5D_append_flush_t)
 #define H5D_ACS_APPEND_FLUSH_DEF             	{0,{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},NULL,NULL}
+/* Definitions for external file prefix */
+#define H5D_ACS_EFILE_PREFIX_SIZE               sizeof(char *)
+#define H5D_ACS_EFILE_PREFIX_DEF                NULL /*default is no prefix */
+#define H5D_ACS_EFILE_PREFIX_SET                H5P__dapl_efile_pref_set
+#define H5D_ACS_EFILE_PREFIX_GET                H5P__dapl_efile_pref_get
+#define H5D_ACS_EFILE_PREFIX_ENC                H5P__dapl_efile_pref_enc
+#define H5D_ACS_EFILE_PREFIX_DEC                H5P__dapl_efile_pref_dec
+#define H5D_ACS_EFILE_PREFIX_DEL                H5P__dapl_efile_pref_del
+#define H5D_ACS_EFILE_PREFIX_COPY               H5P__dapl_efile_pref_copy
+#define H5D_ACS_EFILE_PREFIX_CMP                H5P__dapl_efile_pref_cmp
+#define H5D_ACS_EFILE_PREFIX_CLOSE              H5P__dapl_efile_pref_close
 
 
 
@@ -105,6 +117,16 @@ static herr_t H5P__decode_chunk_cache_nbytes(const void **_pp, void *_value);
 static herr_t H5P__dacc_vds_view_enc(const void *value, void **pp, size_t *size);
 static herr_t H5P__dacc_vds_view_dec(const void **pp, void *value);
 
+/* Property list callbacks */
+static herr_t H5P__dapl_efile_pref_set(hid_t prop_id, const char* name, size_t size, void* value);
+static herr_t H5P__dapl_efile_pref_get(hid_t prop_id, const char* name, size_t size, void* value);
+static herr_t H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size);
+static herr_t H5P__dapl_efile_pref_dec(const void **_pp, void *value);
+static herr_t H5P__dapl_efile_pref_del(hid_t prop_id, const char* name, size_t size, void* value);
+static herr_t H5P__dapl_efile_pref_copy(const char* name, size_t size, void* value);
+static int H5P__dapl_efile_pref_cmp(const void *value1, const void *value2, size_t size);
+static herr_t H5P__dapl_efile_pref_close(const char* name, size_t size, void* value);
+
 
 /*********************/
 /* Package Variables */
@@ -138,7 +160,10 @@ const H5P_libclass_t H5P_CLS_DACC[1] = {{
 /*******************/
 /* Local Variables */
 /*******************/
+
+/* Property value defaults */
 static const H5D_append_flush_t H5D_def_append_flush_g = H5D_ACS_APPEND_FLUSH_DEF;       /* Default setting for append flush */
+static const char *H5D_def_efile_prefix_g = H5D_ACS_EFILE_PREFIX_DEF; /* Default external file prefix string */
 
 

 /*-------------------------------------------------------------------------
@@ -198,12 +223,274 @@ H5P__dacc_reg_prop(H5P_genclass_t *pclass)
              NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
          HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
+    /* Register property for external file prefix */
+    if(H5P_register_real(pclass, H5D_ACS_EFILE_PREFIX_NAME, H5D_ACS_EFILE_PREFIX_SIZE, &H5D_def_efile_prefix_g, 
+            NULL, H5D_ACS_EFILE_PREFIX_SET, H5D_ACS_EFILE_PREFIX_GET, H5D_ACS_EFILE_PREFIX_ENC, H5D_ACS_EFILE_PREFIX_DEC,
+            H5D_ACS_EFILE_PREFIX_DEL, H5D_ACS_EFILE_PREFIX_COPY, H5D_ACS_EFILE_PREFIX_CMP, H5D_ACS_EFILE_PREFIX_CLOSE) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5P__dacc_reg_prop() */
 
 

 /*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_set
+ *
+ * Purpose:     Copies an external file prefix property when it's set
+ *              for a property list
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_set(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *name,
+    size_t H5_ATTR_UNUSED size, void *value)
+{
+    FUNC_ENTER_STATIC_NOERR
+
+    /* Sanity check */
+    HDassert(value);
+
+    /* Copy the prefix */
+    *(char **)value = H5MM_xstrdup(*(const char **)value);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_set() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_get
+ *
+ * Purpose:     Copies an external file prefix property when it's retrieved
+ *              from a property list
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_get(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *name,
+    size_t H5_ATTR_UNUSED size, void *value)
+{
+    FUNC_ENTER_STATIC_NOERR
+
+    /* Sanity check */
+    HDassert(value);
+
+    /* Copy the prefix */
+    *(char **)value = H5MM_xstrdup(*(const char **)value);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_get() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_enc
+ *
+ * Purpose:     Callback routine which is called whenever the efile flags
+ *              property in the dataset access property list is
+ *              encoded.
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_enc(const void *value, void **_pp, size_t *size)
+{
+    const char *efile_pref = *(const char * const *)value;
+    uint8_t **pp = (uint8_t **)_pp;
+    size_t len = 0;
+    uint64_t enc_value;
+    unsigned enc_size;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
+
+    /* calculate prefix length */
+    if(NULL != efile_pref)
+        len = HDstrlen(efile_pref);
+
+    enc_value = (uint64_t)len;
+    enc_size = H5VM_limit_enc_size(enc_value);
+    HDassert(enc_size < 256);
+
+    if(NULL != *pp) {
+        /* encode the length of the prefix */
+        *(*pp)++ = (uint8_t)enc_size;
+        UINT64ENCODE_VAR(*pp, enc_value, enc_size);
+
+        /* encode the prefix */
+        if(NULL != efile_pref) {
+            HDmemcpy(*(char **)pp, efile_pref, len);
+            *pp += len;
+        } /* end if */
+    } /* end if */
+
+    *size += (1 + enc_size);
+    if(NULL != efile_pref)
+        *size += len;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_enc() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_dec
+ *
+ * Purpose:     Callback routine which is called whenever the efile prefix
+ *              property in the dataset access property list is
+ *              decoded.
+ *
+ * Return:	    SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_dec(const void **_pp, void *_value)
+{
+    char **efile_pref = (char **)_value;
+    const uint8_t **pp = (const uint8_t **)_pp;
+    size_t len;
+    uint64_t enc_value;                 /* Decoded property value */
+    unsigned enc_size;                  /* Size of encoded property */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+    HDassert(pp);
+    HDassert(*pp);
+    HDassert(efile_pref);
+    HDcompile_assert(sizeof(size_t) <= sizeof(uint64_t));
+
+    /* Decode the size */
+    enc_size = *(*pp)++;
+    HDassert(enc_size < 256);
+
+    /* Decode the value */
+    UINT64DECODE_VAR(*pp, enc_value, enc_size);
+    len = (size_t)enc_value;
+
+    if(0 != len) {
+        /* Make a copy of the user's prefix string */
+        if(NULL == (*efile_pref = (char *)H5MM_malloc(len + 1)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "memory allocation failed for prefix")
+        HDstrncpy(*efile_pref, *(const char **)pp, len);
+        (*efile_pref)[len] = '\0';
+
+        *pp += len;
+    } /* end if */
+    else
+        *efile_pref = NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5P__dapl_efile_pref_dec() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_del
+ *
+ * Purpose:     Frees memory used to store the external file prefix string
+ *
+ * Return:      SUCCEED (Can't fail)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_del(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *name,
+    size_t H5_ATTR_UNUSED size, void *value)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    HDassert(value);
+
+    H5MM_xfree(*(void **)value);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_del() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_copy
+ *
+ * Purpose:     Creates a copy of the external file prefix string
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_copy(const char H5_ATTR_UNUSED *name, size_t H5_ATTR_UNUSED size, void *value)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    HDassert(value);
+
+    *(char **)value = H5MM_xstrdup(*(const char **)value);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_copy() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:       H5P__dapl_efile_pref_cmp
+ *
+ * Purpose:        Callback routine which is called whenever the efile prefix
+ *                 property in the dataset creation property list is
+ *                 compared.
+ *
+ * Return:         zero if VALUE1 and VALUE2 are equal, non zero otherwise.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5P__dapl_efile_pref_cmp(const void *value1, const void *value2, size_t H5_ATTR_UNUSED size)
+{
+    const char *pref1 = *(const char * const *)value1;
+    const char *pref2 = *(const char * const *)value2;
+    int ret_value = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    if(NULL == pref1 && NULL != pref2)
+        HGOTO_DONE(1);
+    if(NULL != pref1 && NULL == pref2)
+        HGOTO_DONE(-1);
+    if(NULL != pref1 && NULL != pref2)
+        ret_value = HDstrcmp(pref1, pref2);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5P__dapl_efile_pref_cmp() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5P__dapl_efile_pref_close
+ *
+ * Purpose:     Frees memory used to store the external file prefix string
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P__dapl_efile_pref_close(const char H5_ATTR_UNUSED *name, size_t H5_ATTR_UNUSED size, void *value)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOERR
+
+    HDassert(value);
+
+    H5MM_xfree(*(void **)value);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5P__dapl_efile_pref_close() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	H5Pset_chunk_cache
  *
  * Purpose:	Set the number of objects in the meta data cache and the
@@ -917,3 +1204,95 @@ done:
     FUNC_LEAVE_API(ret_value)
 } /* H5Pget_append_flush() */
 
+

+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_efile_prefix
+ *
+ * Purpose:     Set a prefix to be used for any external files.
+ *
+ *              If the prefix starts with ${ORIGIN}, this will be replaced by
+ *              the absolute path of the directory of the HDF5 file containing
+ *              the dataset.
+ *
+ *              If the prefix is ".", no prefix will be applied.
+ *
+ *              This property can be overwritten by the environment variable
+ *              HDF5_EXTFILE_PREFIX.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_efile_prefix(hid_t plist_id, const char *prefix)
+{
+    H5P_genplist_t *plist;              /* Property list pointer */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_API(FAIL)
+    H5TRACE2("e", "i*s", plist_id, prefix);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+    /* Set prefix */
+    if(H5P_set(plist, H5D_ACS_EFILE_PREFIX_NAME, &prefix) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set prefix info")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pset_efile_prefix() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_efile_prefix
+ *
+ * Purpose:	Gets the prefix to be used for any external files.
+ *
+ *              If the pointer is not NULL, it points to a user-allocated
+ *              buffer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5Pget_efile_prefix(hid_t plist_id, char *prefix, size_t size)
+{
+    H5P_genplist_t *plist;              /* Property list pointer */
+    char *my_prefix;                    /* Library's copy of the prefix */
+    size_t	len;                    /* Length of prefix string */
+    ssize_t 	ret_value;              /* Return value */
+
+    FUNC_ENTER_API(FAIL)
+    H5TRACE3("Zs", "i*sz", plist_id, prefix, size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+    /* Get the current prefix */
+    if(H5P_peek(plist, H5D_ACS_EFILE_PREFIX_NAME, &my_prefix) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file prefix")
+
+    /* Check for prefix being set */
+    if(my_prefix) {
+        /* Copy to user's buffer, if given */
+        len = HDstrlen(my_prefix);
+        if(prefix) {
+            HDstrncpy(prefix, my_prefix, MIN(len + 1, size));
+            if(len >= size)
+                prefix[size - 1] = '\0';
+        } /* end if */
+    } /* end if */
+    else
+        len = 0;
+
+    /* Set return value */
+    ret_value = (ssize_t)len;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_efile_prefix() */
+
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index 03a4668..f729e68 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -1998,7 +1998,6 @@ H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
     H5P_genplist_t *plist;      /* Property list pointer */
     H5O_layout_t chunk_layout;  /* Layout information for setting chunk info */
     uint64_t chunk_nelmts;      /* Number of elements in chunk */
-    unsigned max_enc_bytes_per_dim;     /* Max. number of bytes required to encode this dimension */
     unsigned u;                 /* Local index variable */
     herr_t ret_value = SUCCEED; /* Return value */
 
@@ -2026,10 +2025,7 @@ H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
     HDmemcpy(&chunk_layout, &H5D_def_layout_chunk_g, sizeof(H5D_def_layout_chunk_g));
     HDmemset(&chunk_layout.u.chunk.dim, 0, sizeof(chunk_layout.u.chunk.dim));
     chunk_nelmts = 1;
-    max_enc_bytes_per_dim = 0;
     for(u = 0; u < (unsigned)ndims; u++) {
-        unsigned enc_bytes_per_dim;     /* Number of bytes required to encode this dimension */
-
         if(dim[u] == 0)
             HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "all chunk dimensions must be positive")
         if(dim[u] != (dim[u] & 0xffffffff))
@@ -2038,16 +2034,7 @@ H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
         if(chunk_nelmts > (uint64_t)0xffffffff)
             HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "number of elements in chunk must be < 4GB")
         chunk_layout.u.chunk.dim[u] = (uint32_t)dim[u]; /* Store user's chunk dimensions */
-
-        /* Get encoded size of dim, in bytes */
-        enc_bytes_per_dim = (H5VM_log2_gen(dim[u]) + 8) / 8;
-
-        /* Check if this is the largest value so far */
-        if(enc_bytes_per_dim > max_enc_bytes_per_dim)
-            max_enc_bytes_per_dim = enc_bytes_per_dim;
     } /* end for */
-    HDassert(max_enc_bytes_per_dim > 0 && max_enc_bytes_per_dim <= 8);
-    chunk_layout.u.chunk.enc_bytes_per_dim = max_enc_bytes_per_dim;
 
     /* Get the plist structure */
     if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_CREATE)))
@@ -2517,8 +2504,8 @@ done:
  *
  *              If the length of the filename, which determines the
  *              required value of size, is unknown, a preliminary call to
- *              H5Pget_virtual_filename with the last two parameters set
- *              to NULL can be made.  The return value of this call will
+ *              H5Pget_virtual_filename with 'name' set to NULL and 'size'
+ *              set to zero can be made. The return value of this call will
  *              be the size in bytes of the filename.  That value, plus 1
  *              for a NULL terminator, is then assigned to size for a
  *              second H5Pget_virtual_filename call, which will retrieve
@@ -2578,14 +2565,14 @@ done:
  *              additional characters, if any, are not returned to the
  *              user application.
  *
- *              If the length of the filename, which determines the
+ *              If the length of the dataset name, which determines the
  *              required value of size, is unknown, a preliminary call to
- *              H5Pget_virtual_dsetname with the last two parameters set
- *              to NULL can be made.  The return value of this call will
- *              be the size in bytes of the filename.  That value, plus 1
+ *              H5Pget_virtual_dsetname with 'name' set to NULL and 'size'
+ *              set to zero can be made.  The return value of this call will
+ *              be the size in bytes of the dataset name.  That value, plus 1
  *              for a NULL terminator, is then assigned to size for a
  *              second H5Pget_virtual_dsetname call, which will retrieve
- *              the actual filename. 
+ *              the actual dataset name. 
  *
  * Return:      Returns the length of the name if successful, otherwise
  *              returns a negative value.
@@ -3246,7 +3233,7 @@ H5Pset_fill_value(hid_t plist_id, hid_t type_id, const void *value)
         HDmemcpy(fill.buf, value, (size_t)fill.size);
 
         /* Set up type conversion function */
-        if(NULL == (tpath = H5T_path_find(type, type, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+        if(NULL == (tpath = H5T_path_find(type, type, NULL, NULL, H5AC_ind_read_dxpl_id, FALSE)))
             HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
 
         /* If necessary, convert fill value datatypes (which copies VL components, etc.) */
@@ -3258,7 +3245,7 @@ H5Pset_fill_value(hid_t plist_id, hid_t type_id, const void *value)
                 HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
 
             /* Convert the fill value */
-            if(H5T_convert(tpath, type_id, type_id, (size_t)1, (size_t)0, (size_t)0, fill.buf, bkg_buf, H5AC_ind_dxpl_id) < 0) {
+            if(H5T_convert(tpath, type_id, type_id, (size_t)1, (size_t)0, (size_t)0, fill.buf, bkg_buf, H5AC_ind_read_dxpl_id) < 0) {
                 if(bkg_buf)
                     bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf);
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "datatype conversion failed")
@@ -3413,7 +3400,7 @@ H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/)
         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
 
     /* Get the fill value */
-    if(H5P_get_fill_value(plist, type, value, H5AC_ind_dxpl_id) < 0)
+    if(H5P_get_fill_value(plist, type, value, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
 
 done:
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c
index 062cec3..ac57e26 100644
--- a/src/H5Pdxpl.c
+++ b/src/H5Pdxpl.c
@@ -38,6 +38,7 @@
 #include "H5ACprivate.h"        /* Cache                                */
 #include "H5Dprivate.h"		/* Datasets				*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FDprivate.h"	/* File drivers				*/
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5MMprivate.h"	/* Memory management			*/
 #include "H5Ppkg.h"		/* Property lists		  	*/
@@ -175,12 +176,18 @@
 #define H5AC_XFER_RING_DEF       H5AC_RING_US
 #define H5AC_XFER_RING_ENC       H5P__encode_unsigned
 #define H5AC_XFER_RING_DEC       H5P__decode_unsigned
-
+#ifdef H5_DEBUG_BUILD
+/* dxpl I/O type - private property */
+#define H5FD_DXPL_TYPE_SIZE       sizeof(H5FD_dxpl_type_t)
+#endif /* H5_DEBUG_BUILD */
+#ifdef H5_HAVE_PARALLEL
 /* Definition for reading metadata collectively */
 #define H5D_XFER_COLL_MD_READ_SIZE   sizeof(H5P_coll_md_read_flag_t)
 #define H5D_XFER_COLL_MD_READ_DEF    H5P_USER_FALSE
 #define H5D_XFER_COLL_MD_READ_ENC    H5P__encode_coll_md_read_flag_t
 #define H5D_XFER_COLL_MD_READ_DEC    H5P__decode_coll_md_read_flag_t
+#endif /* H5_HAVE_PARALLEL */
+
 
 /******************/
 /* Local Typedefs */
@@ -277,6 +284,7 @@ static const H5D_mpio_no_collective_cause_t H5D_def_mpio_no_collective_cause_g =
 #ifdef H5_HAVE_PARALLEL
 static const MPI_Datatype H5D_def_btype_g = H5FD_MPI_XFER_MEM_MPI_TYPE_DEF;  /* Default value for MPI buffer type */
 static const MPI_Datatype H5D_def_ftype_g = H5FD_MPI_XFER_FILE_MPI_TYPE_DEF; /* Default value for MPI file type */
+static const H5P_coll_md_read_flag_t H5D_def_coll_md_read_g = H5D_XFER_COLL_MD_READ_DEF;  /* Default setting for the collective metedata read flag */
 #endif /* H5_HAVE_PARALLEL */
 static const H5Z_EDC_t H5D_def_enable_edc_g = H5D_XFER_EDC_DEF;            /* Default value for EDC property */
 static const H5Z_cb_t H5D_def_filter_cb_g = H5D_XFER_FILTER_CB_DEF;        /* Default value for filter callback */
@@ -286,8 +294,10 @@ static const hbool_t H5D_def_direct_chunk_flag_g = H5D_XFER_DIRECT_CHUNK_WRITE_F
 static const uint32_t H5D_def_direct_chunk_filters_g = H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_DEF;	/* Default value for the filters of direct chunk write */
 static const hsize_t *H5D_def_direct_chunk_offset_g = H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_DEF; 	/* Default value for the offset of direct chunk write */
 static const uint32_t H5D_def_direct_chunk_datasize_g = H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_DEF; /* Default value for the datasize of direct chunk write */
-static const H5P_coll_md_read_flag_t H5D_def_coll_md_read_g = H5D_XFER_COLL_MD_READ_DEF;  /* Default setting for the collective metedata read flag */
 static const H5AC_ring_t H5D_ring_g = H5AC_XFER_RING_DEF; /* Default value for the cache entry ring type */
+#ifdef H5_DEBUG_BUILD
+static const H5FD_dxpl_type_t H5D_dxpl_type_g = H5FD_NOIO_DXPL; /* Default value for the dxpl type */
+#endif /* H5_DEBUG_BUILD */
 
 

 /*-------------------------------------------------------------------------
@@ -431,6 +441,13 @@ H5P__dxfr_reg_prop(H5P_genclass_t *pclass)
     if(H5P_register_real(pclass, H5FD_MPI_XFER_FILE_MPI_TYPE_NAME, H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE, &H5D_def_ftype_g,
             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+    /* Register the metadata collective read flag */
+    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5D_XFER_COLL_MD_READ_SIZE, 
+            &H5D_def_coll_md_read_g, 
+            NULL, NULL, NULL, H5D_XFER_COLL_MD_READ_ENC, H5D_XFER_COLL_MD_READ_DEC, 
+            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 */
@@ -481,19 +498,19 @@ H5P__dxfr_reg_prop(H5P_genclass_t *pclass)
             NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
-    /* Register the metadata collective read flag */
-    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5D_XFER_COLL_MD_READ_SIZE, 
-            &H5D_def_coll_md_read_g, 
-            NULL, NULL, NULL, H5D_XFER_COLL_MD_READ_ENC, H5D_XFER_COLL_MD_READ_DEC, 
-            NULL, NULL, NULL, NULL) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
-
     /* Register the ring property (private) */
     if(H5P_register_real(pclass, H5AC_RING_NAME, H5AC_XFER_RING_SIZE, &H5D_ring_g,
             NULL, NULL, NULL, H5AC_XFER_RING_ENC, H5AC_XFER_RING_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
+#ifdef H5_DEBUG_BUILD
+    /* Register the dxpl IO type property */
+    if(H5P_register_real(pclass, H5FD_DXPL_TYPE_NAME, H5FD_DXPL_TYPE_SIZE, &H5D_dxpl_type_g,
+                         NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+#endif /* H5_DEBUG_BUILD */
+
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5P__dxfr_reg_prop() */
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index 10952f1..dbf7422 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -208,6 +208,8 @@
 #define H5F_ACS_START_MDC_LOG_ON_ACCESS_DEF     FALSE
 #define H5F_ACS_START_MDC_LOG_ON_ACCESS_ENC     H5P__encode_hbool_t
 #define H5F_ACS_START_MDC_LOG_ON_ACCESS_DEC     H5P__decode_hbool_t
+
+#ifdef H5_HAVE_PARALLEL
 /* Definition of collective metadata read mode flag */
 #define H5F_ACS_COLL_MD_READ_FLAG_SIZE   sizeof(H5P_coll_md_read_flag_t)
 #define H5F_ACS_COLL_MD_READ_FLAG_DEF    H5P_USER_FALSE
@@ -218,6 +220,7 @@
 #define H5F_ACS_COLL_MD_WRITE_FLAG_DEF    FALSE
 #define H5F_ACS_COLL_MD_WRITE_FLAG_ENC    H5P__encode_hbool_t
 #define H5F_ACS_COLL_MD_WRITE_FLAG_DEC    H5P__decode_hbool_t
+#endif /* H5_HAVE_PARALLEL */
 
 /******************/
 /* Local Typedefs */
@@ -334,8 +337,10 @@ static const hbool_t H5F_def_clear_status_flags_g = H5F_ACS_CLEAR_STATUS_FLAGS_D
 static const hbool_t H5F_def_use_mdc_logging_g = H5F_ACS_USE_MDC_LOGGING_DEF;                 /* Default metadata cache logging flag */
 static const char *H5F_def_mdc_log_location_g = H5F_ACS_MDC_LOG_LOCATION_DEF;                 /* Default mdc log location */
 static const hbool_t H5F_def_start_mdc_log_on_access_g = H5F_ACS_START_MDC_LOG_ON_ACCESS_DEF; /* Default mdc log start on access flag */
+#ifdef H5_HAVE_PARALLEL
 static const H5P_coll_md_read_flag_t H5F_def_coll_md_read_flag_g = H5F_ACS_COLL_MD_READ_FLAG_DEF;  /* Default setting for the collective metedata read flag */
 static const hbool_t H5F_def_coll_md_write_flag_g = H5F_ACS_COLL_MD_WRITE_FLAG_DEF;  /* Default setting for the collective metedata write flag */
+#endif /* H5_HAVE_PARALLEL */
 
 

 /*-------------------------------------------------------------------------
@@ -481,13 +486,13 @@ H5P__facc_reg_prop(H5P_genclass_t *pclass)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
     /* Register the core VFD backing store write tracking flag */
-    if(H5P_register_real(pclass, H5F_ACS_CORE_WRITE_TRACKING_FLAG_NAME, H5F_ACS_CORE_WRITE_TRACKING_FLAG_SIZE, &H5F_def_core_write_tracking_flag_g , 
+    if(H5P_register_real(pclass, H5F_ACS_CORE_WRITE_TRACKING_FLAG_NAME, H5F_ACS_CORE_WRITE_TRACKING_FLAG_SIZE, &H5F_def_core_write_tracking_flag_g, 
             NULL, NULL, NULL, H5F_ACS_CORE_WRITE_TRACKING_FLAG_ENC, H5F_ACS_CORE_WRITE_TRACKING_FLAG_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
     /* Register the size of the core VFD backing store page size */
-    if(H5P_register_real(pclass, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_NAME, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_SIZE, &H5F_def_core_write_tracking_page_size_g , 
+    if(H5P_register_real(pclass, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_NAME, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_SIZE, &H5F_def_core_write_tracking_page_size_g, 
             NULL, NULL, NULL, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_ENC, H5F_ACS_CORE_WRITE_TRACKING_PAGE_SIZE_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
@@ -525,19 +530,19 @@ H5P__facc_reg_prop(H5P_genclass_t *pclass)
             NULL, NULL, NULL, H5F_ACS_START_MDC_LOG_ON_ACCESS_ENC, H5F_ACS_START_MDC_LOG_ON_ACCESS_DEC, NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
+#ifdef H5_HAVE_PARALLEL
     /* Register the metadata collective read flag */
-    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5F_ACS_COLL_MD_READ_FLAG_SIZE, 
-            &H5F_def_coll_md_read_flag_g, 
+    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5F_ACS_COLL_MD_READ_FLAG_SIZE, &H5F_def_coll_md_read_flag_g, 
             NULL, NULL, NULL, H5F_ACS_COLL_MD_READ_FLAG_ENC, H5F_ACS_COLL_MD_READ_FLAG_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
     /* Register the metadata collective write flag */
-    if(H5P_register_real(pclass, H5F_ACS_COLL_MD_WRITE_FLAG_NAME, H5F_ACS_COLL_MD_WRITE_FLAG_SIZE, 
-            &H5F_def_coll_md_write_flag_g, 
+    if(H5P_register_real(pclass, H5F_ACS_COLL_MD_WRITE_FLAG_NAME, H5F_ACS_COLL_MD_WRITE_FLAG_SIZE, &H5F_def_coll_md_write_flag_g, 
             NULL, NULL, NULL, H5F_ACS_COLL_MD_WRITE_FLAG_ENC, H5F_ACS_COLL_MD_WRITE_FLAG_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+#endif /* H5_HAVE_PARALLEL */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -3499,6 +3504,9 @@ H5P__facc_multi_type_dec(const void **_pp, void *_value)
  *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:  Dana Robinson
+ *              Tuesday, April 8, 2014
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -3526,7 +3534,7 @@ H5Pset_core_write_tracking(hid_t plist_id, hbool_t is_enabled, size_t page_size)
 
 done:
     FUNC_LEAVE_API(ret_value)
-}
+} /* end H5Pset_core_write_tracking() */
 
 

 /*-------------------------------------------------------------------------
@@ -3537,6 +3545,9 @@ done:
  *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:  Dana Robinson
+ *              Tuesday, April 8, 2014
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -3565,7 +3576,7 @@ H5Pget_core_write_tracking(hid_t plist_id, hbool_t *is_enabled, size_t *page_siz
 
 done:
     FUNC_LEAVE_API(ret_value)
-}
+} /* end H5Pget_core_write_tracking() */
 
 

 /*-------------------------------------------------------------------------
@@ -4050,6 +4061,7 @@ H5P_facc_mdc_log_location_close(const char H5_ATTR_UNUSED *name, size_t H5_ATTR_
     FUNC_LEAVE_NOAPI(SUCCEED)
 } /* end H5P_facc_mdc_log_location_close() */
 
+#ifdef H5_HAVE_PARALLEL
 

 /*-------------------------------------------------------------------------
  * Function:       H5P__encode_coll_md_read_flag_t
@@ -4060,6 +4072,7 @@ H5P_facc_mdc_log_location_close(const char H5_ATTR_UNUSED *name, size_t H5_ATTR_
  *		   Failure:	Negative
  *
  * Programmer:     Mohamad Chaarawi
+ *                 Sunday, June 21, 2015
  *
  *-------------------------------------------------------------------------
  */
@@ -4097,6 +4110,7 @@ H5P__encode_coll_md_read_flag_t(const void *value, void **_pp, size_t *size)
  *		   Failure:	Negative
  *
  * Programmer:     Mohamad Chaarawi
+ *                 Sunday, June 21, 2015
  *
  *-------------------------------------------------------------------------
  */
@@ -4120,65 +4134,86 @@ H5P__decode_coll_md_read_flag_t(const void **_pp, void *_value)
     FUNC_LEAVE_NOAPI(SUCCEED)
 } /* end H5P__decode_coll_md_read_flag_t() */
 
-#ifdef H5_HAVE_PARALLEL
 

 /*-------------------------------------------------------------------------
- * Function:	H5Pset_coll_metadata_read
+ * Function:	H5Pset_all_coll_metadata_ops
+ *
+ * Purpose:	Tell the library whether the metadata read operations will
+ *		be done collectively (1) or not (0). Default is independent.
+ *		With collective mode, the library will optimize access to
+ *		metadata operations on the file.
  *
- * Purpose: Tell the library whether the metadata read operations will
- * be done collectively (1) or not (0). Default is independent. With
- * collective mode, the library will optimize access to metdata
- * operations on the file.
+ * Note:	This routine accepts file access property lists, link
+ *		access property lists, attribute access property lists,
+ *		dataset access property lists, group access property lists,
+ *		named datatype access property lists,
+ *		and dataset transfer property lists.
  *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:	Mohamad Chaarawi
+ *              Sunday, June 21, 2015
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
-H5Pset_coll_metadata_read(hid_t plist_id, hbool_t is_collective)
+H5Pset_all_coll_metadata_ops(hid_t plist_id, hbool_t is_collective)
 {
     H5P_genplist_t *plist;        /* Property list pointer */
+    H5P_coll_md_read_flag_t coll_meta_read;     /* Property value */
     herr_t ret_value = SUCCEED;   /* return value */
 
     FUNC_ENTER_API(FAIL)
     H5TRACE2("e", "ib", plist_id, is_collective);
 
     /* Compare the property list's class against the other class */
+    /* (Dataset, group, attribute, and named datype  access property lists
+     *  are sub-classes of link access property lists -QAK)
+     */
     if(TRUE != H5P_isa_class(plist_id, H5P_LINK_ACCESS) &&
-       TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS) &&
-       TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
+            TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS) &&
+            TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
         HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not an access plist")
 
     /* set property to either TRUE if > 0, or FALSE otherwise */
-    if(is_collective > 0)
-        is_collective = TRUE;
+    if(is_collective)
+        coll_meta_read = H5P_USER_TRUE;
     else
-        is_collective = FALSE;
+        coll_meta_read = H5P_USER_FALSE;
 
     /* Get the plist structure */
     if(NULL == (plist = (H5P_genplist_t *)H5I_object(plist_id)))
         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
 
     /* Set values */
-    if(H5P_set(plist, H5_COLL_MD_READ_FLAG_NAME, &is_collective) < 0)
+    if(H5P_set(plist, H5_COLL_MD_READ_FLAG_NAME, &coll_meta_read) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set collective metadata read flag")
 
 done:
     FUNC_LEAVE_API(ret_value)
-} /* H5Pset_coll_metadata_read */
+} /* end H5Pset_all_coll_metadata_ops() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5Pget_coll_metadata_read
+ * Function:	H5Pget_all_coll_metadata_ops
  *
  * Purpose:	Gets information about collective metadata read mode.
  *
+ * Note:	This routine accepts file access property lists, link
+ *		access property lists, attribute access property lists,
+ *		dataset access property lists, group access property lists,
+ *		named datatype access property lists,
+ *		and dataset transfer property lists.
+ *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:	Mohamad Chaarawi
+ *              Sunday, June 21, 2015
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
-H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective)
+H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective)
 {
     herr_t ret_value = SUCCEED;   /* return value */
 
@@ -4186,9 +4221,12 @@ H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective)
     H5TRACE2("e", "i*b", plist_id, is_collective);
 
     /* Compare the property list's class against the other class */
+    /* (Dataset, group, attribute, and named datype  access property lists
+     *  are sub-classes of link access property lists -QAK)
+     */
     if(TRUE != H5P_isa_class(plist_id, H5P_LINK_ACCESS) &&
-       TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS) &&
-       TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
+            TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS) &&
+            TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
         HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property list is not an access plist")
 
     /* Get value */
@@ -4211,17 +4249,20 @@ H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective)
 
 done:
     FUNC_LEAVE_API(ret_value)
-} /* H5Pget_coll_metadata_read */
+} /* H5Pget_all_coll_metadata_ops */
 
 

 /*-------------------------------------------------------------------------
  * Function:	H5Pset_coll_metadata_write
  *
- * Purpose: Tell the library whether the metadata write operations will
- * be done collectively (1) or not (0). Default is collective.
+ * Purpose:	Tell the library whether the metadata write operations will
+ *		be done collectively (1) or not (0). Default is collective.
  *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:	Mohamad Chaarawi
+ *              Sunday, June 21, 2015
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -4247,7 +4288,7 @@ H5Pset_coll_metadata_write(hid_t plist_id, hbool_t is_collective)
 
 done:
     FUNC_LEAVE_API(ret_value)
-} /* H5Pset_coll_metadata_write */
+} /* end H5Pset_coll_metadata_write() */
 
 

 /*-------------------------------------------------------------------------
@@ -4257,6 +4298,9 @@ done:
  *
  * Return:	Non-negative on success/Negative on failure
  *
+ * Programmer:	Mohamad Chaarawi
+ *              Sunday, June 21, 2015
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -4281,6 +4325,6 @@ H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective)
 
 done:
     FUNC_LEAVE_API(ret_value)
-} /* H5Pget_coll_metadata_write */
-
+} /* end H5Pget_coll_metadata_write() */
 #endif /* H5_HAVE_PARALLEL */
+
diff --git a/src/H5Pint.c b/src/H5Pint.c
index ca56f82..a222082 100644
--- a/src/H5Pint.c
+++ b/src/H5Pint.c
@@ -29,8 +29,11 @@
 /* Headers */
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
-#include "H5ACprivate.h"	/* Metadata cache			*/
+#ifdef H5_HAVE_PARALLEL
+#include "H5ACprivate.h"        /* Metadata cache                       */
+#endif /* H5_HAVE_PARALLEL */
 #include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5FLprivate.h"	/* Free lists                           */
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -274,13 +277,10 @@ const H5P_libclass_t H5P_CLS_TACC[1] = {{
 /* Library property list classes defined in other code modules */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_OCRT[1];         /* Object creation */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_STRCRT[1];       /* String create */
-H5_DLLVAR const H5P_libclass_t H5P_CLS_LACC[1];         /* Link access */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_GCRT[1];         /* Group create */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_OCPY[1];         /* Object copy */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_FCRT[1];         /* File creation */
-H5_DLLVAR const H5P_libclass_t H5P_CLS_FACC[1];         /* File access */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_DCRT[1];         /* Dataset creation */
-H5_DLLVAR const H5P_libclass_t H5P_CLS_DACC[1];         /* Dataset access */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_DXFR[1];         /* Data transfer */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_FMNT[1];         /* File mount */
 H5_DLLVAR const H5P_libclass_t H5P_CLS_ACRT[1];         /* Attribute creation */
@@ -5435,39 +5435,92 @@ H5P_get_class(const H5P_genplist_t *plist)
     FUNC_LEAVE_NOAPI(plist->pclass)
 } /* end H5P_get_class() */
 
+

+/*-------------------------------------------------------------------------
+ * Function:	H5P_verify_apl_and_dxpl
+ *
+ * Purpose:	Validate access property list and/or switch from generic
+ *		property list to default of correct type.
+ *
+ *		Also, if using internal DXPL and collective flag is set,
+ *		switch to internal collective DXPL.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Mohamad Chaarawi
+ *              Sunday, June 21, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
 herr_t 
-H5P_verify_and_set_dxpl(hid_t *acspl_id, hid_t pclass_id, hid_t default_id, hid_t *dxpl_id)
+H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass, hid_t *dxpl_id, 
+                        hid_t
+#ifndef H5_HAVE_PARALLEL
+                        H5_ATTR_UNUSED
+#endif /* H5_HAVE_PARALLEL */
+                        loc_id, hbool_t
+#ifndef H5_HAVE_PARALLEL
+                        H5_ATTR_UNUSED
+#endif /* H5_HAVE_PARALLEL */
+                        is_collective)
 {
-    herr_t      ret_value = SUCCEED;       /* Return value */
+    herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT
 
+    /* Sanity check */
     HDassert(acspl_id);
+    HDassert(libclass);
+    HDassert(dxpl_id);
+
+#ifdef H5_HAVE_PARALLEL
+    /* If parallel is enabled and the file driver used in the MPI-IO
+    VFD, issue an MPI barrier for easier debugging if the API function
+    calling this is supposed to be called collectively. Note that this
+    happens only when the environment variable H5_COLL_BARRIER is set
+    to non 0. */
+    if(is_collective && H5_coll_api_sanity_check_g) {
+        MPI_Comm mpi_comm; /* file communicator */
+
+        /* retrieve the MPI communicator from the loc_id or the fapl_id */
+        if(H5F_mpi_retrieve_comm(loc_id, *acspl_id, &mpi_comm) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get MPI communicator")
+
+        /* issue the barrier */
+        if(mpi_comm != MPI_COMM_NULL)
+            MPI_Barrier(mpi_comm);
+    }
+#endif /* H5_HAVE_PARALLEL */
 
-    /* Check the access property list */
+    /* Set access plist to the default property list of the appropriate class if it's the generic default */
     if(H5P_DEFAULT == *acspl_id)
-        *acspl_id = default_id;
-
-    if(TRUE != H5P_isa_class(*acspl_id, pclass_id))
-        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "Not the required access property list")
-
-    if(dxpl_id) {
-        H5P_coll_md_read_flag_t is_collective;
-        H5P_genplist_t *plist;      /* Property list pointer */
-
-        /* Get the plist structure */
-        if(NULL == (plist = (H5P_genplist_t *)H5I_object_verify(*acspl_id, H5I_GENPROP_LST)))
-            HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
-
-        if(H5P_get(plist, H5_COLL_MD_READ_FLAG_NAME, &is_collective) < 0)
+        *acspl_id = *libclass->def_plist_id;
+    else {
+#ifdef H5_HAVE_PARALLEL
+        H5P_coll_md_read_flag_t md_coll_read;      /* Collective metadata read flag */
+        H5P_genplist_t *plist;          /* Property list pointer */
+#endif /* H5_HAVE_PARALLEL */
+
+        /* Sanity check the access property list class */
+        if(TRUE != H5P_isa_class(*acspl_id, *libclass->class_id))
+            HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not the required access property list")
+
+#ifdef H5_HAVE_PARALLEL
+        /* Get the plist structure for the access property list */
+        if(NULL == (plist = (H5P_genplist_t *)H5I_object(*acspl_id)))
+            HGOTO_ERROR(H5E_PLIST, H5E_BADATOM, FAIL, "can't find object for ID")
+
+        /* Get the collective metadata read flag */
+        if(H5P_peek(plist, H5_COLL_MD_READ_FLAG_NAME, &md_coll_read) < 0)
             HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get core collective metadata read flag")
 
-        if(TRUE == is_collective && *dxpl_id == H5AC_dxpl_id)
-            *dxpl_id = H5AC_coll_write_coll_read_dxpl_id;
-        else if(TRUE == is_collective && *dxpl_id == H5AC_ind_dxpl_id)
-            *dxpl_id = H5AC_ind_write_coll_read_dxpl_id;
-    }
+        /* If collective metadata read requested and using internal DXPL, switch to internal collective DXPL */
+        if(H5P_USER_TRUE == md_coll_read)
+            *dxpl_id = H5AC_coll_read_dxpl_id;
+#endif /* H5_HAVE_PARALLEL */
+    } /* end else */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5P_verify_and_set_dxpl */
+} /* end H5P_verify_apl_and_dxpl() */
+
diff --git a/src/H5Plapl.c b/src/H5Plapl.c
index 5443171..a0ec7f1 100644
--- a/src/H5Plapl.c
+++ b/src/H5Plapl.c
@@ -88,11 +88,13 @@
 #define H5L_ACS_ELINK_CB_SIZE           sizeof(H5L_elink_cb_t)
 #define H5L_ACS_ELINK_CB_DEF            {NULL,NULL}
 
+#ifdef H5_HAVE_PARALLEL
 /* Definition for reading metadata collectively */
 #define H5L_ACS_COLL_MD_READ_SIZE   sizeof(H5P_coll_md_read_flag_t)
 #define H5L_ACS_COLL_MD_READ_DEF    H5P_USER_FALSE
 #define H5L_ACS_COLL_MD_READ_ENC    H5P__encode_coll_md_read_flag_t
 #define H5L_ACS_COLL_MD_READ_DEC    H5P__decode_coll_md_read_flag_t
+#endif /* H5_HAVE_PARALLEL */
 
 /******************/
 /* Local Typedefs */
@@ -169,7 +171,9 @@ static const char *H5L_def_elink_prefix_g = H5L_ACS_ELINK_PREFIX_DEF; /* Default
 static const hid_t H5L_def_fapl_id_g = H5L_ACS_ELINK_FAPL_DEF;    /* Default fapl for external link access */
 static const unsigned H5L_def_elink_flags_g = H5L_ACS_ELINK_FLAGS_DEF; /* Default file access flags for external link traversal */
 static const H5L_elink_cb_t H5L_def_elink_cb_g = H5L_ACS_ELINK_CB_DEF; /* Default external link traversal callback */
+#ifdef H5_HAVE_PARALLEL
 static const H5P_coll_md_read_flag_t H5L_def_coll_md_read_g = H5L_ACS_COLL_MD_READ_DEF;  /* Default setting for the collective metedata read flag */
+#endif /* H5_HAVE_PARALLEL */
 
 

 /*-------------------------------------------------------------------------
@@ -221,12 +225,13 @@ H5P__lacc_reg_prop(H5P_genclass_t *pclass)
              NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
          HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
+#ifdef H5_HAVE_PARALLEL
     /* Register the metadata collective read flag */
-    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5L_ACS_COLL_MD_READ_SIZE, 
-            &H5L_def_coll_md_read_g, 
+    if(H5P_register_real(pclass, H5_COLL_MD_READ_FLAG_NAME, H5L_ACS_COLL_MD_READ_SIZE, &H5L_def_coll_md_read_g, 
             NULL, NULL, NULL, H5L_ACS_COLL_MD_READ_ENC, H5L_ACS_COLL_MD_READ_DEC, 
             NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+#endif /* H5_HAVE_PARALLEL */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -795,7 +800,8 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5P__lacc_elink_pref_del(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *name, size_t H5_ATTR_UNUSED size, void *value)
+H5P__lacc_elink_pref_del(hid_t H5_ATTR_UNUSED prop_id, const char H5_ATTR_UNUSED *name,
+    size_t H5_ATTR_UNUSED size, void *value)
 {
     FUNC_ENTER_STATIC_NOERR
 
diff --git a/src/H5Ppkg.h b/src/H5Ppkg.h
index bc81c1c..0fbd13d 100644
--- a/src/H5Ppkg.h
+++ b/src/H5Ppkg.h
@@ -115,33 +115,6 @@ struct H5P_genplist_t {
     H5SL_t *props;      /* Skip list containing properties */
 };
 
-/* Function pointer for library classes with properties to register */
-typedef herr_t (*H5P_init_class_op_t)(H5P_genclass_t *pclass);
-typedef herr_t (*H5P_reg_prop_func_t)(H5P_genclass_t *pclass);
-
-/*
- * Each library property list class has a variable of this type that contains
- * class variables and methods used to initialize the class.
- */
-typedef struct H5P_libclass_t {
-    const char	*name;		        /* Class name */
-    H5P_plist_type_t type;              /* Class type */
-
-    H5P_genclass_t * * par_pclass;      /* Pointer to global parent class property list class */
-    H5P_genclass_t * * pclass;          /* Pointer to global property list class */
-    hid_t * const class_id;             /* Pointer to global property list class ID */
-    hid_t * const def_plist_id;         /* Pointer to global default property list ID */
-    H5P_reg_prop_func_t reg_prop_func;  /* Register class's properties */
-
-    /* Class callback function pointers & info */
-    H5P_cls_create_func_t create_func;  /* Function to call when a property list is created */
-    void *create_data;                  /* Pointer to user data to pass along to create callback */
-    H5P_cls_copy_func_t copy_func;      /* Function to call when a property list is copied */
-    void *copy_data;                    /* Pointer to user data to pass along to copy callback */
-    H5P_cls_close_func_t close_func;    /* Function to call when a property list is closed */
-    void *close_data;                   /* Pointer to user data to pass along to close callback */
-} H5P_libclass_t;
-
 /* Property list/class iterator callback function pointer */
 typedef int (*H5P_iterate_int_t)(H5P_genprop_t *prop, void *udata);
 
diff --git a/src/H5Pprivate.h b/src/H5Pprivate.h
index cff79a6..29fb919 100644
--- a/src/H5Pprivate.h
+++ b/src/H5Pprivate.h
@@ -41,13 +41,13 @@
 #define H5P_CLASS(P)        (H5P_get_class(P))
 #endif /* H5P_MODULE */
 
+#define H5_COLL_MD_READ_FLAG_NAME "collective_metadata_read"
+
 
 /****************************/
 /* Library Private Typedefs */
 /****************************/
 
-#define H5_COLL_MD_READ_FLAG_NAME "collective_metadata_read"
-
 typedef enum H5P_coll_md_read_flag_t {
     H5P_FORCE_FALSE             = -1,
     H5P_USER_FALSE              = 0,
@@ -85,6 +85,32 @@ typedef enum H5P_plist_type_t {
     H5P_TYPE_MAX_TYPE
 } H5P_plist_type_t;
 
+/* Function pointer for library classes with properties to register */
+typedef herr_t (*H5P_reg_prop_func_t)(H5P_genclass_t *pclass);
+
+/*
+ * Each library property list class has a variable of this type that contains
+ * class variables and methods used to initialize the class.
+ */
+typedef struct H5P_libclass_t {
+    const char	*name;		        /* Class name */
+    H5P_plist_type_t type;              /* Class type */
+
+    H5P_genclass_t * * par_pclass;      /* Pointer to global parent class property list class */
+    H5P_genclass_t * * pclass;          /* Pointer to global property list class */
+    hid_t * const class_id;             /* Pointer to global property list class ID */
+    hid_t * const def_plist_id;         /* Pointer to global default property list ID */
+    H5P_reg_prop_func_t reg_prop_func;  /* Register class's properties */
+
+    /* Class callback function pointers & info */
+    H5P_cls_create_func_t create_func;  /* Function to call when a property list is created */
+    void *create_data;                  /* Pointer to user data to pass along to create callback */
+    H5P_cls_copy_func_t copy_func;      /* Function to call when a property list is copied */
+    void *copy_data;                    /* Pointer to user data to pass along to copy callback */
+    H5P_cls_close_func_t close_func;    /* Function to call when a property list is closed */
+    void *close_data;                   /* Pointer to user data to pass along to close callback */
+} H5P_libclass_t;
+
 /*****************************/
 /* Library Private Variables */
 /*****************************/
@@ -109,6 +135,13 @@ H5_DLLVAR H5P_genclass_t *H5P_CLS_LINK_CREATE_g;
 H5_DLLVAR H5P_genclass_t *H5P_CLS_LINK_ACCESS_g;
 H5_DLLVAR H5P_genclass_t *H5P_CLS_STRING_CREATE_g;
 
+/* Internal property list classes */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_LACC[1];  /* Link access */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_AACC[1];  /* Attribute access */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_DACC[1];  /* Dataset access */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_GACC[1];  /* Group access */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_TACC[1];  /* Named datatype access */
+H5_DLLVAR const struct H5P_libclass_t H5P_CLS_FACC[1];  /* File access */
 
 /******************************/
 /* Library Private Prototypes */
@@ -134,6 +167,8 @@ H5_DLL herr_t H5P_remove(H5P_genplist_t *plist, const char *name);
 H5_DLL htri_t H5P_exist_plist(const H5P_genplist_t *plist, const char *name);
 H5_DLL htri_t H5P_class_isa(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2);
 H5_DLL char *H5P_get_class_name(H5P_genclass_t *pclass);
+
+/* Internal helper routines */
 H5_DLL herr_t H5P_get_nprops_pclass(const H5P_genclass_t *pclass, size_t *nprops,
     hbool_t recurse);
 H5_DLL hid_t H5P_peek_driver(H5P_genplist_t *plist);
@@ -153,6 +188,8 @@ H5_DLL herr_t H5P_get_filter_by_id(H5P_genplist_t *plist, H5Z_filter_t id,
     unsigned int *flags, size_t *cd_nelmts, unsigned cd_values[],
     size_t namelen, char name[], unsigned *filter_config);
 H5_DLL htri_t H5P_filter_in_pline(H5P_genplist_t *plist, H5Z_filter_t id);
+H5_DLL herr_t H5P_verify_apl_and_dxpl(hid_t *acspl_id, const H5P_libclass_t *libclass, 
+    hid_t *dxpl_id, hid_t loc_id, hbool_t is_collective);
 
 /* Query internal fields of the property list struct */
 H5_DLL hid_t H5P_get_plist_id(const H5P_genplist_t *plist);
@@ -162,18 +199,11 @@ H5_DLL H5P_genclass_t *H5P_get_class(const H5P_genplist_t *plist);
 H5_DLL htri_t H5P_isa_class(hid_t plist_id, hid_t pclass_id);
 H5_DLL H5P_genplist_t *H5P_object_verify(hid_t plist_id, hid_t pclass_id);
 
-/* Private functions to "peek" at properties of a certain type */
-H5_DLL unsigned H5P_peek_unsigned(H5P_genplist_t *plist, const char *name);
-H5_DLL hid_t H5P_peek_hid_t(H5P_genplist_t *plist, const char *name);
-H5_DLL void *H5P_peek_voidp(H5P_genplist_t *plist, const char *name);
-H5_DLL size_t H5P_peek_size_t(H5P_genplist_t *plist, const char *name);
-
 /* Private DCPL routines */
 H5_DLL herr_t H5P_fill_value_defined(H5P_genplist_t *plist,
     H5D_fill_value_t *status);
 H5_DLL herr_t H5P_get_fill_value(H5P_genplist_t *plist, const struct H5T_t *type,
     void *value, hid_t dxpl_id);
 
-H5_DLL herr_t H5P_verify_and_set_dxpl(hid_t *acspl_id, hid_t pclass_id, hid_t default_id, hid_t *dxpl_id);
 #endif /* _H5Pprivate_H */
 
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index 927da6a..b5bde62 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -358,8 +358,8 @@ H5_DLL herr_t H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void
 H5_DLL herr_t H5Pset_mdc_log_options(hid_t plist_id, hbool_t is_enabled, const char *location, hbool_t start_on_access);
 H5_DLL herr_t H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size, hbool_t *start_on_access);
 #ifdef H5_HAVE_PARALLEL
-H5_DLL herr_t H5Pset_coll_metadata_read(hid_t plist_id, hbool_t is_collective);
-H5_DLL herr_t H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective);
+H5_DLL herr_t H5Pset_all_coll_metadata_ops(hid_t plist_id, hbool_t is_collective);
+H5_DLL herr_t H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective);
 H5_DLL herr_t H5Pset_coll_metadata_write(hid_t plist_id, hbool_t is_collective);
 H5_DLL herr_t H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective);
 #endif /* H5_HAVE_PARALLEL */
@@ -418,6 +418,8 @@ H5_DLL herr_t H5Pset_append_flush(hid_t plist_id, unsigned ndims,
     const hsize_t boundary[], H5D_append_cb_t func, void *udata);
 H5_DLL herr_t H5Pget_append_flush(hid_t plist_id, unsigned dims,
     hsize_t boundary[], H5D_append_cb_t *func, void **udata);
+H5_DLL herr_t H5Pset_efile_prefix(hid_t dapl_id, const char* prefix);
+H5_DLL ssize_t H5Pget_efile_prefix(hid_t dapl_id, char* prefix /*out*/, size_t size);
 
 /* Dataset xfer property list (DXPL) routines */
 H5_DLL herr_t H5Pset_data_transform(hid_t plist_id, const char* expression);
diff --git a/src/H5R.c b/src/H5R.c
index 61b45e1..43b0a91 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -396,7 +396,7 @@ H5Rcreate(void *ref, hid_t loc_id, const char *name, H5R_type_t ref_type, hid_t
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace")
 
     /* Create reference */
-    if((ret_value = H5R_create(ref, &loc, name, ref_type, space, H5AC_dxpl_id)) < 0)
+    if((ret_value = H5R_create(ref, &loc, name, ref_type, space, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to create reference")
 
 done:
@@ -541,12 +541,6 @@ H5R_dereference(H5F_t *file, hid_t oapl_id, hid_t dxpl_id, H5R_type_t ref_type,
             {
                 H5D_t *dset;                /* Pointer to dataset to open */
 
-                /* Get correct property list */
-                if(H5P_DEFAULT == oapl_id)
-                    oapl_id = H5P_DATASET_ACCESS_DEFAULT;
-                else if(TRUE != H5P_isa_class(oapl_id, H5P_DATASET_ACCESS))
-                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset access property list")
-
                 /* Open the dataset */
                 if(NULL == (dset = H5D_open(&loc, oapl_id, dxpl_id)))
                     HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found")
@@ -602,6 +596,7 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *_r
 {
     H5G_loc_t loc;      /* Group location */
     H5F_t *file = NULL; /* File object */
+    hid_t dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     hid_t ret_value;
 
     FUNC_ENTER_API(FAIL)
@@ -617,11 +612,15 @@ H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *_r
     if(_ref == NULL)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer")
 
+    /* Verify access property list and get correct dxpl */
+    if(H5P_verify_apl_and_dxpl(&oapl_id, H5P_CLS_DACC, &dxpl_id, obj_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_REFERENCE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+
     /* Get the file pointer from the entry */
     file = loc.oloc->file;
 
     /* Create reference */
-    if((ret_value = H5R_dereference(file, oapl_id, H5AC_ind_dxpl_id, ref_type, _ref, TRUE)) < 0)
+    if((ret_value = H5R_dereference(file, oapl_id, dxpl_id, ref_type, _ref, TRUE)) < 0)
         HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to dereference object")
 
 done:
@@ -740,7 +739,7 @@ H5Rget_region(hid_t id, H5R_type_t ref_type, const void *ref)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer")
 
     /* Get the dataspace with the correct region selected */
-    if((space = H5R_get_region(loc.oloc->file, H5AC_ind_dxpl_id, ref)) == NULL)
+    if((space = H5R_get_region(loc.oloc->file, H5AC_ind_read_dxpl_id, ref)) == NULL)
         HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCREATE, FAIL, "unable to create dataspace")
 
     /* Atomize */
@@ -880,7 +879,7 @@ H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref,
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer")
 
     /* Get the object information */
-    if(H5R_get_obj_type(loc.oloc->file, H5AC_ind_dxpl_id, ref_type, ref, obj_type) < 0)
+    if(H5R_get_obj_type(loc.oloc->file, H5AC_ind_read_dxpl_id, ref_type, ref, obj_type) < 0)
 	HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to determine object type")
 
 done:
@@ -1044,7 +1043,7 @@ H5Rget_name(hid_t id, H5R_type_t ref_type, const void *_ref, char *name,
     file = loc.oloc->file;
 
     /* Get name */
-    if((ret_value = H5R_get_name(file, H5P_DEFAULT, H5AC_ind_dxpl_id, id, ref_type, _ref, name, size)) < 0)
+    if((ret_value = H5R_get_name(file, H5P_DEFAULT, H5AC_ind_read_dxpl_id, id, ref_type, _ref, name, size)) < 0)
         HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to determine object path")
 
 done:
diff --git a/src/H5Rdeprec.c b/src/H5Rdeprec.c
index b8133b2..9461327 100644
--- a/src/H5Rdeprec.c
+++ b/src/H5Rdeprec.c
@@ -125,7 +125,7 @@ H5Rget_obj_type1(hid_t id, H5R_type_t ref_type, const void *ref)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5G_UNKNOWN, "invalid reference pointer")
 
     /* Get the object information */
-    if(H5R_get_obj_type(loc.oloc->file, H5AC_ind_dxpl_id, ref_type, ref, &obj_type) < 0)
+    if(H5R_get_obj_type(loc.oloc->file, H5AC_ind_read_dxpl_id, ref_type, ref, &obj_type) < 0)
 	HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type")
 
     /* Set return value */
@@ -180,7 +180,7 @@ H5Rdereference1(hid_t obj_id, H5R_type_t ref_type, const void *_ref)
     file = loc.oloc->file;
 
     /* Create reference */
-    if((ret_value = H5R_dereference(file, H5P_DATASET_ACCESS_DEFAULT, H5AC_ind_dxpl_id, ref_type, _ref, TRUE)) < 0)
+    if((ret_value = H5R_dereference(file, H5P_DATASET_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id, ref_type, _ref, TRUE)) < 0)
         HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable dereference object")
 
 done:
diff --git a/src/H5SM.c b/src/H5SM.c
index 4a562dd..0b72e40 100644
--- a/src/H5SM.c
+++ b/src/H5SM.c
@@ -60,7 +60,8 @@ static herr_t H5SM_create_index(H5F_t *f, H5SM_index_header_t *header,
 static herr_t H5SM_delete_index(H5F_t *f, H5SM_index_header_t *header,
                                 hid_t dxpl_id, hbool_t delete_heap);
 static haddr_t H5SM_create_list(H5F_t *f, H5SM_index_header_t *header, hid_t dxpl_id);
-static size_t H5SM_find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, size_t *empty_pos);
+static herr_t H5SM__find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, 
+                                size_t *empty_pos, size_t *list_pos);
 static herr_t H5SM_convert_list_to_btree(H5F_t * f, H5SM_index_header_t * header,
                 H5SM_list_t **_list, H5HF_t *fheap, H5O_t *open_oh, hid_t dxpl_id);
 static herr_t H5SM_convert_btree_to_list(H5F_t * f, H5SM_index_header_t * header, hid_t dxpl_id);
@@ -1303,7 +1304,9 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
          * Also record the first empty list position we find in case we need it
          * later.
          */
-        list_pos = H5SM_find_in_list(list, &key, &empty_pos);
+        if(H5SM__find_in_list(list, &key, &empty_pos, &list_pos) < 0)
+	    HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to search for message in list")
+
         if(defer) {
             if(list_pos != UFAIL)
                 found = TRUE;
@@ -1375,11 +1378,23 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
         } /* end else */
     } /* end else */
 
-    if(found)
+    if(found) {
         /* If the message was found, it's shared in the heap (now).  Set up a
          * shared message so we can mark it as shared.
          */
         shared.type = H5O_SHARE_TYPE_SOHM;
+
+#ifdef H5_USING_MEMCHECKER
+        /* Reset the shared message payload if deferring.  This doesn't matter
+         *      in the long run since the payload will get overwritten when the
+         *      non-deferred call to this routine occurs, but it stops memory
+         *      checkers like valgrind from whining when the partially initialized
+         *      shared message is serialized. -QAK
+         */
+        if(defer)
+            HDmemset(&shared.u, 0, sizeof(shared.u));
+#endif /* H5_USING_MEMCHECKER */
+    } /* end if */
     else {
         htri_t share_in_ohdr;           /* Whether the new message can be shared in another object's header */
 
@@ -1452,10 +1467,15 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
             /* 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")
+                if(empty_pos == UFAIL) {
+                    size_t pos;
+
+                    if(H5SM__find_in_list(list, NULL, &empty_pos, &pos) < 0)
+                        HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to search for message in list")
 
+                    if(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);
@@ -1598,7 +1618,7 @@ done:
 
 

 /*-------------------------------------------------------------------------
- * Function:    H5SM_find_in_list
+ * Function:    H5SM__find_in_list
  *
  * Purpose:     Find a message's location in a list.  Also find the first
  *              empty location in the list (since if we don't find the
@@ -1618,13 +1638,13 @@ done:
  *
  *-------------------------------------------------------------------------
  */
-static size_t
-H5SM_find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, size_t *empty_pos)
+static herr_t
+H5SM__find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, size_t *empty_pos, size_t *pos)
 {
     size_t x;
-    size_t ret_value = 0;       /* Return value */
+    herr_t ret_value = SUCCEED;       /* Return value */
 
-    FUNC_ENTER_NOAPI_NOINIT_NOERR
+    FUNC_ENTER_STATIC
 
     HDassert(list);
     /* Both key and empty_pos can be NULL, but not both! */
@@ -1638,9 +1658,17 @@ 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((list->messages[x].location != H5SM_NO_LOC) &&
-                (0 == H5SM__message_compare(key, &(list->messages[x]))))
-            HGOTO_DONE(x)
+        if(list->messages[x].location != H5SM_NO_LOC) {
+            int cmp;
+
+            if(H5SM__message_compare(key, &(list->messages[x]), &cmp) < 0)
+                HGOTO_ERROR(H5E_SOHM, H5E_CANTCOMPARE, FAIL, "can't compare message records")
+
+            if(0 == cmp) {
+                *pos = x;
+                HGOTO_DONE(SUCCEED)
+            }
+        }
         else if(empty_pos && list->messages[x].location == H5SM_NO_LOC) {
             /* Note position */
             *empty_pos = x;
@@ -1651,11 +1679,11 @@ H5SM_find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, size_t *e
     } /* end for */
 
     /* If we reached this point, we didn't find the message */
-    ret_value = UFAIL;
+    *pos = UFAIL;
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5SM_find_in_list */
+} /* end H5SM__find_in_list */
 
 

 /*-------------------------------------------------------------------------
@@ -1822,7 +1850,9 @@ H5SM_delete_from_index(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
 	    HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM index")
 
         /* Find the message in the list */
-        if((list_pos = H5SM_find_in_list(list, &key, NULL)) == UFAIL)
+        if(H5SM__find_in_list(list, &key, NULL, &list_pos) < 0)
+            HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "unable to search for message in list")
+        if(list_pos == UFAIL)
 	    HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "message not in index")
 
         if(list->messages[list_pos].location == H5SM_IN_HEAP)
@@ -2205,7 +2235,9 @@ H5SM_get_refcount(H5F_t *f, hid_t dxpl_id, unsigned type_id,
 	    HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM index")
 
         /* Find the message in the list */
-        if((list_pos = H5SM_find_in_list(list, &key, NULL)) == UFAIL)
+        if(H5SM__find_in_list(list, &key, NULL, &list_pos) < 0)
+            HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "unable to search for message in list")
+        if(list_pos == UFAIL)
 	    HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "message not in index")
 
         /* Copy the message */
diff --git a/src/H5SMbtree2.c b/src/H5SMbtree2.c
index e533ae8..0110c1e 100644
--- a/src/H5SMbtree2.c
+++ b/src/H5SMbtree2.c
@@ -50,7 +50,6 @@ static herr_t H5SM__bt2_dst_context(void *ctx);
 static herr_t H5SM__bt2_store(void *native, const void *udata);
 static herr_t H5SM__bt2_debug(FILE *stream, int indent, int fwidth,
     const void *record, const void *_udata);
-static void *H5SM__bt2_crt_dbg_context(H5F_t *f, hid_t dxpl_id, haddr_t addr);
 
 
 /*****************************/
@@ -67,9 +66,7 @@ const H5B2_class_t H5SM_INDEX[1]={{   /* B-tree class information */
     H5SM__message_compare,            /* Record comparison callback */
     H5SM__message_encode,             /* Record encoding callback */
     H5SM__message_decode,             /* Record decoding callback */
-    H5SM__bt2_debug,                  /* Record debugging callback */
-    H5SM__bt2_crt_dbg_context,	      /* Create debugging context */
-    H5SM__bt2_dst_context 	      /* Destroy debugging context */
+    H5SM__bt2_debug                   /* Record debugging callback */
 }};
 
 
@@ -218,45 +215,6 @@ H5SM__bt2_debug(FILE *stream, int indent, int fwidth,
 
 

 /*-------------------------------------------------------------------------
- * Function:	H5SM__bt2_crt_dbg_context
- *
- * Purpose:	Create context for debugging callback
- *
- * Return:	Success:	non-NULL
- *		Failure:	NULL
- *
- * Programmer:	Quincey Koziol
- *              Tuesday, December 1, 2009
- *
- *-------------------------------------------------------------------------
- */
-static void *
-H5SM__bt2_crt_dbg_context(H5F_t *f, hid_t H5_ATTR_UNUSED dxpl_id, haddr_t H5_ATTR_UNUSED addr)
-{
-    H5SM_bt2_ctx_t *ctx;        /* Callback context structure */
-    void *ret_value = NULL;     /* Return value */
-
-    FUNC_ENTER_STATIC
-
-    /* Sanity check */
-    HDassert(f);
-
-    /* Allocate callback context */
-    if(NULL == (ctx = H5FL_MALLOC(H5SM_bt2_ctx_t)))
-        HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "can't allocate callback context")
-
-    /* Determine the size of addresses & lengths in the file */
-    ctx->sizeof_addr = H5F_SIZEOF_ADDR(f);
-
-    /* Set return value */
-    ret_value = ctx;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* H5SM__bt2_crt_dbg_context() */
-
-

-/*-------------------------------------------------------------------------
  * Function:	H5SM_bt2_convert_to_list_op
  *
  * Purpose:	An H5B2_remove_t callback function to convert a SOHM
diff --git a/src/H5SMcache.c b/src/H5SMcache.c
index 7b94743..ff2b09f 100644
--- a/src/H5SMcache.c
+++ b/src/H5SMcache.c
@@ -769,9 +769,8 @@ H5SM__cache_list_serialize(const H5F_t *f, void *_image, size_t len,
     /* sanity check */
     HDassert((size_t)(image - (uint8_t *)_image) <= list->header->list_size);
 
-#ifdef H5_CLEAR_MEMORY
+    /* Clear memory */
     HDmemset(image, 0, (list->header->list_size - (size_t)(image - (uint8_t *)_image)));
-#endif /* H5_CLEAR_MEMORY */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5SMmessage.c b/src/H5SMmessage.c
index 426ea20..92b6a75 100644
--- a/src/H5SMmessage.c
+++ b/src/H5SMmessage.c
@@ -186,13 +186,13 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5SM__message_compare(const void *rec1, const void *rec2)
+H5SM__message_compare(const void *rec1, const void *rec2, int *result)
 {
     const H5SM_mesg_key_t *key = (const H5SM_mesg_key_t *) rec1;
     const H5SM_sohm_t *mesg = (const H5SM_sohm_t *) rec2;
-    herr_t ret_value = 0;
+    herr_t ret_value = SUCCEED;
 
-    FUNC_ENTER_PACKAGE_NOERR
+    FUNC_ENTER_PACKAGE
 
     /* If the key has an fheap ID, we're looking for a message that's
      * already in the index; if the fheap ID matches, we've found the message
@@ -201,28 +201,31 @@ H5SM__message_compare(const void *rec1, const void *rec2)
      * message in the index, we've found the message.
      */
     if(mesg->location == H5SM_IN_HEAP && key->message.location == H5SM_IN_HEAP) {
-        if(key->message.u.heap_loc.fheap_id.val == mesg->u.heap_loc.fheap_id.val)
-            HGOTO_DONE(0);
+        if(key->message.u.heap_loc.fheap_id.val == mesg->u.heap_loc.fheap_id.val) {
+            *result = 0;
+            HGOTO_DONE(SUCCEED);
+        }
     } /* end if */
     else if(mesg->location == H5SM_IN_OH && key->message.location == H5SM_IN_OH) {
         if(key->message.u.mesg_loc.oh_addr == mesg->u.mesg_loc.oh_addr &&
-                key->message.u.mesg_loc.index == mesg->u.mesg_loc.index &&
-                key->message.msg_type_id == mesg->msg_type_id)
-            HGOTO_DONE(0);
+           key->message.u.mesg_loc.index == mesg->u.mesg_loc.index &&
+           key->message.msg_type_id == mesg->msg_type_id) {
+            *result = 0;
+            HGOTO_DONE(SUCCEED);
+        }
     } /* end if */
 
     /* Compare hash values */
     if(key->message.hash > mesg->hash)
-        ret_value = 1;
+        *result = 1;
     else if(key->message.hash < mesg->hash)
-        ret_value = -1;
+        *result = -1;
     /* If the hash values match, make sure the messages are really the same */
     else {
         /* Hash values match; compare the encoded message with the one in
          * the index.
          */
         H5SM_compare_udata_t udata;
-        herr_t status;
 
         HDassert(key->message.hash == mesg->hash);
         HDassert(key->encoding_size > 0 && key->encoding);
@@ -235,8 +238,8 @@ H5SM__message_compare(const void *rec1, const void *rec2)
          */
         if(mesg->location == H5SM_IN_HEAP) {
             /* Call heap op routine with comparison callback */
-            status = H5HF_op(key->fheap, key->dxpl_id, &(mesg->u.heap_loc.fheap_id), H5SM_compare_cb, &udata);
-            HDassert(status >= 0);
+            if(H5HF_op(key->fheap, key->dxpl_id, &(mesg->u.heap_loc.fheap_id), H5SM_compare_cb, &udata) < 0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPARE, FAIL, "can't compare btree2 records")
         } /* end if */
         else {
             H5O_loc_t oloc;             /* Object owning the message */
@@ -247,8 +250,8 @@ H5SM__message_compare(const void *rec1, const void *rec2)
             HDassert(mesg->location == H5SM_IN_OH);
 
             /* Reset the object location */
-            status = H5O_loc_reset(&oloc);
-            HDassert(status >= 0);
+            if(H5O_loc_reset(&oloc) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTRESET, FAIL, "unable to initialize target location")
 
             /* Set up object location */
             oloc.file = key->file;
@@ -260,11 +263,11 @@ H5SM__message_compare(const void *rec1, const void *rec2)
             /* Locate the right message and compare with it */
             op.op_type = H5O_MESG_OP_LIB;
             op.u.lib_op = H5SM_compare_iter_op;
-            status = H5O_msg_iterate(&oloc, mesg->msg_type_id, &op, &udata, key->dxpl_id);
-            HDassert(status >= 0);
+            if(H5O_msg_iterate(&oloc, mesg->msg_type_id, &op, &udata, key->dxpl_id) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "error iterating over links")
         } /* end else */
 
-        ret_value = udata.ret;
+        *result = udata.ret;
     } /* end if */
 
 done:
diff --git a/src/H5SMpkg.h b/src/H5SMpkg.h
index f072741..3b13e23 100644
--- a/src/H5SMpkg.h
+++ b/src/H5SMpkg.h
@@ -268,7 +268,7 @@ H5_DLLVAR const H5B2_class_t H5SM_INDEX[1];
 H5_DLL ssize_t H5SM_get_index(const H5SM_master_table_t *table, unsigned type_id);
 
 /* Encode and decode routines, used for B-tree and cache encoding/decoding */
-H5_DLL herr_t H5SM__message_compare(const void *rec1, const void *rec2);
+H5_DLL herr_t H5SM__message_compare(const void *rec1, const void *rec2, int *result);
 H5_DLL herr_t H5SM__message_encode(uint8_t *raw, const void *native, void *ctx);
 H5_DLL herr_t H5SM__message_decode(const uint8_t *raw, void *native, void *ctx);
 
diff --git a/src/H5STprivate.h b/src/H5STprivate.h
index 892f04a..9b49b07 100644
--- a/src/H5STprivate.h
+++ b/src/H5STprivate.h
@@ -58,7 +58,9 @@ H5_DLL H5ST_ptr_t H5ST_findfirst(H5ST_tree_t *p);
 H5_DLL H5ST_ptr_t H5ST_findnext(H5ST_ptr_t p);
 H5_DLL void *H5ST_remove(H5ST_tree_t *root, const char *s);
 H5_DLL herr_t H5ST_delete(H5ST_tree_t *root, H5ST_ptr_t p);
-H5_DLL herr_t H5ST_dump(H5ST_ptr_t p);
+#ifdef H5ST_DEBUG
+H5_DLL herr_t H5ST_dump(H5ST_tree_t *tree);
+#endif /* H5ST_DEBUG */
 
 #endif /* _H5STprivate_H */
 
diff --git a/src/H5T.c b/src/H5T.c
index 6514a35..194fa87 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -993,24 +993,24 @@ H5T__init_package(void)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
     status = 0;
 
-    status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T__conv_i_i, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "i_f", fixedpt, floatpt, H5T__conv_i_f, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T__conv_f_f, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "f_i", floatpt, fixedpt, H5T__conv_f_i, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T__conv_s_s, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T__conv_b_b, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T__conv_order, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T__conv_order_opt, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T__conv_order, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T__conv_order_opt, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T__conv_struct, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T__conv_struct_opt, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T__conv_enum, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "enum_i", enum_type, fixedpt, H5T__conv_enum_numeric, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "enum_f", enum_type, floatpt, H5T__conv_enum_numeric, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "vlen", vlen, vlen, H5T__conv_vlen, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T__conv_array, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_SOFT, "objref", objref, objref, H5T__conv_order_opt, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T__conv_i_i, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "i_f", fixedpt, floatpt, H5T__conv_i_f, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T__conv_f_f, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "f_i", floatpt, fixedpt, H5T__conv_f_i, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T__conv_s_s, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T__conv_b_b, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T__conv_order, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T__conv_order_opt, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T__conv_order, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T__conv_order_opt, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T__conv_struct, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T__conv_struct_opt, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T__conv_enum, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "enum_i", enum_type, fixedpt, H5T__conv_enum_numeric, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "enum_f", enum_type, floatpt, H5T__conv_enum_numeric, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "vlen", vlen, vlen, H5T__conv_vlen, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T__conv_array, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_SOFT, "objref", objref, objref, H5T__conv_order_opt, H5AC_noio_dxpl_id, FALSE);
 
     /*
      * Native conversions should be listed last since we can use hardware to
@@ -1021,221 +1021,221 @@ H5T__init_package(void)
      */
 
     /* floating point */
-    status |= H5T_register(H5T_PERS_HARD, "flt_dbl", native_float, native_double, H5T__conv_float_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_flt", native_double, native_float, H5T__conv_double_float, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_dbl", native_float, native_double, H5T__conv_float_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_flt", native_double, native_float, H5T__conv_double_float, H5AC_noio_dxpl_id, FALSE);
 #if H5_SIZEOF_LONG_DOUBLE != 0
-    status |= H5T_register(H5T_PERS_HARD, "flt_ldbl", native_float, native_ldouble, H5T__conv_float_ldouble, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_ldbl", native_double, native_ldouble, H5T__conv_double_ldouble, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_flt", native_ldouble, native_float, H5T__conv_ldouble_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_dbl", native_ldouble, native_double, H5T__conv_ldouble_double, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_ldbl", native_float, native_ldouble, H5T__conv_float_ldouble, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_ldbl", native_double, native_ldouble, H5T__conv_double_ldouble, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_flt", native_ldouble, native_float, H5T__conv_ldouble_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_dbl", native_ldouble, native_double, H5T__conv_ldouble_double, H5AC_noio_dxpl_id, FALSE);
 #endif /* H5_SIZEOF_LONG_DOUBLE != 0 */
 
     /* from long long */
-    status |= H5T_register(H5T_PERS_HARD, "llong_ullong", native_llong, native_ullong, H5T__conv_llong_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_llong", native_ullong, native_llong, H5T__conv_ullong_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_long", native_llong, native_long, H5T__conv_llong_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_ulong", native_llong, native_ulong, H5T__conv_llong_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_long", native_ullong, native_long, H5T__conv_ullong_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_ulong", native_ullong, native_ulong, H5T__conv_ullong_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_short", native_llong, native_short, H5T__conv_llong_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_ushort", native_llong, native_ushort, H5T__conv_llong_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_short", native_ullong, native_short, H5T__conv_ullong_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_ushort", native_ullong, native_ushort, H5T__conv_ullong_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_int", native_llong, native_int, H5T__conv_llong_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_uint", native_llong, native_uint, H5T__conv_llong_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_int", native_ullong, native_int, H5T__conv_ullong_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_uint", native_ullong, native_uint, H5T__conv_ullong_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_schar", native_llong, native_schar, H5T__conv_llong_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_uchar", native_llong, native_uchar, H5T__conv_llong_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_schar", native_ullong, native_schar, H5T__conv_ullong_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_uchar", native_ullong, native_uchar, H5T__conv_ullong_uchar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ullong", native_llong, native_ullong, H5T__conv_llong_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_llong", native_ullong, native_llong, H5T__conv_ullong_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_long", native_llong, native_long, H5T__conv_llong_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ulong", native_llong, native_ulong, H5T__conv_llong_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_long", native_ullong, native_long, H5T__conv_ullong_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_ulong", native_ullong, native_ulong, H5T__conv_ullong_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_short", native_llong, native_short, H5T__conv_llong_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ushort", native_llong, native_ushort, H5T__conv_llong_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_short", native_ullong, native_short, H5T__conv_ullong_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_ushort", native_ullong, native_ushort, H5T__conv_ullong_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_int", native_llong, native_int, H5T__conv_llong_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_uint", native_llong, native_uint, H5T__conv_llong_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_int", native_ullong, native_int, H5T__conv_ullong_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_uint", native_ullong, native_uint, H5T__conv_ullong_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_schar", native_llong, native_schar, H5T__conv_llong_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_uchar", native_llong, native_uchar, H5T__conv_llong_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_schar", native_ullong, native_schar, H5T__conv_ullong_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_uchar", native_ullong, native_uchar, H5T__conv_ullong_uchar, H5AC_noio_dxpl_id, FALSE);
 
     /* From long */
-    status |= H5T_register(H5T_PERS_HARD, "long_llong", native_long, native_llong, H5T__conv_long_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_ullong", native_long, native_ullong, H5T__conv_long_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_llong", native_ulong, native_llong, H5T__conv_ulong_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_ullong", native_ulong, native_ullong, H5T__conv_ulong_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_ulong", native_long, native_ulong, H5T__conv_long_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_long", native_ulong, native_long, H5T__conv_ulong_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_short", native_long, native_short, H5T__conv_long_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_ushort", native_long, native_ushort, H5T__conv_long_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_short", native_ulong, native_short, H5T__conv_ulong_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_ushort", native_ulong, native_ushort, H5T__conv_ulong_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_int", native_long, native_int, H5T__conv_long_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_uint", native_long, native_uint, H5T__conv_long_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_int", native_ulong, native_int, H5T__conv_ulong_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_uint", native_ulong, native_uint, H5T__conv_ulong_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_schar", native_long, native_schar, H5T__conv_long_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_uchar", native_long, native_uchar, H5T__conv_long_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_schar", native_ulong, native_schar, H5T__conv_ulong_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_uchar", native_ulong, native_uchar, H5T__conv_ulong_uchar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_llong", native_long, native_llong, H5T__conv_long_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_ullong", native_long, native_ullong, H5T__conv_long_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_llong", native_ulong, native_llong, H5T__conv_ulong_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_ullong", native_ulong, native_ullong, H5T__conv_ulong_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_ulong", native_long, native_ulong, H5T__conv_long_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_long", native_ulong, native_long, H5T__conv_ulong_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_short", native_long, native_short, H5T__conv_long_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_ushort", native_long, native_ushort, H5T__conv_long_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_short", native_ulong, native_short, H5T__conv_ulong_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_ushort", native_ulong, native_ushort, H5T__conv_ulong_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_int", native_long, native_int, H5T__conv_long_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_uint", native_long, native_uint, H5T__conv_long_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_int", native_ulong, native_int, H5T__conv_ulong_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_uint", native_ulong, native_uint, H5T__conv_ulong_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_schar", native_long, native_schar, H5T__conv_long_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_uchar", native_long, native_uchar, H5T__conv_long_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_schar", native_ulong, native_schar, H5T__conv_ulong_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_uchar", native_ulong, native_uchar, H5T__conv_ulong_uchar, H5AC_noio_dxpl_id, FALSE);
 
     /* From short */
-    status |= H5T_register(H5T_PERS_HARD, "short_llong", native_short, native_llong, H5T__conv_short_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_ullong", native_short, native_ullong, H5T__conv_short_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_llong", native_ushort, native_llong, H5T__conv_ushort_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_ullong", native_ushort, native_ullong, H5T__conv_ushort_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_long", native_short, native_long, H5T__conv_short_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_ulong", native_short, native_ulong, H5T__conv_short_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_long", native_ushort, native_long, H5T__conv_ushort_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_ulong", native_ushort, native_ulong, H5T__conv_ushort_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_ushort", native_short, native_ushort, H5T__conv_short_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_short", native_ushort, native_short, H5T__conv_ushort_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_int", native_short, native_int, H5T__conv_short_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_uint", native_short, native_uint, H5T__conv_short_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_int", native_ushort, native_int, H5T__conv_ushort_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_uint", native_ushort, native_uint, H5T__conv_ushort_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_schar", native_short, native_schar, H5T__conv_short_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_uchar", native_short, native_uchar, H5T__conv_short_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_schar", native_ushort, native_schar, H5T__conv_ushort_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_uchar", native_ushort, native_uchar, H5T__conv_ushort_uchar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_llong", native_short, native_llong, H5T__conv_short_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_ullong", native_short, native_ullong, H5T__conv_short_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_llong", native_ushort, native_llong, H5T__conv_ushort_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_ullong", native_ushort, native_ullong, H5T__conv_ushort_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_long", native_short, native_long, H5T__conv_short_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_ulong", native_short, native_ulong, H5T__conv_short_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_long", native_ushort, native_long, H5T__conv_ushort_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_ulong", native_ushort, native_ulong, H5T__conv_ushort_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_ushort", native_short, native_ushort, H5T__conv_short_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_short", native_ushort, native_short, H5T__conv_ushort_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_int", native_short, native_int, H5T__conv_short_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_uint", native_short, native_uint, H5T__conv_short_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_int", native_ushort, native_int, H5T__conv_ushort_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_uint", native_ushort, native_uint, H5T__conv_ushort_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_schar", native_short, native_schar, H5T__conv_short_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_uchar", native_short, native_uchar, H5T__conv_short_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_schar", native_ushort, native_schar, H5T__conv_ushort_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_uchar", native_ushort, native_uchar, H5T__conv_ushort_uchar, H5AC_noio_dxpl_id, FALSE);
 
     /* From int */
-    status |= H5T_register(H5T_PERS_HARD, "int_llong", native_int, native_llong, H5T__conv_int_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_ullong", native_int, native_ullong, H5T__conv_int_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_llong", native_uint, native_llong, H5T__conv_uint_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_ullong", native_uint, native_ullong, H5T__conv_uint_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_long", native_int, native_long, H5T__conv_int_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_ulong", native_int, native_ulong, H5T__conv_int_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_long", native_uint, native_long, H5T__conv_uint_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_ulong", native_uint, native_ulong, H5T__conv_uint_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_short", native_int, native_short, H5T__conv_int_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_ushort", native_int, native_ushort, H5T__conv_int_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_short", native_uint, native_short, H5T__conv_uint_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_ushort", native_uint, native_ushort, H5T__conv_uint_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_uint", native_int, native_uint, H5T__conv_int_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_int", native_uint, native_int, H5T__conv_uint_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_schar", native_int, native_schar, H5T__conv_int_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_uchar", native_int, native_uchar, H5T__conv_int_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_schar", native_uint, native_schar, H5T__conv_uint_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_uchar", native_uint, native_uchar, H5T__conv_uint_uchar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_llong", native_int, native_llong, H5T__conv_int_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_ullong", native_int, native_ullong, H5T__conv_int_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_llong", native_uint, native_llong, H5T__conv_uint_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ullong", native_uint, native_ullong, H5T__conv_uint_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_long", native_int, native_long, H5T__conv_int_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_ulong", native_int, native_ulong, H5T__conv_int_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_long", native_uint, native_long, H5T__conv_uint_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ulong", native_uint, native_ulong, H5T__conv_uint_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_short", native_int, native_short, H5T__conv_int_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_ushort", native_int, native_ushort, H5T__conv_int_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_short", native_uint, native_short, H5T__conv_uint_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ushort", native_uint, native_ushort, H5T__conv_uint_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_uint", native_int, native_uint, H5T__conv_int_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_int", native_uint, native_int, H5T__conv_uint_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_schar", native_int, native_schar, H5T__conv_int_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_uchar", native_int, native_uchar, H5T__conv_int_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_schar", native_uint, native_schar, H5T__conv_uint_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_uchar", native_uint, native_uchar, H5T__conv_uint_uchar, H5AC_noio_dxpl_id, FALSE);
 
     /* From char */
-    status |= H5T_register(H5T_PERS_HARD, "schar_llong", native_schar, native_llong, H5T__conv_schar_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_ullong", native_schar, native_ullong, H5T__conv_schar_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_llong", native_uchar, native_llong, H5T__conv_uchar_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_ullong", native_uchar, native_ullong, H5T__conv_uchar_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_long", native_schar, native_long, H5T__conv_schar_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_ulong", native_schar, native_ulong, H5T__conv_schar_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_long", native_uchar, native_long, H5T__conv_uchar_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_ulong", native_uchar, native_ulong, H5T__conv_uchar_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_short", native_schar, native_short, H5T__conv_schar_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_ushort", native_schar, native_ushort, H5T__conv_schar_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_short", native_uchar, native_short, H5T__conv_uchar_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_ushort", native_uchar, native_ushort, H5T__conv_uchar_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_int", native_schar, native_int, H5T__conv_schar_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_uint", native_schar, native_uint, H5T__conv_schar_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_int", native_uchar, native_int, H5T__conv_uchar_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_uint", native_uchar, native_uint, H5T__conv_uchar_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T__conv_schar_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T__conv_uchar_schar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_llong", native_schar, native_llong, H5T__conv_schar_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ullong", native_schar, native_ullong, H5T__conv_schar_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_llong", native_uchar, native_llong, H5T__conv_uchar_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ullong", native_uchar, native_ullong, H5T__conv_uchar_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_long", native_schar, native_long, H5T__conv_schar_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ulong", native_schar, native_ulong, H5T__conv_schar_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_long", native_uchar, native_long, H5T__conv_uchar_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ulong", native_uchar, native_ulong, H5T__conv_uchar_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_short", native_schar, native_short, H5T__conv_schar_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ushort", native_schar, native_ushort, H5T__conv_schar_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_short", native_uchar, native_short, H5T__conv_uchar_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ushort", native_uchar, native_ushort, H5T__conv_uchar_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_int", native_schar, native_int, H5T__conv_schar_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_uint", native_schar, native_uint, H5T__conv_schar_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_int", native_uchar, native_int, H5T__conv_uchar_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_uint", native_uchar, native_uint, H5T__conv_uchar_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T__conv_schar_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T__conv_uchar_schar, H5AC_noio_dxpl_id, FALSE);
 
     /* From char to floats */
-    status |= H5T_register(H5T_PERS_HARD, "schar_flt", native_schar, native_float, H5T__conv_schar_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_dbl", native_schar, native_double, H5T__conv_schar_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "schar_ldbl", native_schar, native_ldouble, H5T__conv_schar_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_flt", native_schar, native_float, H5T__conv_schar_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_dbl", native_schar, native_double, H5T__conv_schar_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ldbl", native_schar, native_ldouble, H5T__conv_schar_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From unsigned char to floats */
-    status |= H5T_register(H5T_PERS_HARD, "uchar_flt", native_uchar, native_float, H5T__conv_uchar_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_dbl", native_uchar, native_double, H5T__conv_uchar_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uchar_ldbl", native_uchar, native_ldouble, H5T__conv_uchar_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_flt", native_uchar, native_float, H5T__conv_uchar_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_dbl", native_uchar, native_double, H5T__conv_uchar_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ldbl", native_uchar, native_ldouble, H5T__conv_uchar_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From short to floats */
-    status |= H5T_register(H5T_PERS_HARD, "short_flt", native_short, native_float, H5T__conv_short_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_dbl", native_short, native_double, H5T__conv_short_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "short_ldbl", native_short, native_ldouble, H5T__conv_short_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_flt", native_short, native_float, H5T__conv_short_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_dbl", native_short, native_double, H5T__conv_short_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "short_ldbl", native_short, native_ldouble, H5T__conv_short_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From unsigned short to floats */
-    status |= H5T_register(H5T_PERS_HARD, "ushort_flt", native_ushort, native_float, H5T__conv_ushort_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_dbl", native_ushort, native_double, H5T__conv_ushort_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ushort_ldbl", native_ushort, native_ldouble, H5T__conv_ushort_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_flt", native_ushort, native_float, H5T__conv_ushort_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_dbl", native_ushort, native_double, H5T__conv_ushort_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_ldbl", native_ushort, native_ldouble, H5T__conv_ushort_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From int to floats */
-    status |= H5T_register(H5T_PERS_HARD, "int_flt", native_int, native_float, H5T__conv_int_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_dbl", native_int, native_double, H5T__conv_int_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "int_ldbl", native_int, native_ldouble, H5T__conv_int_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_flt", native_int, native_float, H5T__conv_int_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_dbl", native_int, native_double, H5T__conv_int_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "int_ldbl", native_int, native_ldouble, H5T__conv_int_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From unsigned int to floats */
-    status |= H5T_register(H5T_PERS_HARD, "uint_flt", native_uint, native_float, H5T__conv_uint_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_dbl", native_uint, native_double, H5T__conv_uint_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "uint_ldbl", native_uint, native_ldouble, H5T__conv_uint_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_flt", native_uint, native_float, H5T__conv_uint_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_dbl", native_uint, native_double, H5T__conv_uint_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ldbl", native_uint, native_ldouble, H5T__conv_uint_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From long to floats */
-    status |= H5T_register(H5T_PERS_HARD, "long_flt", native_long, native_float, H5T__conv_long_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_dbl", native_long, native_double, H5T__conv_long_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "long_ldbl", native_long, native_ldouble, H5T__conv_long_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_flt", native_long, native_float, H5T__conv_long_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_dbl", native_long, native_double, H5T__conv_long_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "long_ldbl", native_long, native_ldouble, H5T__conv_long_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From unsigned long to floats */
-    status |= H5T_register(H5T_PERS_HARD, "ulong_flt", native_ulong, native_float, H5T__conv_ulong_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_dbl", native_ulong, native_double, H5T__conv_ulong_double, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ulong_ldbl", native_ulong, native_ldouble, H5T__conv_ulong_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_flt", native_ulong, native_float, H5T__conv_ulong_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_dbl", native_ulong, native_double, H5T__conv_ulong_double, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_ldbl", native_ulong, native_ldouble, H5T__conv_ulong_ldouble, H5AC_noio_dxpl_id, FALSE);
 
     /* From long long to floats */
-    status |= H5T_register(H5T_PERS_HARD, "llong_flt", native_llong, native_float, H5T__conv_llong_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "llong_dbl", native_llong, native_double, H5T__conv_llong_double, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_flt", native_llong, native_float, H5T__conv_llong_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_dbl", native_llong, native_double, H5T__conv_llong_double, H5AC_noio_dxpl_id, FALSE);
 #ifdef H5T_CONV_INTERNAL_LLONG_LDOUBLE
-    status |= H5T_register(H5T_PERS_HARD, "llong_ldbl", native_llong, native_ldouble, H5T__conv_llong_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ldbl", native_llong, native_ldouble, H5T__conv_llong_ldouble, H5AC_noio_dxpl_id, FALSE);
 #endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */
 
     /* From unsigned long long to floats */
-    status |= H5T_register(H5T_PERS_HARD, "ullong_flt", native_ullong, native_float, H5T__conv_ullong_float, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ullong_dbl", native_ullong, native_double, H5T__conv_ullong_double, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_flt", native_ullong, native_float, H5T__conv_ullong_float, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_dbl", native_ullong, native_double, H5T__conv_ullong_double, H5AC_noio_dxpl_id, FALSE);
 #ifdef H5T_CONV_INTERNAL_ULLONG_LDOUBLE
-    status |= H5T_register(H5T_PERS_HARD, "ullong_ldbl", native_ullong, native_ldouble, H5T__conv_ullong_ldouble, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_ldbl", native_ullong, native_ldouble, H5T__conv_ullong_ldouble, H5AC_noio_dxpl_id, FALSE);
 #endif /* H5T_CONV_INTERNAL_ULLONG_LDOUBLE */
 
     /* From floats to char */
-    status |= H5T_register(H5T_PERS_HARD, "flt_schar", native_float, native_schar, H5T__conv_float_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_schar", native_double, native_schar, H5T__conv_double_schar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_schar", native_ldouble, native_schar, H5T__conv_ldouble_schar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_schar", native_float, native_schar, H5T__conv_float_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_schar", native_double, native_schar, H5T__conv_double_schar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_schar", native_ldouble, native_schar, H5T__conv_ldouble_schar, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to unsigned char */
-    status |= H5T_register(H5T_PERS_HARD, "flt_uchar", native_float, native_uchar, H5T__conv_float_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_uchar", native_double, native_uchar, H5T__conv_double_uchar, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_uchar", native_ldouble, native_uchar, H5T__conv_ldouble_uchar, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_uchar", native_float, native_uchar, H5T__conv_float_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_uchar", native_double, native_uchar, H5T__conv_double_uchar, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_uchar", native_ldouble, native_uchar, H5T__conv_ldouble_uchar, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to short */
-    status |= H5T_register(H5T_PERS_HARD, "flt_short", native_float, native_short, H5T__conv_float_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_short", native_double, native_short, H5T__conv_double_short, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_short", native_ldouble, native_short, H5T__conv_ldouble_short, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_short", native_float, native_short, H5T__conv_float_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_short", native_double, native_short, H5T__conv_double_short, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_short", native_ldouble, native_short, H5T__conv_ldouble_short, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to unsigned short */
-    status |= H5T_register(H5T_PERS_HARD, "flt_ushort", native_float, native_ushort, H5T__conv_float_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_ushort", native_double, native_ushort, H5T__conv_double_ushort, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_ushort", native_ldouble, native_ushort, H5T__conv_ldouble_ushort, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_ushort", native_float, native_ushort, H5T__conv_float_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_ushort", native_double, native_ushort, H5T__conv_double_ushort, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_ushort", native_ldouble, native_ushort, H5T__conv_ldouble_ushort, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to int */
-    status |= H5T_register(H5T_PERS_HARD, "flt_int", native_float, native_int, H5T__conv_float_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_int", native_double, native_int, H5T__conv_double_int, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_int", native_ldouble, native_int, H5T__conv_ldouble_int, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_int", native_float, native_int, H5T__conv_float_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_int", native_double, native_int, H5T__conv_double_int, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_int", native_ldouble, native_int, H5T__conv_ldouble_int, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to unsigned int */
-    status |= H5T_register(H5T_PERS_HARD, "flt_uint", native_float, native_uint, H5T__conv_float_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_uint", native_double, native_uint, H5T__conv_double_uint, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_uint", native_ldouble, native_uint, H5T__conv_ldouble_uint, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_uint", native_float, native_uint, H5T__conv_float_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_uint", native_double, native_uint, H5T__conv_double_uint, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_uint", native_ldouble, native_uint, H5T__conv_ldouble_uint, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to long */
-    status |= H5T_register(H5T_PERS_HARD, "flt_long", native_float, native_long, H5T__conv_float_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_long", native_double, native_long, H5T__conv_double_long, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_long", native_ldouble, native_long, H5T__conv_ldouble_long, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_long", native_float, native_long, H5T__conv_float_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_long", native_double, native_long, H5T__conv_double_long, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_long", native_ldouble, native_long, H5T__conv_ldouble_long, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to unsigned long */
-    status |= H5T_register(H5T_PERS_HARD, "flt_ulong", native_float, native_ulong, H5T__conv_float_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_ulong", native_double, native_ulong, H5T__conv_double_ulong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_ulong", native_ldouble, native_ulong, H5T__conv_ldouble_ulong, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_ulong", native_float, native_ulong, H5T__conv_float_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_ulong", native_double, native_ulong, H5T__conv_double_ulong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_ulong", native_ldouble, native_ulong, H5T__conv_ldouble_ulong, H5AC_noio_dxpl_id, FALSE);
 
     /* From floats to long long */
-    status |= H5T_register(H5T_PERS_HARD, "flt_llong", native_float, native_llong, H5T__conv_float_llong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_llong", native_double, native_llong, H5T__conv_double_llong, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_llong", native_float, native_llong, H5T__conv_float_llong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_llong", native_double, native_llong, H5T__conv_double_llong, H5AC_noio_dxpl_id, FALSE);
 #ifdef H5T_CONV_INTERNAL_LDOUBLE_LLONG
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_llong", native_ldouble, native_llong, H5T__conv_ldouble_llong, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_llong", native_ldouble, native_llong, H5T__conv_ldouble_llong, H5AC_noio_dxpl_id, FALSE);
 #endif /* H5T_CONV_INTERNAL_LDOUBLE_LLONG */
 
     /* From floats to unsigned long long */
-    status |= H5T_register(H5T_PERS_HARD, "flt_ullong", native_float, native_ullong, H5T__conv_float_ullong, H5AC_ind_dxpl_id, FALSE);
-    status |= H5T_register(H5T_PERS_HARD, "dbl_ullong", native_double, native_ullong, H5T__conv_double_ullong, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "flt_ullong", native_float, native_ullong, H5T__conv_float_ullong, H5AC_noio_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_ullong", native_double, native_ullong, H5T__conv_double_ullong, H5AC_noio_dxpl_id, FALSE);
 #if H5T_CONV_INTERNAL_LDOUBLE_ULLONG
-    status |= H5T_register(H5T_PERS_HARD, "ldbl_ullong", native_ldouble, native_ullong, H5T__conv_ldouble_ullong, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "ldbl_ullong", native_ldouble, native_ullong, H5T__conv_ldouble_ullong, H5AC_noio_dxpl_id, FALSE);
 #endif /* H5T_CONV_INTERNAL_LDOUBLE_ULLONG */
 
     /*
@@ -1243,7 +1243,7 @@ H5T__init_package(void)
      * data types we use are not important as long as the source and
      * destination are equal.
      */
-    status |= H5T_register(H5T_PERS_HARD, "no-op", native_int, native_int, H5T__conv_noop, H5AC_ind_dxpl_id, FALSE);
+    status |= H5T_register(H5T_PERS_HARD, "no-op", native_int, native_int, H5T__conv_noop, H5AC_noio_dxpl_id, FALSE);
 
     /* Initialize the +/- Infinity values for floating-point types */
     status |= H5T__init_inf();
@@ -1365,7 +1365,7 @@ H5T_top_term_package(void)
                     H5T__print_stats(path, &nprint/*in,out*/);
                     path->cdata.command = H5T_CONV_FREE;
                     if((path->func)((hid_t)FAIL, (hid_t)FAIL, &(path->cdata), (size_t)0,
-                            (size_t)0, (size_t)0, NULL, NULL,H5AC_ind_dxpl_id) < 0) {
+                            (size_t)0, (size_t)0, NULL, NULL,H5AC_noio_dxpl_id) < 0) {
 #ifdef H5T_DEBUG
                         if (H5DEBUG(T)) {
                             fprintf(H5DEBUG(T), "H5T: conversion function "
@@ -2460,7 +2460,7 @@ H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no conversion function specified")
 
     /* Go register the function */
-    if(H5T_register(pers, name, src, dst, func, H5AC_ind_dxpl_id, TRUE) < 0)
+    if(H5T_register(pers, name, src, dst, func, H5AC_noio_dxpl_id, TRUE) < 0)
 	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register conversion function")
 
 done:
@@ -2599,7 +2599,7 @@ H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
     if(dst_id > 0 && (NULL == (dst = (H5T_t *)H5I_object_verify(dst_id, H5I_DATATYPE))))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "dst is not a data type")
 
-    if(H5T_unregister(pers, name, src, dst, func, H5AC_ind_dxpl_id) < 0)
+    if(H5T_unregister(pers, name, src, dst, func, H5AC_noio_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDELETE, FAIL, "internal unregister function failed")
 
 done:
@@ -2643,7 +2643,7 @@ H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
 	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "no address to receive cdata pointer")
 
     /* Find it */
-    if(NULL == (path = H5T_path_find(src, dst, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+    if(NULL == (path = H5T_path_find(src, dst, NULL, NULL, H5AC_noio_dxpl_id, FALSE)))
 	HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "conversion function not found")
 
     if(pcdata)
@@ -2939,7 +2939,7 @@ H5T_decode(const unsigned char *buf)
 	HGOTO_ERROR(H5E_DATATYPE, H5E_VERSION, NULL, "unknown version of encoded datatype")
 
     /* Decode the serialized datatype message */
-    if(NULL == (ret_value = (H5T_t *)H5O_msg_decode(f, H5AC_ind_dxpl_id, NULL, H5O_DTYPE_ID, buf)))
+    if(NULL == (ret_value = (H5T_t *)H5O_msg_decode(f, H5AC_noio_dxpl_id, NULL, H5O_DTYPE_ID, buf)))
 	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode object")
 
     /* Mark datatype as being in memory now */
@@ -3521,7 +3521,7 @@ H5T__free(H5T_t *dt)
         /* Remove the datatype from the list of opened objects in the file */
         if(H5FO_top_decr(dt->sh_loc.file, dt->sh_loc.u.loc.oh_addr) < 0)
             HGOTO_ERROR(H5E_DATATYPE, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
-        if(H5FO_delete(dt->sh_loc.file, H5AC_dxpl_id, dt->sh_loc.u.loc.oh_addr) < 0)
+        if(H5FO_delete(dt->sh_loc.file, H5AC_ind_read_dxpl_id, dt->sh_loc.u.loc.oh_addr) < 0)
             HGOTO_ERROR(H5E_DATATYPE, H5E_CANTRELEASE, FAIL, "can't remove datatype from list of open objects")
         if(H5O_close(&dt->oloc) < 0)
             HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to close data type object header")
@@ -4772,7 +4772,7 @@ H5T_compiler_conv(H5T_t *src, H5T_t *dst)
     FUNC_ENTER_NOAPI_NOINIT
 
     /* Find it */
-    if (NULL==(path=H5T_path_find(src, dst, NULL, NULL, H5AC_ind_dxpl_id, FALSE)))
+    if (NULL==(path=H5T_path_find(src, dst, NULL, NULL, H5AC_noio_dxpl_id, FALSE)))
 	HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "conversion function not found")
 
     ret_value = (htri_t)path->is_hard;
@@ -5522,7 +5522,7 @@ H5Tflush(hid_t type_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a committed datatype")
 
     /* To flush metadata and invoke flush callback if there is */
-    if(H5O_flush_common(&dt->oloc, type_id, H5AC_dxpl_id) < 0)
+    if(H5O_flush_common(&dt->oloc, type_id, H5AC_ind_read_dxpl_id) < 0)
         HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFLUSH, FAIL, "unable to flush datatype and object flush callback")
 
 done:
@@ -5558,7 +5558,7 @@ H5Trefresh(hid_t type_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a committed datatype")
 
     /* Call private function to refresh datatype object */
-    if ((H5O_refresh_metadata(type_id, dt->oloc, H5AC_dxpl_id)) < 0)
+    if ((H5O_refresh_metadata(type_id, dt->oloc, H5AC_ind_read_dxpl_id)) < 0)
         HGOTO_ERROR(H5E_DATATYPE, H5E_CANTLOAD, FAIL, "unable to refresh datatype")
 
 done:
diff --git a/src/H5TS.c b/src/H5TS.c
index 987bead..6a64a14 100644
--- a/src/H5TS.c
+++ b/src/H5TS.c
@@ -255,19 +255,18 @@ 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 *)HDcalloc(1, 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);
+        ret_value = pthread_setspecific(H5TS_cancel_key_g, (void *)cancel_counter);
     }
 
     if (cancel_counter->cancel_count == 0)
diff --git a/src/H5Tcommit.c b/src/H5Tcommit.c
index 07120f0..07fe371 100644
--- a/src/H5Tcommit.c
+++ b/src/H5Tcommit.c
@@ -99,7 +99,7 @@ H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id, hid_t lcpl_id,
 {
     H5G_loc_t	loc;                    /* Location to create datatype */
     H5T_t	*type;                  /* Datatype for ID */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */ 
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */ 
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -128,8 +128,8 @@ H5Tcommit2(hid_t loc_id, const char *name, hid_t type_id, hid_t lcpl_id,
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not datatype creation property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&tapl_id, H5P_DATATYPE_ACCESS, H5P_DATATYPE_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&tapl_id, H5P_CLS_TACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Commit the type */
     if(H5T__commit_named(&loc, name, type, lcpl_id, tcpl_id, tapl_id, dxpl_id) < 0)
@@ -246,7 +246,7 @@ H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id)
 {
     H5G_loc_t	loc;                    /* Group location for location */
     H5T_t	*type = NULL;           /* Datatype created */
-    hid_t       dxpl_id = H5AC_dxpl_id; /* dxpl used by library */
+    hid_t       dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl used by library */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -266,8 +266,8 @@ H5Tcommit_anon(hid_t loc_id, hid_t type_id, hid_t tcpl_id, hid_t tapl_id)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not datatype creation property list")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&tapl_id, H5P_DATATYPE_ACCESS, H5P_DATATYPE_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&tapl_id, H5P_CLS_TACC, &dxpl_id, loc_id, TRUE) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Commit the type */
     if(H5T__commit(loc.oloc->file, type, tcpl_id, dxpl_id) < 0)
@@ -529,7 +529,7 @@ H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id)
     H5O_type_t   obj_type;              /* Type of object at location */
     H5G_loc_t    type_loc;              /* Group object for datatype */
     hbool_t      obj_found = FALSE;     /* Object at 'name' found */
-    hid_t        dxpl_id = H5AC_ind_dxpl_id; /* dxpl to use to open datatype */
+    hid_t        dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl to use to open datatype */
     hid_t        ret_value = FAIL;      /* Return value */
 
     FUNC_ENTER_API(FAIL)
@@ -542,8 +542,8 @@ H5Topen2(hid_t loc_id, const char *name, hid_t tapl_id)
         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
 
     /* Verify access property list and get correct dxpl */
-    if(H5P_verify_and_set_dxpl(&tapl_id, H5P_DATATYPE_ACCESS, H5P_DATATYPE_ACCESS_DEFAULT, &dxpl_id) < 0)
-        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
+    if(H5P_verify_apl_and_dxpl(&tapl_id, H5P_CLS_TACC, &dxpl_id, loc_id, FALSE) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "can't set access and transfer property lists")
 
     /* Set up datatype location to fill in */
     type_loc.oloc = &oloc;
@@ -637,7 +637,7 @@ H5Tget_create_plist(hid_t dtype_id)
             HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
 
         /* Retrieve any object creation properties */
-        if(H5O_get_create_plist(&type->oloc, H5AC_ind_dxpl_id, new_plist) < 0)
+        if(H5O_get_create_plist(&type->oloc, H5AC_ind_read_dxpl_id, new_plist) < 0)
             HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "can't get object creation info")
     } /* end if */
 
diff --git a/src/H5Tdeprec.c b/src/H5Tdeprec.c
index cd4de1d..a769b72 100644
--- a/src/H5Tdeprec.c
+++ b/src/H5Tdeprec.c
@@ -118,7 +118,7 @@ H5Tcommit1(hid_t loc_id, const char *name, hid_t type_id)
 
     /* Commit the datatype to the file, using default property list values */
     if(H5T__commit_named(&loc, name, type, H5P_LINK_CREATE_DEFAULT,
-            H5P_DATATYPE_CREATE_DEFAULT, H5P_DATATYPE_ACCESS_DEFAULT, H5AC_dxpl_id) < 0)
+            H5P_DATATYPE_CREATE_DEFAULT, H5P_DATATYPE_ACCESS_DEFAULT, H5AC_ind_read_dxpl_id) < 0)
 	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to commit datatype")
 
 done:
@@ -152,7 +152,7 @@ H5Topen1(hid_t loc_id, const char *name)
     H5O_type_t   obj_type;              /* Type of object at location */
     H5G_loc_t    type_loc;              /* Group object for datatype */
     hbool_t      obj_found = FALSE;     /* Object at 'name' found */
-    hid_t        dxpl_id = H5AC_ind_dxpl_id; /* dxpl to use to open datatype */
+    hid_t        dxpl_id = H5AC_ind_read_dxpl_id; /* dxpl to use to open datatype */
     hid_t        ret_value = FAIL;
 
     FUNC_ENTER_API(FAIL)
diff --git a/src/H5Tnative.c b/src/H5Tnative.c
index 229fe94..9dbce09 100644
--- a/src/H5Tnative.c
+++ b/src/H5Tnative.c
@@ -358,7 +358,7 @@ H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_alig
                     HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to create enum type")
 
                 /* Find the conversion function */
-                if(NULL == (tpath = H5T_path_find(super_type, nat_super_type, NULL, NULL, H5P_DEFAULT, FALSE)))
+                if(NULL == (tpath = H5T_path_find(super_type, nat_super_type, NULL, NULL, H5AC_noio_dxpl_id, FALSE)))
                     HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to convert between src and dst data types")
 
                 /* Retrieve member info and insert members into new enum type */
@@ -372,7 +372,7 @@ H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_alig
                         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member value")
                     HDmemcpy(memb_value, tmp_memb_value, H5T_get_size(super_type));
 
-                    if(H5T_convert(tpath, super_type_id, nat_super_type_id, (size_t)1, (size_t)0, (size_t)0, memb_value, NULL, H5P_DATASET_XFER_DEFAULT) < 0)
+                    if(H5T_convert(tpath, super_type_id, nat_super_type_id, (size_t)1, (size_t)0, (size_t)0, memb_value, NULL, H5AC_noio_dxpl_id) < 0)
                         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member value")
 
                     if(H5T__enum_insert(new_type, memb_name, memb_value) < 0)
diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c
index 2abdf6f..0ed8209 100644
--- a/src/H5Tvlen.c
+++ b/src/H5Tvlen.c
@@ -465,7 +465,7 @@ H5T_vlen_seq_mem_write(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id, co
                 HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
           } /* end if */
         else {  /* Default to system malloc */
-            if(NULL==(vl.p=H5MM_malloc(len)))
+            if(NULL == (vl.p = HDmalloc(len)))
                 HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
           } /* end else */
 
@@ -691,7 +691,7 @@ H5T_vlen_str_mem_write(H5F_t H5_ATTR_UNUSED *f, hid_t H5_ATTR_UNUSED dxpl_id, co
             HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
       } /* end if */
     else {  /* Default to system malloc */
-        if(NULL==(t = (char *)H5MM_malloc((seq_len+1)*base_size)))
+        if(NULL == (t = (char *)HDmalloc((seq_len + 1) * base_size)))
             HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
       } /* end else */
 
@@ -1073,14 +1073,14 @@ H5T_vlen_reclaim_recurse(void *elem, const H5T_t *dt, H5MM_free_t free_func, voi
                     if(free_func != NULL)
                         (*free_func)(vl->p, free_info);
                     else
-                        H5MM_xfree(vl->p);
+                        HDfree(vl->p);
                 } /* end if */
             } else if(dt->shared->u.vlen.type == H5T_VLEN_STRING) {
                 /* Free the VL string */
                 if(free_func != NULL)
                     (*free_func)(*(char **)elem, free_info);
                 else
-                    H5MM_xfree(*(char **)elem);
+                    HDfree(*(char **)elem);
             } else {
                 HDassert(0 && "Invalid VL type");
             } /* end else */
diff --git a/src/H5Z.c b/src/H5Z.c
index 87fc803..e7a2186 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -626,7 +626,7 @@ H5Z__flush_file_cb(void *obj_ptr, hid_t H5_ATTR_UNUSED obj_id, void H5_ATTR_UNUS
     /* Call the flush routine for mounted file hierarchies. Do a global flush 
      * if the file is opened for write */
     if(H5F_ACC_RDWR & H5F_INTENT((H5F_t *)obj_ptr)) {
-        if(H5F_flush_mounts((H5F_t *)obj_ptr, H5AC_dxpl_id) < 0)
+        if(H5F_flush_mounts((H5F_t *)obj_ptr, H5AC_ind_read_dxpl_id) < 0)
             HGOTO_ERROR(H5E_PLINE, H5E_CANTFLUSH, FAIL, "unable to flush file hierarchy")
     } /* end if */
 
diff --git a/src/H5Zscaleoffset.c b/src/H5Zscaleoffset.c
index 0dc12a3..7c9dbf9 100644
--- a/src/H5Zscaleoffset.c
+++ b/src/H5Zscaleoffset.c
@@ -883,10 +883,8 @@ H5Z_set_local_scaleoffset(hid_t dcpl_id, hid_t type_id, hid_t space_id)
     if(NULL == (type = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
 
-#ifdef H5_CLEAR_MEMORY
     /* Initialize the parameters to a known state */
     HDmemset(cd_values, 0, sizeof(cd_values));
-#endif /* H5_CLEAR_MEMORY */
 
     /* Get the filter's current parameters */
     if(H5P_get_filter_by_id(dcpl_plist, H5Z_FILTER_SCALEOFFSET, &flags, &cd_nelmts, cd_values, (size_t)0, NULL, NULL) < 0)
@@ -1005,7 +1003,7 @@ H5Z_set_local_scaleoffset(hid_t dcpl_id, hid_t type_id, hid_t space_id)
             HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "cannot use C integer datatype for cast")
 
         /* Get dataset fill value and store in cd_values[] */
-        if(H5Z_scaleoffset_set_parms_fillval(dcpl_plist, type, scale_type, cd_values, need_convert, H5AC_ind_dxpl_id) < 0)
+        if(H5Z_scaleoffset_set_parms_fillval(dcpl_plist, type, scale_type, cd_values, need_convert, H5AC_noio_dxpl_id) < 0)
             HGOTO_ERROR(H5E_PLINE, H5E_CANTSET, FAIL, "unable to set fill value")
     } /* end else */
 
@@ -1266,13 +1264,11 @@ H5Z_filter_scaleoffset(unsigned flags, size_t cd_nelmts, const unsigned cd_value
         for(i = 0; i < sizeof(unsigned long long); i++)
             ((unsigned char *)outbuf)[5+i] = (unsigned char)((minval & ((unsigned long long)0xff << i*8)) >> i*8);
 
-#ifdef H5_CLEAR_MEMORY
         /* Zero out remaining, unused bytes */
         /* (Looks like an error in the original determination of how many
          *      bytes would be needed for parameters. - QAK, 2010/08/19)
          */
         HDmemset(outbuf + 13, 0, (size_t)8);
-#endif /* H5_CLEAR_MEMORY */
 
         /* special case: minbits equal to full precision */
         if(minbits == p.size * 8) {
diff --git a/src/H5Ztrans.c b/src/H5Ztrans.c
index 0a9a4da..2627a29 100644
--- a/src/H5Ztrans.c
+++ b/src/H5Ztrans.c
@@ -1032,7 +1032,7 @@ H5Z_xform_eval(H5Z_data_xform_t *data_xform_prop, void* array, size_t array_size
         /* Free the temporary arrays we used */
         if(data_xform_prop->dat_val_pointers->num_ptrs > 1)
             for(i=0; i<data_xform_prop->dat_val_pointers->num_ptrs; i++)
-                HDfree(data_xform_prop->dat_val_pointers->ptr_dat_val[i]);
+                H5MM_xfree(data_xform_prop->dat_val_pointers->ptr_dat_val[i]);
     } /* end else */
 
 done:
@@ -1042,7 +1042,7 @@ done:
 	if(data_xform_prop->dat_val_pointers->num_ptrs > 1)
 	    for(i = 0; i < data_xform_prop->dat_val_pointers->num_ptrs; i++)
 		if(data_xform_prop->dat_val_pointers->ptr_dat_val[i])
-		    HDfree(data_xform_prop->dat_val_pointers->ptr_dat_val[i]);
+		    H5MM_xfree(data_xform_prop->dat_val_pointers->ptr_dat_val[i]);
     } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 279120b..a9a8034 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -3,13 +3,12 @@
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
-/* Define if the memory buffers being written to disk should be cleared before
-   writing. */
-#undef CLEAR_MEMORY
-
 /* Define if C++ compiler recognizes offsetof */
 #undef CXX_HAVE_OFFSETOF
 
+/* Define if this is a debug build. */
+#undef DEBUG_BUILD
+
 /* Define the default plugins path to compile */
 #undef DEFAULT_PLUGINDIR
 
@@ -136,24 +135,6 @@
 /* Define to 1 if you have the `frexpl' function. */
 #undef HAVE_FREXPL
 
-/* Define to 1 if you have the `fseeko' function. */
-#undef HAVE_FSEEKO
-
-/* Define to 1 if you have the `fseeko64' function. */
-#undef HAVE_FSEEKO64
-
-/* Define to 1 if you have the `fstat64' function. */
-#undef HAVE_FSTAT64
-
-/* Define to 1 if you have the `ftello' function. */
-#undef HAVE_FTELLO
-
-/* Define to 1 if you have the `ftello64' function. */
-#undef HAVE_FTELLO64
-
-/* Define to 1 if you have the `ftruncate64' function. */
-#undef HAVE_FTRUNCATE64
-
 /* Define if the compiler understands the __FUNCTION__ keyword */
 #undef HAVE_FUNCTION
 
@@ -181,7 +162,7 @@
 /* Define if the compiler understands inline */
 #undef HAVE_INLINE
 
-/* Define if library will contain instrumentation to detect correct
+/* Define if parallel library will contain instrumentation to detect correct
    optimization operation */
 #undef HAVE_INSTRUMENTED_LIBRARY
 
@@ -221,9 +202,6 @@
 /* Define to 1 if you have the `longjmp' function. */
 #undef HAVE_LONGJMP
 
-/* Define to 1 if you have the `lseek64' function. */
-#undef HAVE_LSEEK64
-
 /* Define to 1 if you have the `lstat' function. */
 #undef HAVE_LSTAT
 
@@ -287,9 +265,6 @@
 /* Define to 1 if you have the `srandom' function. */
 #undef HAVE_SRANDOM
 
-/* Define to 1 if you have the `stat64' function. */
-#undef HAVE_STAT64
-
 /* Define if struct stat has the st_blocks field */
 #undef HAVE_STAT_ST_BLOCKS
 
@@ -404,7 +379,7 @@
 /* Define if the compiler understands __inline__ */
 #undef HAVE___INLINE__
 
-/* Define if HDF5's high-level library headers should be included in hdf5.h */
+/* Define if the high-level library headers should be included in hdf5.h */
 #undef INCLUDE_HL
 
 /* Define if your system can convert long double to (unsigned) long long
@@ -426,6 +401,9 @@
 /* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
+/* Define to enable internal memory allocation sanity checking. */
+#undef MEMORY_ALLOC_SANITY_CHECK
+
 /* Define if the metadata trace file code is to be compiled in */
 #undef METADATA_TRACE_FILE
 
@@ -525,9 +503,6 @@
 /* The size of `long long', as computed by sizeof. */
 #undef SIZEOF_LONG_LONG
 
-/* The size of `off64_t', as computed by sizeof. */
-#undef SIZEOF_OFF64_T
-
 /* The size of `off_t', as computed by sizeof. */
 #undef SIZEOF_OFF_T
 
@@ -607,6 +582,9 @@
 /* Define using v1.6 public API symbols by default */
 #undef USE_16_API_DEFAULT
 
+/* Define using v1.8 public API symbols by default */
+#undef USE_18_API_DEFAULT
+
 /* 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
    internal free list manager code. */
diff --git a/src/H5private.h b/src/H5private.h
index c536566..fa5a114 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -870,58 +870,37 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #endif /* HDfrexpl */
 /* fscanf() variable arguments */
 #ifndef HDfseek
-    #ifdef H5_HAVE_FSEEKO
-             #define HDfseek(F,O,W)  fseeko(F,O,W)
-    #else /* H5_HAVE_FSEEKO */
-             #define HDfseek(F,O,W)  fseek(F,O,W)
-    #endif /* H5_HAVE_FSEEKO */
+    #define HDfseek(F,O,W)  fseeko(F,O,W)
 #endif /* HDfseek */
 #ifndef HDfsetpos
     #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
- * xxx64 versions if available.
+#ifndef HDfstat
+    #define HDfstat(F,B)        fstat(F,B)
+#endif /* HDfstat */
+#ifndef HDlstat
+    #define HDlstat(S,B)    lstat(S,B)
+#endif /* HDlstat */
+#ifndef HDstat
+    #define HDstat(S,B)    stat(S,B)
+#endif /* HDstat */
+
+#ifndef H5_HAVE_WIN32_API
+/* These definitions differ in Windows and are defined in
+ * H5win32defs for that platform.
  */
-#if !defined(HDfstat) || !defined(HDstat) || !defined(HDlstat)
-    #if H5_SIZEOF_OFF_T!=8 && H5_SIZEOF_OFF64_T==8 && defined(H5_HAVE_STAT64)
-        #ifndef HDfstat
-            #define HDfstat(F,B)        fstat64(F,B)
-        #endif /* HDfstat */
-        #ifndef HDlstat
-            #define HDlstat(S,B)    lstat64(S,B)
-        #endif /* HDlstat */
-        #ifndef HDstat
-            #define HDstat(S,B)    stat64(S,B)
-        #endif /* HDstat */
-        typedef struct stat64       h5_stat_t;
-        typedef off64_t             h5_stat_size_t;
-        #define H5_SIZEOF_H5_STAT_SIZE_T H5_SIZEOF_OFF64_T
-    #else /* H5_SIZEOF_OFF_T!=8 && ... */
-        #ifndef HDfstat
-            #define HDfstat(F,B)        fstat(F,B)
-        #endif /* HDfstat */
-        #ifndef HDlstat
-            #define HDlstat(S,B)    lstat(S,B)
-        #endif /* HDlstat */
-        #ifndef HDstat
-            #define HDstat(S,B)    stat(S,B)
-        #endif /* HDstat */
-        typedef struct stat         h5_stat_t;
-        typedef off_t               h5_stat_size_t;
-        #define H5_SIZEOF_H5_STAT_SIZE_T H5_SIZEOF_OFF_T
-    #endif /* H5_SIZEOF_OFF_T!=8 && ... */
-#endif /* !defined(HDfstat) || !defined(HDstat) */
+typedef struct stat         h5_stat_t;
+typedef off_t               h5_stat_size_t;
+#define HDoff_t             off_t
+#endif /* H5_HAVE_WIN32_API */
+
+#define H5_SIZEOF_H5_STAT_SIZE_T H5_SIZEOF_OFF_T
 
 #ifndef HDftell
-    #define HDftell(F)    ftell(F)
+    #define HDftell(F)    ftello(F)
 #endif /* HDftell */
 #ifndef HDftruncate
-  #ifdef H5_HAVE_FTRUNCATE64
-    #define HDftruncate(F,L)        ftruncate64(F,L)
-  #else
     #define HDftruncate(F,L)        ftruncate(F,L)
-  #endif
 #endif /* HDftruncate */
 #ifndef HDfwrite
     #define HDfwrite(M,Z,N,F)  fwrite(M,Z,N,F)
@@ -1064,15 +1043,8 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #ifndef HDlongjmp
     #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
-    #else
-        #define HDlseek(F,O,W)  lseek(F,O,W)
-  #define HDoff_t    off_t
-    #endif
+    #define HDlseek(F,O,W)  lseek(F,O,W)
 #endif /* HDlseek */
 #ifndef HDmalloc
     #define HDmalloc(Z)    malloc(Z)
@@ -1217,6 +1189,9 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #ifndef HDsetbuf
     #define HDsetbuf(F,S)    setbuf(F,S)
 #endif /* HDsetbuf */
+#ifndef HDsetenv
+    #define HDsetenv(N,V,O)    setenv(N,V,O)
+#endif /* HDsetenv */
 #ifndef HDsetgid
     #define HDsetgid(G)    setgid(G)
 #endif /* HDsetgid */
@@ -1283,7 +1258,9 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #ifndef HDsnprintf
     #define HDsnprintf    snprintf /*varargs*/
 #endif /* HDsnprintf */
-/* sprintf() variable arguments */
+#ifndef HDsprintf
+    #define HDsprintf    sprintf /*varargs*/
+#endif /* HDsprintf */
 #ifndef HDsqrt
     #define HDsqrt(X)    sqrt(X)
 #endif /* HDsqrt */
@@ -1699,6 +1676,10 @@ typedef struct H5_debug_t {
     H5_debug_open_stream_t *open_stream; /* Stack of open output streams */
 } H5_debug_t;
 
+#ifdef H5_HAVE_PARALLEL
+extern hbool_t H5_coll_api_sanity_check_g;
+#endif /* H5_HAVE_PARALLEL */
+
 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. */
@@ -2582,7 +2563,8 @@ H5_DLL uint32_t H5_hash_string(const char *str);
 H5_DLL time_t H5_make_time(struct tm *tm);
 
 /* Functions for building paths, etc. */
-H5_DLL herr_t   H5_build_extpath(const char *, char ** /*out*/ );
+H5_DLL herr_t   H5_build_extpath(const char *name, char **extpath /*out*/);
+H5_DLL herr_t   H5_combine_path(const char *path1, const char *path2, char **full_name /*out*/);
 
 /* Functions for debugging */
 H5_DLL herr_t H5_buffer_dump(FILE *stream, int indent, const uint8_t *buf,
diff --git a/src/H5public.h b/src/H5public.h
index 406cf58..ae89e2a 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -95,9 +95,9 @@ extern "C" {
 #define H5_VERS_MAJOR	1	/* For major interface/format changes  	     */
 #define H5_VERS_MINOR	10	/* For minor interface/format changes  	     */
 #define H5_VERS_RELEASE	0	/* For tweaks, bug-fixes, or development     */
-#define H5_VERS_SUBRELEASE "alpha1"	/* For pre-releases like snap0       */
+#define H5_VERS_SUBRELEASE "pre1"	/* For pre-releases like snap0       */
 				/* Empty string for real releases.           */
-#define H5_VERS_INFO    "HDF5 library version: 1.10.0-alpha1"      /* Full version string */
+#define H5_VERS_INFO    "HDF5 library version: 1.10.0-pre1"      /* 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 4baebc5..eb09b15 100644
--- a/src/H5system.c
+++ b/src/H5system.c
@@ -757,7 +757,7 @@ done:
  */
 int
 Wgettimeofday(struct timeval *tv, struct timezone *tz)
- {
+{
   union {
     unsigned long long ns100; /*time since 1 Jan 1601 in 100ns units */
     FILETIME ft;
@@ -783,7 +783,42 @@ Wgettimeofday(struct timeval *tv, struct timezone *tz)
   /* Always return 0 as per Open Group Base Specifications Issue 6.
      Do not set errno on error.  */
   return 0;
-}
+} /* end Wgettimeofday() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    Wsetenv
+ *
+ * Purpose:     Wrapper function for setenv on Windows systems.
+ *              Interestingly, getenv *is* available in the Windows
+ *              POSIX layer, just not setenv.
+ *
+ * Return:      Success:    0
+ *              Failure:    non-zero error code
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+Wsetenv(const char *name, const char *value, int overwrite)
+{
+    size_t bufsize;
+    errno_t err;
+
+    /* If we're not overwriting, check if the environment variable exists.
+     * If it does (i.e.: the required buffer size to store the variable's
+     * value is non-zero), then return an error code.
+     */
+    if(!overwrite) {
+        err = getenv_s(&bufsize, NULL, 0, name);
+        if (err || bufsize)
+            return (int)err;
+    } /* end if */
+
+    return (int)_putenv_s(name, value);
+} /* end Wsetenv() */
 
 #ifdef H5_HAVE_WINSOCK2_H
 #pragma comment(lib, "advapi32.lib")
@@ -881,26 +916,25 @@ Wflock(int fd, int operation) {
 
 

 /*-------------------------------------------------------------------------
- * Function: H5_build_extpath
+ * Function:    H5_build_extpath
  *
- * Purpose:  To build the path for later searching of target file for external
- *    link.  This path can be either:
+ * Purpose:     To build the path for later searching of target file for external
+ *              links and external files.  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:      SUCCEED/FAIL
  *
  * Programmer:  Vailin Choi
- *    April 2, 2008
+ *              April 2, 2008
  *
  *-------------------------------------------------------------------------
  */
 #define MAX_PATH_LEN     1024
 
 herr_t
-H5_build_extpath(const char *name, char **extpath/*out*/)
+H5_build_extpath(const char *name, char **extpath /*out*/)
 {
     char        *full_path = NULL;      /* Pointer to the full path, as built or passed in */
     char        *cwdpath = NULL;        /* Pointer to the current working directory path */
@@ -998,5 +1032,80 @@ done:
         H5MM_xfree(new_name);
 
     FUNC_LEAVE_NOAPI(ret_value)
-} /* H5_build_extpath() */
+} /* end H5_build_extpath() */
+
+

+/*--------------------------------------------------------------------------
+ * Function:    H5_combine_path
+ *
+ * Purpose:     If path2 is relative, interpret path2 as relative to path1
+ *              and store the result in full_name. Otherwise store path2
+ *              in full_name.
+ *
+ * Return:      SUCCEED/FAIL
+ *
+ * Programmer:  Steffen Kiess
+ *              June 22, 2015
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5_combine_path(const char* path1, const char* path2, char **full_name /*out*/)
+{
+    size_t      path1_len;            /* length of path1 */
+    size_t      path2_len;            /* length of path2 */
+    herr_t      ret_value = SUCCEED;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT
+
+    HDassert(path1);
+    HDassert(path2);
+
+    path1_len = HDstrlen(path1);
+    path2_len = HDstrlen(path2);
+
+    if(*path1 == '\0' || H5_CHECK_ABSOLUTE(path2)) {
+
+        /* If path1 is empty or path2 is absolute, simply use path2 */
+        if(NULL == (*full_name = (char *)H5MM_strdup(path2)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    } /* end if */ 
+    else if(H5_CHECK_ABS_PATH(path2)) {
+
+        /* On windows path2 is a path absolute name */
+        if (H5_CHECK_ABSOLUTE(path1) || H5_CHECK_ABS_DRIVE(path1)) {
+            /* path1 is absolute or drive absolute and path2 is path absolute.
+             * Use the drive letter of path1 + path2
+             */
+            if(NULL == (*full_name = (char *)H5MM_malloc(path2_len + 3)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate path2 buffer")
+            HDsnprintf(*full_name, (path2_len + 3), "%c:%s", path1[0], path2);
+        } /* end if */
+        else {
+            /* On windows path2 is path absolute name ("\foo\bar"),
+             * path1 does not have a drive letter (i.e. is "a\b" or "\a\b").
+             * Use path2.
+             */
+            if(NULL == (*full_name = (char *)H5MM_strdup(path2)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+        } /* end else */
+
+    } /* end else if */
+    else {
+
+        /* Relative path2:
+         * Allocate a buffer to hold path1 + path2 + possibly the delimiter
+         *      + terminating null byte
+         */
+        if(NULL == (*full_name = (char *)H5MM_malloc(path1_len + path2_len + 2)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate filename buffer")
+
+        /* Compose the full file name */
+        HDsnprintf(*full_name, (path1_len + path2_len + 2), "%s%s%s", path1,
+                   (H5_CHECK_DELIMITER(path1[path1_len - 1]) ? "" : H5_DIR_SEPS), path2);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5_combine_name() */
 
diff --git a/src/H5win32defs.h b/src/H5win32defs.h
index e84def9..2a0f22d 100644
--- a/src/H5win32defs.h
+++ b/src/H5win32defs.h
@@ -71,21 +71,24 @@ struct timezone {
 };
 
 #ifdef __cplusplus
-        extern "C" {
+extern "C" {
 #endif /* __cplusplus */
-        H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
-        H5_DLL int Wflock(int fd, int operation);
-        H5_DLL char* Wgetlogin(void);
-        H5_DLL int c99_snprintf(char* str, size_t size, const char* format, ...);
-        H5_DLL int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap);
+    H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
+    H5_DLL int Wsetenv(const char *name, const char *value, int overwrite);
+    H5_DLL int Wflock(int fd, int operation);
+    H5_DLL char* Wgetlogin(void);
+    H5_DLL int c99_snprintf(char* str, size_t size, const char* format, ...);
+    H5_DLL int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap);
 #ifdef __cplusplus
-        }
+}
 #endif /* __cplusplus */
+
 #define HDgettimeofday(V,Z) Wgettimeofday(V,Z)
+#define HDsetenv(N,V,O)     Wsetenv(N,V,O)
 #define HDflock(F,L)        Wflock(F,L)
 #define HDgetlogin()        Wgetlogin()
 #define HDsnprintf          c99_snprintf /*varargs*/
-#define HDvsnprintf         c99_vsnprintf
+#define HDvsnprintf         c99_vsnprintf /*varargs*/
 
 #endif /* H5_HAVE_VISUAL_STUDIO */
 
@@ -98,5 +101,7 @@ struct timezone {
 #ifndef H5_HAVE_MINGW
 #define HDftruncate(F,L)    _chsize_s(F,L)
 #define HDfseek(F,O,W)      _fseeki64(F,O,W)
-#endif
+#endif /* H5_HAVE_MINGW */
+
 #endif /* H5_HAVE_WIN32_API */
+
diff --git a/src/Makefile.in b/src/Makefile.in
index 7cadd60..1811cff 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -119,10 +119,23 @@ TESTS =
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \
@@ -544,18 +557,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -568,7 +585,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -606,10 +622,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -620,6 +640,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -630,8 +651,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -646,6 +679,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -653,6 +688,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -676,6 +712,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -691,7 +728,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -700,8 +739,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -780,6 +821,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.in
index 2355543..b54257f 100644
--- a/src/libhdf5.settings.in
+++ b/src/libhdf5.settings.in
@@ -3,40 +3,47 @@
 
 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: @H5_VERSION@
+                  Configured on: @CONFIG_DATE@
+                  Configured by: @CONFIG_USER@
+                    Host system: @host_cpu at -@host_vendor at -@host_os@
+              Uname information: @UNAME_INFO@
+                       Byte sex: @BYTESEX@
+             Installation point: @prefix@
 
 Compiling Options:
 ------------------
-               Compilation Mode: @CONFIG_MODE@
-                     C Compiler: @CC_VERSION@
-                         CFLAGS: @CFLAGS@
-                      H5_CFLAGS: @H5_CFLAGS@
-                      AM_CFLAGS: @AM_CFLAGS@
-                       CPPFLAGS: @CPPFLAGS@
-                    H5_CPPFLAGS: @H5_CPPFLAGS@
-                    AM_CPPFLAGS: @AM_CPPFLAGS@
-               Shared C Library: @enable_shared@
-               Static C Library: @enable_static@
+                     Build Mode: @BUILD_MODE@
+              Debugging Symbols: @SYMBOLS@
+                        Asserts: @ASSERTS@
+                      Profiling: @PROFILING@
+             Optimization Level: @OPTIMIZATION@
+
+Linking Options:
+----------------
+                      Libraries: @STATIC_SHARED@
   Statically Linked Executables: @LT_STATIC_EXEC@
                         LDFLAGS: @LDFLAGS@
                      H5_LDFLAGS: @H5_LDFLAGS@
                      AM_LDFLAGS: @AM_LDFLAGS@
- 	 	Extra libraries: @LIBS@
- 		       Archiver: @AR@
- 		 	 Ranlib: @RANLIB@
- 	      Debugged Packages: @DEBUG_PKG@
-		    API Tracing: @TRACE_API@
+                Extra libraries: @LIBS@
+                       Archiver: @AR@
+                         Ranlib: @RANLIB@
 
 Languages:
 ----------
+                              C: yes
+                     C Compiler: @CC_VERSION@
+                       CPPFLAGS: @CPPFLAGS@
+                    H5_CPPFLAGS: @H5_CPPFLAGS@
+                    AM_CPPFLAGS: @AM_CPPFLAGS@
+                        C Flags: @CFLAGS@
+                     H5 C Flags: @H5_CFLAGS@
+                     AM C Flags: @AM_CFLAGS@
+               Shared C Library: @enable_shared@
+               Static C Library: @enable_static@
+
+
                         Fortran: @HDF_FORTRAN@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @FC_VERSION@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @FCFLAGS@
@@ -53,19 +60,25 @@ Languages:
 @BUILD_CXX_CONDITIONAL_TRUE@             Shared C++ Library: @enable_shared@
 @BUILD_CXX_CONDITIONAL_TRUE@             Static C++ Library: @enable_static@
 
+                            JAVA: @HDF_JAVA@
+ at BUILD_JAVA_CONDITIONAL_TRUE@                   JAVA Compiler: @JAVA_VERSION@
+
 Features:
 ---------
                   Parallel HDF5: @PARALLEL@
-             High Level library: @HDF5_HL@
+             High-level library: @HDF5_HL@
                    Threadsafety: @THREADSAFE@
-            Default API Mapping: @DEFAULT_API_VERSION@
- With Deprecated Public Symbols: @DEPRECATED_SYMBOLS@
+            Default API mapping: @DEFAULT_API_VERSION@
+ With deprecated public symbols: @DEPRECATED_SYMBOLS@
          I/O filters (external): @EXTERNAL_FILTERS@
                             MPE: @MPE@
                      Direct VFD: @DIRECT_VFD@
                         dmalloc: @HAVE_DMALLOC@
-Clear file buffers before write: @CLEARFILEBUF@
+ Packages w/ extra debug output: @INTERNAL_DEBUG_OUTPUT@
+                    API tracing: @TRACE_API@
            Using memory checker: @USINGMEMCHECKER@
-         Function Stack Tracing: @CODESTACK@
-      Strict File Format Checks: @STRICT_FORMAT_CHECKS@
-   Optimization Instrumentation: @INSTRUMENT@
+Memory allocation sanity checks: @MEMORYALLOCSANITYCHECK@
+            Metadata trace file: @METADATATRACEFILE@
+         Function stack tracing: @CODESTACK@
+      Strict file format checks: @STRICT_FORMAT_CHECKS@
+   Optimization instrumentation: @INSTRUMENT_LIBRARY@
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 3a69371..2997fe4 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -51,7 +51,7 @@ if (BUILD_SHARED_LIBS)
     target_link_libraries (${HDF5_TEST_LIBSH_TARGET} "wsock32.lib")
   endif (MINGW)
   target_link_libraries (${HDF5_TEST_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
-  H5_SET_LIB_OPTIONS (${HDF5_TEST_LIBSH_TARGET} ${HDF5_TEST_LIB_NAME} SHARED)
+  H5_SET_LIB_OPTIONS (${HDF5_TEST_LIBSH_TARGET} ${HDF5_TEST_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
   set_target_properties (${HDF5_TEST_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/test
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
@@ -67,6 +67,85 @@ if (BUILD_SHARED_LIBS)
 endif (BUILD_SHARED_LIBS)
 
 #-----------------------------------------------------------------------------
+# Build SWMR test programs
+#
+# These programs are currently not used in CMake tests but we build them
+# here anyway for manual testing and to ensure that the code compiles
+# on all platforms.
+#-----------------------------------------------------------------------------
+MACRO (ADD_H5_SWMR_EXE file)
+  add_executable (${file}
+    ${HDF5_TEST_SOURCE_DIR}/${file}.c
+    ${HDF5_TEST_SOURCE_DIR}/swmr_common.c
+    ${HDF5_TEST_SOURCE_DIR}/swmr_common.h
+  )
+  TARGET_NAMING (${file} STATIC)
+  TARGET_C_PROPERTIES (${file} STATIC " " " ")
+  target_link_libraries (${file} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
+  set_target_properties (${file} PROPERTIES FOLDER test)
+  if (BUILD_SHARED_LIBS)
+    add_executable (${file}-shared
+      ${HDF5_TEST_SOURCE_DIR}/${file}.c
+      ${HDF5_TEST_SOURCE_DIR}/swmr_common.c
+      ${HDF5_TEST_SOURCE_DIR}/swmr_common.h
+    )
+    TARGET_NAMING (${file}-shared SHARED)
+    TARGET_C_PROPERTIES (${file}-shared SHARED " " " ")
+    target_link_libraries (${file}-shared ${HDF5_TEST_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
+    set_target_properties (${file}-shared PROPERTIES FOLDER test)
+  endif (BUILD_SHARED_LIBS)
+ENDMACRO (ADD_H5_SWMR_EXE file)
+
+set (H5_SWMR_TESTS
+    swmr_addrem_writer
+    swmr_check_compat_vfd
+    swmr_generator
+    swmr_reader
+    swmr_remove_reader
+    swmr_remove_writer
+    swmr_sparse_reader
+    swmr_sparse_writer
+    swmr_start_write
+    swmr_writer
+)
+
+foreach (test ${H5_SWMR_TESTS})
+  ADD_H5_SWMR_EXE(${test})
+endforeach (test ${H5_SWMR_TESTS})
+
+#-----------------------------------------------------------------------------
+# Build VDS SWMR test programs
+#
+# These programs are currently not used in CMake tests but we build them
+# here anyway for manual testing and to ensure that the code compiles
+# on all platforms.
+#-----------------------------------------------------------------------------
+MACRO (ADD_H5_VDS_SWMR_EXE file)
+  add_executable (${file} ${HDF5_TEST_SOURCE_DIR}/${file}.c)
+  TARGET_NAMING (${file} STATIC)
+  TARGET_C_PROPERTIES (${file} STATIC " " " ")
+  target_link_libraries (${file} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
+  set_target_properties (${file} PROPERTIES FOLDER test)
+  if (BUILD_SHARED_LIBS)
+    add_executable (${file}-shared ${HDF5_TEST_SOURCE_DIR}/${file}.c)
+    TARGET_NAMING (${file}-shared SHARED)
+    TARGET_C_PROPERTIES (${file}-shared SHARED " " " ")
+    target_link_libraries (${file}-shared ${HDF5_TEST_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
+    set_target_properties (${file}-shared PROPERTIES FOLDER test)
+  endif (BUILD_SHARED_LIBS)
+ENDMACRO (ADD_H5_VDS_SWMR_EXE file)
+
+set (H5_VDS_SWMR_TESTS
+    vds_swmr_gen
+    vds_swmr_reader
+    vds_swmr_writer
+)
+
+foreach (test ${H5_VDS_SWMR_TESTS})
+  ADD_H5_VDS_SWMR_EXE(${test})
+endforeach (test ${H5_VDS_SWMR_TESTS})
+
+#-----------------------------------------------------------------------------
 # If plugin library tests can be tested
 #-----------------------------------------------------------------------------
   # make plugins dir
@@ -74,7 +153,7 @@ endif (BUILD_SHARED_LIBS)
   file (MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/testdir2")
 
   #-----------------------------------------------------------------------------
-  # Define Test Library Sources
+  # Define Plugin Test Sources
   #-----------------------------------------------------------------------------
   set (TEST_PLUGIN_LIBS
       dynlib1
@@ -94,12 +173,7 @@ endif (BUILD_SHARED_LIBS)
     add_library (${HDF5_TEST_PLUGIN_LIB_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${test_lib}.c)
     TARGET_C_PROPERTIES (${HDF5_TEST_PLUGIN_LIB_TARGET} SHARED " " " ")
     target_link_libraries (${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
-    H5_SET_LIB_OPTIONS (
-        ${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_PLUGIN_LIB_NAME}
-        SHARED
-        HDF5_TEST_PLUGIN_LIB_NAME_RELEASE
-        HDF5_TEST_PLUGIN_LIB_NAME_DEBUG
-    )
+    H5_SET_LIB_OPTIONS (${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_PLUGIN_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
     set_target_properties (${HDF5_TEST_PLUGIN_LIB_TARGET} PROPERTIES FOLDER libraries/TEST_PLUGIN)
 
     #-----------------------------------------------------------------------------
@@ -125,12 +199,7 @@ endif (BUILD_SHARED_LIBS)
     add_library (${HDF5_TEST_PLUGIN_LIB_TARGET} SHARED ${HDF5_TEST_SOURCE_DIR}/${test_lib}.c)
     TARGET_C_PROPERTIES (${HDF5_TEST_PLUGIN_LIB_TARGET} SHARED " " " ")
     target_link_libraries (${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
-    H5_SET_LIB_OPTIONS (
-        ${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_PLUGIN_LIB_NAME}
-        SHARED
-        HDF5_TEST_PLUGIN_LIB_NAME_RELEASE
-        HDF5_TEST_PLUGIN_LIB_NAME_DEBUG
-    )
+    H5_SET_LIB_OPTIONS (${HDF5_TEST_PLUGIN_LIB_TARGET} ${HDF5_TEST_PLUGIN_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
     set_target_properties (${HDF5_TEST_PLUGIN_LIB_TARGET} PROPERTIES FOLDER libraries/TEST_PLUGIN)
 
     #-----------------------------------------------------------------------------
diff --git a/test/Makefile.am b/test/Makefile.am
index cef7c75..127c891 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -157,7 +157,7 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 \
     chunk_expand.h5 layout_extend.h5 swmr_fail.h5 partial_chunks.h5 \
     copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 frspace.h5 links*.h5 \
     sys_file1 tfile[1-7].h5 th5s[1-4].h5 lheap.h5 fheap.h5 ohdr.h5 \
-    stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \
+    stab.h5 extern_[1-5].h5 extern_[1-4][rw].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[0-9].h5 dtypes1[0].h5 dt_arith[1-2].h5 tattr.h5 \
@@ -177,12 +177,12 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 \
     new_multi_file_v16-r.h5 new_multi_file_v16-s.h5                  \
     split_get_file_image_test-m.h5 split_get_file_image_test-r.h5    \
     file_image_core_test.h5.copy unregister_filter_1.h5 unregister_filter_2.h5 \
-    vds_virt.h5 vds_src_[0-1].h5 \
+    vds_virt.h5 vds_dapl.h5 vds_src_[0-1].h5 \
     swmr_data.h5 use_use_append_chunk.h5 use_append_mchunks.h5 use_disable_mdc_flushes.h5     \
     flushrefresh.h5 flushrefresh_VERIFICATION_START                  \
     flushrefresh_VERIFICATION_CHECKPOINT1 flushrefresh_VERIFICATION_CHECKPOINT2 \
     flushrefresh_VERIFICATION_DONE atomic_data accum_swmr_big.h5 ohdr_swmr.h5 \
-    test_swmr*.h5 cache_logging.h5 vds_swmr.h5 vds_swmr_src_*.h5 \
+    tbogus.h5.copy test_swmr*.h5 cache_logging.h5 vds_swmr.h5 vds_swmr_src_*.h5 \
     earray_hdr_fd.h5
 
 # Sources for testhdf5 executable
diff --git a/test/Makefile.in b/test/Makefile.in
index b7fe0c9..8a2aad6 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -128,10 +128,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -962,18 +975,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -986,7 +1003,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -1024,10 +1040,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -1038,6 +1058,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -1048,8 +1069,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -1064,6 +1097,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -1071,6 +1106,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -1094,6 +1130,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -1109,7 +1146,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -1118,8 +1157,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -1198,6 +1239,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
@@ -1244,8 +1286,8 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2 accum.h5 \
 	layout_extend.h5 swmr_fail.h5 partial_chunks.h5 \
 	copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 \
 	frspace.h5 links*.h5 sys_file1 tfile[1-7].h5 th5s[1-4].h5 \
-	lheap.h5 fheap.h5 ohdr.h5 stab.h5 extern_[1-3].h5 \
-	extern_[1-4][ab].raw gheap[0-4].h5 dt_arith[1-2] links.h5 \
+	lheap.h5 fheap.h5 ohdr.h5 stab.h5 extern_[1-5].h5 \
+	extern_[1-4][rw].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[0-9].h5 dtypes1[0].h5 dt_arith[1-2].h5 tattr.h5 \
@@ -1266,15 +1308,15 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.clog2 accum.h5 \
 	new_multi_file_v16-r.h5 new_multi_file_v16-s.h5 \
 	split_get_file_image_test-m.h5 split_get_file_image_test-r.h5 \
 	file_image_core_test.h5.copy unregister_filter_1.h5 \
-	unregister_filter_2.h5 vds_virt.h5 vds_src_[0-1].h5 \
-	swmr_data.h5 use_use_append_chunk.h5 use_append_mchunks.h5 \
-	use_disable_mdc_flushes.h5 flushrefresh.h5 \
-	flushrefresh_VERIFICATION_START \
+	unregister_filter_2.h5 vds_virt.h5 vds_dapl.h5 \
+	vds_src_[0-1].h5 swmr_data.h5 use_use_append_chunk.h5 \
+	use_append_mchunks.h5 use_disable_mdc_flushes.h5 \
+	flushrefresh.h5 flushrefresh_VERIFICATION_START \
 	flushrefresh_VERIFICATION_CHECKPOINT1 \
 	flushrefresh_VERIFICATION_CHECKPOINT2 \
 	flushrefresh_VERIFICATION_DONE atomic_data accum_swmr_big.h5 \
-	ohdr_swmr.h5 test_swmr*.h5 cache_logging.h5 vds_swmr.h5 \
-	vds_swmr_src_*.h5 earray_hdr_fd.h5
+	ohdr_swmr.h5 tbogus.h5.copy test_swmr*.h5 cache_logging.h5 \
+	vds_swmr.h5 vds_swmr_src_*.h5 earray_hdr_fd.h5
 
 # Test scripts--
 #       testerror.sh: err_compat, error_test
diff --git a/test/accum.c b/test/accum.c
index 751e5df..1fcd051 100644
--- a/test/accum.c
+++ b/test/accum.c
@@ -63,8 +63,8 @@ unsigned test_swmr_write_big(hbool_t newest_format);
 void accum_printf(void);
 
 /* Private Test H5Faccum Function Wrappers */
-#define accum_write(a,s,b) H5F_block_write(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5P_DATASET_XFER_DEFAULT, (b))
-#define accum_read(a,s,b)  H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5P_DATASET_XFER_DEFAULT, (b))
+#define accum_write(a,s,b) H5F_block_write(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5AC_ind_read_dxpl_id, (b))
+#define accum_read(a,s,b)  H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)(a), (size_t)(s), H5AC_ind_read_dxpl_id, (b))
 #define accum_free(fio_info,a,s)  H5F__accum_free(fio_info, H5FD_MEM_DEFAULT, (haddr_t)(a), (hsize_t)(s))
 #define accum_flush(fio_info)   H5F__accum_flush(fio_info)
 #define accum_reset(fio_info)   H5F__accum_reset(fio_info, TRUE)
@@ -109,7 +109,7 @@ main(void)
 
     /* Set up I/O info for operation */
     fio_info.f = f;
-    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5P_DATASET_XFER_DEFAULT))) FAIL_STACK_ERROR
+    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5AC_ind_read_dxpl_id))) FAIL_STACK_ERROR
 
     /* Reset metadata accumulator for the file */
     if(accum_reset(&fio_info) < 0) FAIL_STACK_ERROR
@@ -1877,7 +1877,7 @@ test_swmr_write_big(hbool_t newest_format)
 
     /* Set up I/O info for operation */
     fio_info.f = rf;
-    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5P_DATASET_XFER_DEFAULT)))
+    if(NULL == (fio_info.dxpl = (H5P_genplist_t *)H5I_object(H5AC_ind_read_dxpl_id)))
         FAIL_STACK_ERROR
 
     /* We'll be writing lots of garbage data, so extend the
@@ -1903,10 +1903,10 @@ test_swmr_write_big(hbool_t newest_format)
         wbuf[u] = (uint8_t)u;
 
     /* Write [1024, 1024] bytes with wbuf */
-    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5P_DATASET_XFER_DEFAULT, wbuf) < 0)
+    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5AC_ind_read_dxpl_id, wbuf) < 0)
 	    FAIL_STACK_ERROR;
     /* Read the data */
-    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5P_DATASET_XFER_DEFAULT, rbuf) < 0)
+    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5AC_ind_read_dxpl_id, rbuf) < 0)
 	    FAIL_STACK_ERROR;
     /* Verify the data read is correct */
     if(HDmemcmp(wbuf, rbuf, (size_t)1024) != 0)
@@ -1924,10 +1924,10 @@ test_swmr_write_big(hbool_t newest_format)
         wbuf2[u] = (uint8_t)(u + 1);
 
     /* Write [1024,1024] with wbuf--all 1s */
-    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5P_DATASET_XFER_DEFAULT, wbuf) < 0)
+    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5AC_ind_read_dxpl_id, wbuf) < 0)
 	    FAIL_STACK_ERROR;
     /* Read the data */
-    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5P_DATASET_XFER_DEFAULT, rbuf) < 0)
+    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5AC_ind_read_dxpl_id, rbuf) < 0)
 	    FAIL_STACK_ERROR;
     /* Verify the data read is correct */
     if(HDmemcmp(wbuf, rbuf, (size_t)1024) != 0)
@@ -1935,10 +1935,10 @@ test_swmr_write_big(hbool_t newest_format)
     /* The data stays in the accumulator */
 
     /* Write a large piece of metadata [2048, BIG_BUF_SIZE] with wbuf2 */
-    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)2048, (size_t)BIG_BUF_SIZE, H5P_DATASET_XFER_DEFAULT, wbuf2) < 0)
+    if(H5F_block_write(rf, H5FD_MEM_DEFAULT, (haddr_t)2048, (size_t)BIG_BUF_SIZE, H5AC_ind_read_dxpl_id, wbuf2) < 0)
 	    FAIL_STACK_ERROR;
     /* Read the data */
-    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)2048, (size_t)BIG_BUF_SIZE, H5P_DATASET_XFER_DEFAULT, rbuf) < 0)
+    if(H5F_block_read(rf, H5FD_MEM_DEFAULT, (haddr_t)2048, (size_t)BIG_BUF_SIZE, H5AC_ind_read_dxpl_id, rbuf) < 0)
 	    FAIL_STACK_ERROR;
     /* Verify the data read is correct */
     if(HDmemcmp(wbuf2, rbuf, (size_t)BIG_BUF_SIZE) != 0)
diff --git a/test/accum_swmr_reader.c b/test/accum_swmr_reader.c
index 102845f..d98fe70 100644
--- a/test/accum_swmr_reader.c
+++ b/test/accum_swmr_reader.c
@@ -77,7 +77,7 @@ main(void)
 	    FAIL_STACK_ERROR
 
     /* Should read in [1024, 2024] with buf data */
-    if(H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5P_DATASET_XFER_DEFAULT, rbuf) < 0)
+    if(H5F_block_read(f, H5FD_MEM_DEFAULT, (haddr_t)1024, (size_t)1024, H5AC_ind_read_dxpl_id, rbuf) < 0)
 	    FAIL_STACK_ERROR;
 
     /* Verify the data read is correct */
diff --git a/test/btree2.c b/test/btree2.c
index 7a2432c..ea16583 100644
--- a/test/btree2.c
+++ b/test/btree2.c
@@ -36,8 +36,11 @@ const char *FILENAME[] = {
 };
 
 #define INSERT_SPLIT_ROOT_NREC  63
-#define INSERT_MANY             (1000*1000)
-#define FIND_MANY               (INSERT_MANY/100)
+#define INSERT_SPLIT_ROOT_NREC_REC  64
+#define INSERT_MANY             (1000 * 1000)
+#define INSERT_MANY_REC         (2700 * 1000)
+#define FIND_MANY               (INSERT_MANY / 100)
+#define FIND_MANY_REC           (INSERT_MANY_REC / 100)
 #define FIND_NEIGHBOR           2000
 #define DELETE_SMALL            20
 #define DELETE_MEDIUM           200
@@ -63,7 +66,7 @@ typedef struct bt2_test_param_t {
  *-------------------------------------------------------------------------
  */
 static int
-init_cparam(H5B2_create_t *cparam)
+init_cparam(H5B2_create_t *cparam, H5B2_create_t *cparam2)
 {
     /* Wipe out background */
     HDmemset(cparam, 0, sizeof(*cparam));
@@ -75,6 +78,16 @@ init_cparam(H5B2_create_t *cparam)
     cparam->split_percent = 100;
     cparam->merge_percent = 40;
 
+    /* Wipe out background */
+    HDmemset(cparam2, 0, sizeof(*cparam2));
+
+    /* General parameters */
+    cparam2->cls = H5B2_TEST2;
+    cparam2->node_size = (size_t)1024;
+    cparam2->rrec_size = (size_t)16;
+    cparam2->split_percent = 100;
+    cparam2->merge_percent = 40;
+
     return(0);
 } /* init_cparam() */
 
@@ -154,6 +167,47 @@ error:
 
 

 /*-------------------------------------------------------------------------
+ * Function:	reopen_file
+ *
+ * Purpose:	Re-open the file
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, December 28, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+reopen_file(hid_t *file, H5F_t **f, hid_t fapl)
+{
+    char	filename[1024];         /* Filename to use */
+
+    /* Set the filename to use for this test (dependent on fapl) */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
+
+    /* Create the file to work on */
+    if((*file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR
+
+    /* Get a pointer to the internal file object */
+    if(NULL == (*f = (H5F_t *)H5I_object(*file)))
+        STACK_ERROR
+
+    /* Ignore metadata tags in the file's cache */
+    if(H5AC_ignore_tags(*f) < 0)
+        STACK_ERROR
+
+    /* Success */
+    return(0);
+
+error:
+    return(-1);
+} /* end create_file() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	reopen_btree
  *
  * Purpose:	Perform common "re-open" operations on B-tree for testing
@@ -237,11 +291,11 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-check_node_depth(H5B2_t *bt2, hid_t dxpl, hsize_t record, unsigned depth)
+check_node_depth(H5B2_t *bt2, hid_t dxpl, void *record, unsigned depth)
 {
     int         rec_depth;              /* Depth of record in B-tree */
 
-    if((rec_depth = H5B2_get_node_depth_test(bt2, dxpl, &record)) < 0)
+    if((rec_depth = H5B2_get_node_depth_test(bt2, dxpl, record)) < 0)
         FAIL_STACK_ERROR
     if((unsigned)rec_depth != depth)
         TEST_ERROR
@@ -285,7 +339,7 @@ check_node_info(H5B2_t *bt2, hid_t dxpl, hsize_t record,
 
 error:
     return(-1);
-} /* end check_node_depth() */
+} /* end check_node_info() */
 
 

 /*-------------------------------------------------------------------------
@@ -294,7 +348,6 @@ error:
  * Purpose:	v2 B-tree iterator callback
  *
  * Return:	Success:	0
- *
  *		Failure:	1
  *
  * Programmer:	Quincey Koziol
@@ -317,12 +370,41 @@ iter_cb(const void *_record, void *_op_data)
 
 

 /*-------------------------------------------------------------------------
+ * Function:	iter_rec_cb
+ *
+ * Purpose:	v2 B-tree iterator callback for H5B2_test_rec_t records
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+iter_rec_cb(const void *_record, void *_op_data)
+{
+    const H5B2_test_rec_t *record = (const H5B2_test_rec_t *)_record;
+    H5B2_test_rec_t *idx = (H5B2_test_rec_t *)_op_data;
+
+    if(record->key != idx->key)
+        return(H5_ITER_ERROR);
+    if(record->val != idx->val)
+        return(H5_ITER_ERROR);
+
+    idx->key++;
+    idx->val += 2;
+    return(H5_ITER_CONT);
+} /* end iter_rec_cb() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	find_cb
  *
  * Purpose:	v2 B-tree find callback
  *
  * Return:	Success:	TRUE/FALSE
- *
  *		Failure:	FAIL
  *
  * Programmer:	Quincey Koziol
@@ -344,6 +426,33 @@ find_cb(const void *_record, void *_op_data)
 
 

 /*-------------------------------------------------------------------------
+ * Function:	find_rec_cb
+ *
+ * Purpose:	v2 B-tree find callback for H5B2_test_rec_t records
+ *
+ * Return:	Success:	TRUE/FALSE
+ *		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+find_rec_cb(const void *_record, void *_op_data)
+{
+    const H5B2_test_rec_t *record = (const H5B2_test_rec_t *)_record;
+    H5B2_test_rec_t *search = (H5B2_test_rec_t *)_op_data;
+
+    if(record->key != search->key)
+        return(FALSE);
+
+    search->val = record->val;
+    return(TRUE);
+} /* end find_rec_cb() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	find_dec_cb
  *
  * Purpose:	v2 B-tree find callback for indexing in decreasing order
@@ -372,6 +481,34 @@ find_dec_cb(const void *_record, void *_op_data)
 
 

 /*-------------------------------------------------------------------------
+ * Function:	index_rec_cb
+ *
+ * Purpose:	v2 B-tree index callback for H5B2_test_rec_t records
+ *
+ * Return:	Success:	TRUE/FALSE
+ *		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+index_rec_cb(const void *_record, void *_op_data)
+{
+    const H5B2_test_rec_t *record = (const H5B2_test_rec_t *)_record;
+    H5B2_test_rec_t *search = (H5B2_test_rec_t *)_op_data;
+
+    HDassert(record);
+    HDassert(search);
+
+    search->key = record->key;
+    search->val = record->val;
+    return(TRUE);
+} /* end index_rec_cb() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	neighbor_cb
  *
  * Purpose:	v2 B-tree neighbor callback
@@ -425,6 +562,57 @@ modify_cb(void *_record, void *_op_data, hbool_t *changed)
 
 

 /*-------------------------------------------------------------------------
+ * Function:	modify_rec_cb
+ *
+ * Purpose:	v2 B-tree modify callback for H5B2_test_rec_t records
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, December 25, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+modify_rec_cb(void *_record, void *_op_data, hbool_t *changed)
+{
+    H5B2_test_rec_t *record = (H5B2_test_rec_t *)_record;
+    H5B2_test_rec_t *modify = (H5B2_test_rec_t *)_op_data;
+
+    HDassert(record->key == modify->key);
+    record->val = modify->val;
+    *changed = TRUE;
+
+    return(0);
+} /* end modify_rec_cb() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	no_modify_cb
+ *
+ * Purpose:	v2 B-tree modify callback for updates which shouldn't change
+ *		the record (ie. inserting not modifying)
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, December 23, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+no_modify_cb(void H5_ATTR_UNUSED *_record, void H5_ATTR_UNUSED *_op_data,
+    hbool_t *changed)
+{
+    *changed = FALSE;
+
+    return(1);
+} /* end no_modify_cb() */
+
+

+/*-------------------------------------------------------------------------
  * Function:	remove_cb
  *
  * Purpose:	v2 B-tree remove callback
@@ -469,7 +657,7 @@ test_insert_basic(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -683,7 +871,7 @@ test_insert_split_root(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -717,7 +905,8 @@ test_insert_split_root(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC - 1);
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)33, (unsigned)0) < 0)
+    record = (hsize_t)33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -734,7 +923,8 @@ test_insert_split_root(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)33, (unsigned)1) < 0)
+    record = (hsize_t)33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -755,7 +945,8 @@ test_insert_split_root(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC + 2);
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)33, (unsigned)1) < 0)
+    record = (hsize_t)33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -857,7 +1048,7 @@ test_insert_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -889,7 +1080,8 @@ test_insert_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)INSERT_SPLIT_ROOT_NREC, (unsigned)1) < 0)
+    record = (hsize_t)INSERT_SPLIT_ROOT_NREC;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -909,7 +1101,8 @@ test_insert_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC + (INSERT_SPLIT_ROOT_NREC / 2) + 1);
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)((INSERT_SPLIT_ROOT_NREC / 2) + (INSERT_SPLIT_ROOT_NREC / 4) + 1), (unsigned)1) < 0)
+    record = (hsize_t)((INSERT_SPLIT_ROOT_NREC / 2) + (INSERT_SPLIT_ROOT_NREC / 4) + 1);
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -940,7 +1133,8 @@ test_insert_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)(INSERT_SPLIT_ROOT_NREC / 2), (unsigned)1) < 0)
+    record = (hsize_t)(INSERT_SPLIT_ROOT_NREC / 2);
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -959,7 +1153,8 @@ test_insert_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC + (INSERT_SPLIT_ROOT_NREC / 2) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)((INSERT_SPLIT_ROOT_NREC / 2) + (INSERT_SPLIT_ROOT_NREC / 4) + 1), (unsigned)1) < 0)
+    record = (hsize_t)((INSERT_SPLIT_ROOT_NREC / 2) + (INSERT_SPLIT_ROOT_NREC / 4) + 1);
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -1008,7 +1203,7 @@ test_insert_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1041,7 +1236,7 @@ test_insert_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = INSERT_SPLIT_ROOT_NREC + (INSERT_SPLIT_ROOT_NREC / 2);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1061,10 +1256,10 @@ test_insert_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 31;
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 63;
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -1096,7 +1291,7 @@ test_insert_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = (INSERT_SPLIT_ROOT_NREC / 2);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1115,9 +1310,11 @@ test_insert_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = 2 * INSERT_SPLIT_ROOT_NREC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)62, (unsigned)1) < 0)
+    record = 62;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)94, (unsigned)1) < 0)
+    record = 94;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -1168,7 +1365,7 @@ test_insert_level1_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1202,7 +1399,7 @@ test_insert_level1_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = (2 * INSERT_SPLIT_ROOT_NREC);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1222,10 +1419,10 @@ test_insert_level1_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = (INSERT_SPLIT_ROOT_NREC / 2);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = (INSERT_SPLIT_ROOT_NREC + (INSERT_SPLIT_ROOT_NREC / 2) + 1);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1244,9 +1441,11 @@ test_insert_level1_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (2 * INSERT_SPLIT_ROOT_NREC) + (INSERT_SPLIT_ROOT_NREC / 2) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)52, (unsigned)1) < 0)
+    record = 52;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)105, (unsigned)1) < 0)
+    record = 105;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1309,7 +1508,7 @@ test_insert_level1_middle_split(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1343,7 +1542,7 @@ test_insert_level1_middle_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = (2 * INSERT_SPLIT_ROOT_NREC) + (INSERT_SPLIT_ROOT_NREC / 2);
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1362,11 +1561,14 @@ test_insert_level1_middle_split(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = 3 * INSERT_SPLIT_ROOT_NREC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)62, (unsigned)1) < 0)
+    record = 62;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)94, (unsigned)1) < 0)
+    record = 94;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)126, (unsigned)1) < 0)
+    record = 126;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1425,7 +1627,7 @@ test_insert_make_level2(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1464,7 +1666,8 @@ test_insert_make_level2(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 29) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)948, (unsigned)2) < 0)
+    record = 948;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1513,7 +1716,8 @@ test_insert_make_level2(hid_t fapl, const H5B2_create_t *cparam,
         FAIL_STACK_ERROR
 
     /* Check with B-tree */
-    if(check_node_depth(bt2, dxpl, (hsize_t)948, (unsigned)2) < 0)
+    record = 948;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
 
     /* Attempt to find existant record in internal node of level-2 B-tree */
@@ -1522,7 +1726,8 @@ test_insert_make_level2(hid_t fapl, const H5B2_create_t *cparam,
         FAIL_STACK_ERROR
 
     /* Check with B-tree */
-    if(check_node_depth(bt2, dxpl, (hsize_t)505, (unsigned)1) < 0)
+    record = 505;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Attempt to find existant record in leaf of level-2 B-tree */
@@ -1531,7 +1736,8 @@ test_insert_make_level2(hid_t fapl, const H5B2_create_t *cparam,
         FAIL_STACK_ERROR
 
     /* Check with B-tree */
-    if(check_node_depth(bt2, dxpl, (hsize_t)555, (unsigned)0) < 0)
+    record = 555;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Attempt to index non-existant record in level-2 B-tree */
@@ -1603,7 +1809,7 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1642,11 +1848,14 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 29) + (INSERT_SPLIT_ROOT_NREC / 2);
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0)
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1859, (unsigned)1) < 0)
+    record = 1859;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1921, (unsigned)0) < 0)
+    record = 1921;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1663,11 +1872,14 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 29) + (INSERT_SPLIT_ROOT_NREC / 2) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0)
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1875, (unsigned)1) < 0)
+    record = 1875;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1922, (unsigned)0) < 0)
+    record = 1922;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -1683,11 +1895,14 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 29) + (INSERT_SPLIT_ROOT_NREC / 2) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0)
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)94, (unsigned)1) < 0)
+    record = 94;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)32, (unsigned)0) < 0)
+    record = 32;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Add more records to left-most leaf, to force a 2->1 split and then a
@@ -1704,11 +1919,14 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 30) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0)
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)47, (unsigned)1) < 0)
+    record = 47;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)0, (unsigned)0) < 0)
+    record = 0;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -1724,13 +1942,17 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 30) + 1;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0) /* Record in root node */
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0) /* Record in root node */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)535, (unsigned)1) < 0) /* Record in middle node before insertion point */
+    record = 535;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0) /* Record in middle node before insertion point */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)630, (unsigned)1) < 0) /* Record in middle node after insertion point */
+    record = 630;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0) /* Record in middle node after insertion point */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)568, (unsigned)0) < 0) /* Record in leaf node just after insertion point */
+    record = 568;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0) /* Record in leaf node just after insertion point */
         TEST_ERROR
 
     /* Add more records to middle leaf, to force a split and a 3 node redistribution on middle leaf */
@@ -1745,13 +1967,17 @@ test_insert_level2_leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 30) + (INSERT_SPLIT_ROOT_NREC / 2) + 2;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)1008, (unsigned)2) < 0) /* Record in root node */
+    record = 1008;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0) /* Record in root node */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)524, (unsigned)1) < 0) /* Record in middle node before insertion point */
+    record = 524;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0) /* Record in middle node before insertion point */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)577, (unsigned)1) < 0) /* Record in middle node after insertion point */
+    record = 577;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0) /* Record in middle node after insertion point */
         TEST_ERROR
-    if(check_node_depth(bt2, dxpl, (hsize_t)568, (unsigned)0) < 0) /* Record in leaf node just after insertion point */
+    record = 568;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0) /* Record in leaf node just after insertion point */
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1812,7 +2038,7 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -1851,13 +2077,13 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 1797;       /* Right-most record in right internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 1859;      /* Right-most record in right-most leaf */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -1877,16 +2103,16 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 1828;      /* Next-to-right-most record in right-most internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 1860;      /* Right-most record in right-most internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 1891;      /* Right-most record in right-most leaf */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -1903,13 +2129,13 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 63;        /* Left-most record in left-most internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 1;        /* Left-most record in left-most leaf */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Add another record to left-most leaf, to force a 1->2 node split on left leaf */
@@ -1923,16 +2149,16 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 63;        /* Left-most record in left-most internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 32;        /* Left-most record in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 0;        /* Left-most record in left-most leaf */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -1949,16 +2175,16 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 504;       /* Record in internal node just before insertion point */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 568;       /* Record in internal node just after insertion point */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 506;       /* Record in leaf node just after insertion point */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Add another record to middle leaf, to force a node split on middle leaf */
@@ -1972,19 +2198,19 @@ test_insert_level2_leaf_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 946;       /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 504;       /* Left-most record of split in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 537;       /* Middle record of split in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 568;       /* Right-most record of split in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 506;       /* Record in leaf node just after insertion point */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2046,7 +2272,7 @@ test_insert_level2_2internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -2081,13 +2307,13 @@ test_insert_level2_2internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1318;      /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3114;      /* Right-most record in right internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3145;      /* Right-most record in right leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2105,13 +2331,13 @@ test_insert_level2_2internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1822;      /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3114;      /* Right-most record in right internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3146;      /* Right-most record in right leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -2128,13 +2354,13 @@ test_insert_level2_2internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1822;      /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 436;      /* Left-most record in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 374;      /* Left-most record in left leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Force left-most internal node to redistribute */
@@ -2150,13 +2376,13 @@ test_insert_level2_2internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1570;      /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 61;      /* Left-most record in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 0;      /* Left-most record in left leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2218,7 +2444,7 @@ test_insert_level2_2internal_split(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -2253,13 +2479,13 @@ test_insert_level2_2internal_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 2759;      /* Record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 4555;      /* Right-most record in right internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 4586;      /* Right-most record in right leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2277,16 +2503,16 @@ test_insert_level2_2internal_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 2759;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3704;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 4555;      /* Right-most record in right internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 4387;      /* Right-most record in right leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     PASSED();
@@ -2303,13 +2529,13 @@ test_insert_level2_2internal_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 2759;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 932;      /* Left-most record in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 870;      /* Left-most record in left leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Force left-most internal node to split */
@@ -2325,16 +2551,16 @@ test_insert_level2_2internal_split(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 870;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 1814;      /* Next-to-left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 61;      /* Left-most record in left internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 0;      /* Left-most record in left leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2397,7 +2623,7 @@ test_insert_level2_3internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -2436,19 +2662,19 @@ test_insert_level2_3internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3703;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 2267;      /* Record to left of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3199;      /* Record to right of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3137;      /* Record just above insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2468,19 +2694,19 @@ test_insert_level2_3internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3703;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3104;      /* Record to left of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3137;      /* Record to right of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3135;      /* Record just above insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2498,21 +2724,21 @@ test_insert_level2_3internal_redistrib(hid_t fapl, const H5B2_create_t *cparam,
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
     record = 1574;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     record = 3104;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
 #ifdef NONE
     record = 2862;      /* Record to left of insertion point in right internal node (now) */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 #endif /* NONE */
     record = 3137;      /* Record to right of insertion point in right internal node (now) */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 3135;      /* Record just above insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     /* Check for closing & re-opening the B-tree */
@@ -2575,7 +2801,7 @@ test_insert_level2_3internal_split(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -2588,126 +2814,2129 @@ test_insert_level2_3internal_split(hid_t fapl, const H5B2_create_t *cparam,
      */
     TESTING("B-tree insert: split 3 internals to 4 in level 2 B-tree");
 
-    /* Create the file for the test */
-    if(create_file(&file, &f, fapl) < 0)
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 3 internal nodes */
+    /* (and fill right internal node) */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC * 31); u++) {
+        record = u;
+        if(H5B2_insert(bt2, dxpl, &record) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+    for(; u < (INSERT_SPLIT_ROOT_NREC * 74); u++) {
+        record = u + ((INSERT_SPLIT_ROOT_NREC * 13) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3);
+        if(H5B2_insert(bt2, dxpl, &record) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 2;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC * 74;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record = 1889;      /* Left record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 3703;      /* Right record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 1952;      /* Record to left of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record = 2884;      /* Record to right of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record = 2822;      /* Record just after insertion point in leaf node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Insert records to fill up middle internal node */
+    for(u = 0; u < ((INSERT_SPLIT_ROOT_NREC * 13) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 2); u++) {
+        record = u + (INSERT_SPLIT_ROOT_NREC * 31);
+        if(H5B2_insert(bt2, dxpl, &record) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 2;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 2;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record = 1889;      /* Left record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 3703;      /* Right record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 2789;      /* Record to left of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record = 2822;      /* Record to right of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record = 2823;      /* Record just above insertion point in leaf node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Insert record to split middle internal node */
+    record = u + (INSERT_SPLIT_ROOT_NREC * 31);
+    if(H5B2_insert(bt2, dxpl, &record) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 2;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record = 1889;      /* Left record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 2789;      /* Middle record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+    record = 3703;      /* Right record in root node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+#ifdef NONE
+    record = 3049;      /* Record to left of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+#endif /* NONE */
+    record = 2822;      /* Record to right of insertion point in middle internal node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record = 2823;      /* Record just above insertion point in leaf node */
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx != ((INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3))
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_insert_level2_3internal_split() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_insert_lots
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts many
+ *              records in random order, enough to make at a level 4 B-tree.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, February 19, 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_insert_lots(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    char	filename[1024];         /* Filename to use */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    hsize_t     record;                 /* Record to insert into tree */
+    hsize_t     idx;                    /* Index within B-tree, for iterator */
+    time_t      curr_time;              /* Current time, for seeding random number generator */
+    hsize_t     *records;               /* Record #'s for random insertion */
+    unsigned    u;                      /* Local index variable */
+    unsigned    swap_idx;               /* Location to swap with when shuffling */
+    hsize_t     temp_rec;               /* Temporary record */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    hsize_t     nrec;                   /* Number of records in B-tree */
+    herr_t      ret;                    /* Generic error return value */
+
+    /* Initialize random number seed */
+    curr_time=HDtime(NULL);
+#ifdef QAK
+curr_time=1109170019;
+HDfprintf(stderr,"curr_time=%lu\n",(unsigned long)curr_time);
+#endif /* QAK */
+    HDsrandom((unsigned)curr_time);
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree insert: create random level 4 B-tree");
+
+    /* Allocate space for the records */
+    if(NULL == (records = (hsize_t *)HDmalloc(sizeof(hsize_t) * INSERT_MANY)))
+        TEST_ERROR
+
+    /* Initialize record #'s */
+    for(u = 0; u < INSERT_MANY; u++)
+        records[u] = u;
+
+    /* Shuffle record #'s */
+    for(u = 0; u < INSERT_MANY; u++) {
+        swap_idx = ((unsigned)HDrandom() % (INSERT_MANY - u)) + u;
+        temp_rec = records[u];
+        records[u] = records[swap_idx];
+        records[swap_idx] = temp_rec;
+    } /* end for */
+
+    /* Set the filename to use for this test (dependent on fapl) */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
+
+    /* Create the file to work on */
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+
+    /* Get a pointer to the internal file object */
+    if(NULL == (f = (H5F_t *)H5I_object(file)))
+        STACK_ERROR
+
+    /* Ignore metadata tags in the file's cache */
+    if(H5AC_ignore_tags(f) < 0)
+        STACK_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert random records */
+    for(u = 0; u < INSERT_MANY; u++) {
+        record = records[u];
+        if(H5B2_insert(bt2, dxpl, &record) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 4;
+    bt2_stat.nrecords = INSERT_MANY;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        STACK_ERROR
+
+    /* Re-open the file */
+    if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Get a pointer to the internal file object */
+    if(NULL == (f = (H5F_t *)H5I_object(file)))
+        FAIL_STACK_ERROR
+
+    /* Ignore metadata tags in the file's cache */
+    if(H5AC_ignore_tags(f) < 0)
+        STACK_ERROR
+
+    /* Re-open v2 B-tree */
+    if(NULL == (bt2 = H5B2_open(f, dxpl, bt2_addr, f)))
+        FAIL_STACK_ERROR
+
+    /* Check up on B-tree after re-open */
+    bt2_stat.depth = 4;
+    bt2_stat.nrecords = INSERT_MANY;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx != INSERT_MANY)
+        TEST_ERROR
+
+    /* Attempt to find non-existant record in level-4 B-tree */
+    /* (Should not be found, but not fail) */
+    idx = INSERT_MANY * 2;
+    if(H5B2_find(bt2, dxpl, &idx, find_cb, &idx) != FALSE)
+        TEST_ERROR
+
+    /* Find random records */
+    for(u = 0; u < FIND_MANY; u++) {
+        /* Pick random record */
+        idx = (hsize_t)(HDrandom()%INSERT_MANY);
+
+        /* Attempt to find existant record in root of level-4 B-tree */
+        if(H5B2_find(bt2, dxpl, &idx, find_cb, &idx) != TRUE)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Attempt to index non-existant record in level-4 B-tree, in increasing & decreasing order */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_MANY*3), find_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_DEC, (hsize_t)(INSERT_MANY*3), find_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Find random records */
+    for(u = 0; u < FIND_MANY; u++) {
+        /* Pick random record */
+        idx = (hsize_t)(HDrandom() % INSERT_MANY);
+
+        /* Attempt to find existant record in root of level-4 B-tree */
+        /* (in increasing order) */
+        if(H5B2_index(bt2, dxpl, H5_ITER_INC, idx, find_cb, &idx) < 0)
+            FAIL_STACK_ERROR
+
+        /* Attempt to find existant record in root of level-4 B-tree */
+        /* (in decreasing order) */
+        if(H5B2_index(bt2, dxpl, H5_ITER_DEC, idx, find_dec_cb, &idx) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    PASSED();
+
+    TESTING("B-tree insert: attempt duplicate record in level 4 B-tree");
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    record = INSERT_MANY / 2;
+    H5E_BEGIN_TRY {
+        ret = H5B2_insert(bt2, dxpl, &record);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Query the number of records in the B-tree */
+    if(H5B2_get_nrec(bt2, &nrec) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the # of records is correct */
+    if(nrec != INSERT_MANY)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        TEST_ERROR
+
+    PASSED();
+
+    HDfree(records);
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    HDfree(records);
+    return 1;
+} /* test_insert_lots() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_basic
+ *
+ * Purpose:	Basic tests for the v2 B-tree update operation
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, December 23, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_basic(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_test_rec_t modify;             /* Modified value */
+    H5B2_test_rec_t find;               /* Record to find */
+    herr_t      ret;                    /* Generic error return value */
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /*
+     * Test insert record into empty v2 B-tree
+     */
+    TESTING("B-tree update: inserting first record in empty B-tree");
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    record.key = 42;
+    record.val = 72;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Attempt to find non-existant record in B-tree with 1 record */
+    /* (Should not be found, but not fail) */
+    find.key = 10;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Try again with NULL 'op' */
+    /* (Should not be found, but not fail) */
+    if(H5B2_find(bt2, dxpl, &find, NULL, NULL) != FALSE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in B-tree with 1 record */
+    find.key = 42;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != 72)
+        TEST_ERROR
+
+    /* Try again with NULL 'op' */
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, NULL, NULL) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in B-tree with 1 record */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1, index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in B-tree with 1 record */
+    find.key = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)0, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 42)
+        TEST_ERROR
+    if(find.val != 72)
+        TEST_ERROR
+
+    PASSED();
+
+
+    /*
+     * Test update only record into v2 B-tree
+     */
+    TESTING("B-tree update: update only record in B-tree");
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    modify.key = 42;
+    modify.val = 43;
+    if(H5B2_update(bt2, dxpl, &modify, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
+
+    /* Attempt to find non-existant record in B-tree with 1 record */
+    /* (Should not be found, but not fail) */
+    find.key = 10;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Try again with NULL 'op' */
+    /* (Should not be found, but not fail) */
+    if(H5B2_find(bt2, dxpl, &find, NULL, NULL) != FALSE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find modified record in B-tree with 1 record */
+    find.key = 42;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != 43)
+        TEST_ERROR
+
+    /* Try again with NULL 'op' */
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, NULL, NULL) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in B-tree with 1 record */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1, index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in B-tree with 1 record */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)0, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 42)
+        TEST_ERROR
+    if(find.val != 43)
+        TEST_ERROR
+
+    PASSED();
+
+
+    /*
+     * Test inserting more records into v2 B-tree
+     */
+    TESTING("B-tree update: insert several records");
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /*
+     * Test inserting second record into v2 B-tree, before all other records
+     */
+    record.key = 34;
+    record.val = 11;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /*
+     * Test inserting third record into v2 B-tree, after all other records
+     */
+    record.key = 56;
+    record.val = 12;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /*
+     * Test inserting fourth record into v2 B-tree, in the middle of other records
+     */
+    record.key = 38;
+    record.val = 13;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Attempt to find non-existant record in level-0 B-tree with several records */
+    /* (Should not be found, but not fail) */
+    find.key = 10;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in level-0 B-tree with several records */
+    find.key = 56;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        TEST_ERROR
+    if(find.val != 12)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in B-tree with several records */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)4, index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in B-tree with several records */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)0, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 34)
+        TEST_ERROR
+    if(find.val != 11)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 38)
+        TEST_ERROR
+    if(find.val != 13)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)2, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 42)
+        TEST_ERROR
+    if(find.val != 43)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)3, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 56)
+        TEST_ERROR
+    if(find.val != 12)
+        TEST_ERROR
+
+    PASSED();
+
+
+    /*
+     * Test updating all existing records in v2 B-tree
+     */
+    TESTING("B-tree update: update several records");
+
+    record.key = 34;
+    modify.key = 34;
+    modify.val = 21;
+    if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
+    record.key = 38;
+    modify.key = 38;
+    modify.val = 23;
+    if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
+    record.key = 42;
+    modify.key = 42;
+    modify.val = 24;
+    if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
+    record.key = 56;
+    modify.key = 56;
+    modify.val = 22;
+    if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
+
+    /* Attempt to find non-existant record in level-0 B-tree with several records */
+    /* (Should not be found, but not fail) */
+    find.key = 41;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in level-0 B-tree with several record */
+    find.key = 56;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        TEST_ERROR
+    if(find.val != 22)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in B-tree with several records */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)4, index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in B-tree with several records */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)0, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 34)
+        TEST_ERROR
+    if(find.val != 21)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 38)
+        TEST_ERROR
+    if(find.val != 23)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)2, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 42)
+        TEST_ERROR
+    if(find.val != 24)
+        TEST_ERROR
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)3, index_rec_cb, &find) < 0)
+        TEST_ERROR
+    if(find.key != 56)
+        TEST_ERROR
+    if(find.val != 22)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close the file */
+    if(H5Fclose(file) < 0)
+        TEST_ERROR
+
+    PASSED();
+
+
+    /* All tests passed */
+    return(0);
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return(1);
+} /* test_update_basic() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_split_root
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to split the root node and force the tree to depth 1.
+ *              It also continues to add a few more records to each of the
+ *              left and right leaf nodes after the split
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, December 23, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_split_root(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_test_rec_t modify;             /* Modified value */
+    H5B2_test_rec_t find;               /* Record to find */
+    H5B2_test_rec_t idx;                /* Index within B-tree, for iterator */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    unsigned    u;                      /* Local index variable */
+    herr_t      ret;                    /* Generic error return value */
+
+    /*
+     * Test inserting enough records into v2 B-tree to split the root node
+     */
+    TESTING("B-tree update: split root");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert records to fill root leaf node */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC - 1); u++) {
+        record.key = u + 2;
+        record.val = u * 2 + 4;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 0;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC - 1);
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Insert record to split root leaf node */
+    record.key = INSERT_SPLIT_ROOT_NREC_REC + 1;
+    record.val = (INSERT_SPLIT_ROOT_NREC_REC - 1) * 2 + 4;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 2;
+    idx.val = 4;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != (INSERT_SPLIT_ROOT_NREC_REC + 2))
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Modify all records */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + 2;
+        modify.key = u + 2;
+        modify.val = u * 2 + 5;
+        if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 2;
+    idx.val = 5;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != (INSERT_SPLIT_ROOT_NREC_REC + 2))
+        TEST_ERROR
+
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Insert a couple more records, on the left side of the B-tree */
+    record.key = 0;
+    record.val = 1;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = 1;
+    record.val = 3;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC + 2);
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 33;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 1;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != (INSERT_SPLIT_ROOT_NREC_REC + 2))
+        TEST_ERROR
+
+    /* Attempt to find non-existant record in level-1 B-tree */
+    /* (Should not be found, but not fail) */
+    find.key = 800;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in root of level-1 B-tree */
+    find.key = 33;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.key != 33)
+        TEST_ERROR
+    if(find.val != 67)
+        TEST_ERROR
+
+    /* Attempt to find existant record in leaf of level-1 B-tree */
+    find.key = 56;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.key != 56)
+        TEST_ERROR
+    if(find.val != 113)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in level-1 B-tree */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_SPLIT_ROOT_NREC_REC + 2), index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in root of level-1 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)33, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 33)
+        TEST_ERROR
+    if(find.val != 67)
+        TEST_ERROR
+
+    /* Attempt to index existing record in left leaf of level-1 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)0, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 0)
+        TEST_ERROR
+    if(find.val != 1)
+        TEST_ERROR
+
+    /* Attempt to index existing record in right leaf of level-1 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)50, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 50)
+        TEST_ERROR
+    if(find.val != 101)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_update_split_root() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_level1_2leaf_redistrib
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to split the root node and force the tree to depth 1.
+ *              It continues to add a more records to the each of the
+ *              left and right leaf nodes after the split to force a 2 node
+ *              redistribution
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, December 26, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_level1_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    unsigned    u;                      /* Local index variable */
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: redistribute 2 leaves in level 1 B-tree (l->r)");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1;
+        record.val = u + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 10;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+
+    /* Force redistribution from left node into right node */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1; u++) {
+        record.key = u;
+        record.val = u + 9;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1);
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC / 2) + (INSERT_SPLIT_ROOT_NREC_REC / 4);
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    PASSED();
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: redistribute 2 leaves in level 1 B-tree (r->l)");
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u;
+        record.val = u + 9;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC / 2) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Force redistribution from left node into right node */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1; u++) {
+        record.key = u + INSERT_SPLIT_ROOT_NREC_REC;
+        record.val = u + INSERT_SPLIT_ROOT_NREC_REC + 9;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC / 2) + (INSERT_SPLIT_ROOT_NREC_REC / 4) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_update_level1_2leaf_redistrib() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_level1_side_split
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to split the root node and force the tree to depth 1.
+ *              It continues to add a more records to the each of the
+ *              left and right leaf nodes after the split to force a 2 node
+ *              split, adding another node to the B-tree
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, December 26, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_level1_side_split(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    unsigned    u;                      /* Local index variable */
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: split side leaf into 2 leaves in level 1 B-tree (l->r)");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + INSERT_SPLIT_ROOT_NREC_REC;
+        record.val = u + INSERT_SPLIT_ROOT_NREC_REC + 10;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = INSERT_SPLIT_ROOT_NREC_REC + (INSERT_SPLIT_ROOT_NREC_REC / 2) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Force left node to split */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u;
+        record.val = u + 10;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = 2 * INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 31;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = 64;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    PASSED();
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: split side leaf into 2 leaves in level 1 B-tree (r->l)");
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u;
+        record.val = u + 10;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC / 2) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Force right node to split */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + INSERT_SPLIT_ROOT_NREC_REC;
+        record.val = u + INSERT_SPLIT_ROOT_NREC_REC + 10;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = 2 * INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 63;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = 95;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_update_level1_side_split() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_level1_3leaf_redistrib
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to split the root node and force the tree to depth 1.
+ *              It continues to add a more records to the each of the
+ *              left and right leaf nodes after the split to force a 2 node
+ *              split, adding another node to the B-tree, then continues to
+ *              add records until a 3 node redistribution occurs
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, December 26, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_level1_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_test_rec_t idx;                /* Index within B-tree, for iterator */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    unsigned    u;                      /* Local index variable */
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: redistribute 3 leaves in level 1 B-tree");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + (INSERT_SPLIT_ROOT_NREC_REC + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1);
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (2 * INSERT_SPLIT_ROOT_NREC_REC);
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Force left node to split */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u;
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = 2 * INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC / 2) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = INSERT_SPLIT_ROOT_NREC_REC + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Insert records to force middle node to redistribute */
+    for(u = 0; u < ((INSERT_SPLIT_ROOT_NREC_REC / 2) + 1); u++) {
+        record.key = u + INSERT_SPLIT_ROOT_NREC_REC;
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = (2 * INSERT_SPLIT_ROOT_NREC_REC) + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 52;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = 107;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != ((INSERT_SPLIT_ROOT_NREC_REC * 2) + (INSERT_SPLIT_ROOT_NREC_REC / 2) + 1))
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_update_level1_3leaf_redistrib() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_level1_middle_split
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to split the root node and force the tree to depth 1.
+ *              It continues to add a more records to the each of the
+ *              left and right leaf nodes after the split to force a 2 node
+ *              split, adding another node to the B-tree, then continues to
+ *              add records until a 3 node split occurs
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, December 26, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_level1_middle_split(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    H5B2_test_rec_t idx;                /* Index within B-tree, for iterator */
+    unsigned    u;                      /* Local index variable */
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: split middle leaf into 2 leaves in level 1 B-tree");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 leaves */
+    for(u = 0; u < INSERT_SPLIT_ROOT_NREC_REC; u++) {
+        record.key = u + (INSERT_SPLIT_ROOT_NREC_REC * 2);
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = (2 * INSERT_SPLIT_ROOT_NREC_REC) + (INSERT_SPLIT_ROOT_NREC_REC / 2) - 1;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Force split from left node into right node */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC * 2); u++) {
+        record.key = u;
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 1;
+    bt2_stat.nrecords = 3 * INSERT_SPLIT_ROOT_NREC_REC;
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 63;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = 95;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+    record.key = 128;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != (INSERT_SPLIT_ROOT_NREC_REC * 3))
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    /* Close file */
+    if(H5Fclose(file) < 0)
+        STACK_ERROR
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        if(bt2)
+            H5B2_close(bt2, dxpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* test_update_level1_middle_split() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:	test_update_make_level2
+ *
+ * Purpose:	Basic tests for the B-tree v2 code.  This test inserts enough
+ *              records to make a level 2 B-tree
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, December 26, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+test_update_make_level2(hid_t fapl, const H5B2_create_t *cparam,
+    const bt2_test_param_t *tparam)
+{
+    hid_t	file = -1;              /* File ID */
+    H5F_t	*f = NULL;              /* Internal file object pointer */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
+    H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
+    haddr_t     bt2_addr;               /* Address of B-tree created */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_test_rec_t find;               /* Record to find */
+    H5B2_test_rec_t idx;                /* Index within B-tree, for iterator */
+    H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
+    unsigned    u;                      /* Local index variable */
+    herr_t      ret;                    /* Generic error return value */
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: make level 2 B-tree (l->r)");
+
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
+        TEST_ERROR
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 internal nodes */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC * 9); u++) {
+        record.key = u + 2;  /* Leave a gap for later insertion */
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+    for(; u < (INSERT_SPLIT_ROOT_NREC_REC * 41); u++) {
+        record.key = u + 4;  /* Leave a gap for later insertion */
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 2;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC * 41);
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 1347;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Add some extra records to left-most leaf */
+    record.key = 0;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = 1;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Add some extra records to middle leaf */
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 9) + 2;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 9) + 3;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 4))
+        TEST_ERROR
+
+    /* Attempt to find non-existant record in level-2 B-tree */
+    /* (Should not be found, but not fail) */
+    find.key = INSERT_SPLIT_ROOT_NREC_REC * 42;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in root of level-2 B-tree */
+    find.key = 1347;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (1347 * 2))
+        TEST_ERROR
+
+    /* Check with B-tree */
+    record.key = 1347;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+
+    /* Attempt to find existant record in internal node of level-2 B-tree */
+    find.key = 513;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (513 * 2))
+        TEST_ERROR
+
+    /* Check with B-tree */
+    record.key = 513;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
+        TEST_ERROR
+
+    /* Attempt to find existant record in leaf of level-2 B-tree */
+    find.key = 555;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (555 * 2))
+        TEST_ERROR
+
+    /* Check with B-tree */
+    record.key = 555;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in level-2 B-tree */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_SPLIT_ROOT_NREC_REC * 42), index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in root of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1347, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 1347)
+        TEST_ERROR
+    if(find.val != (1347 * 2))
+        TEST_ERROR
+
+    /* Attempt to index existing record in internal node of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)513, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 513)
+        TEST_ERROR
+    if(find.val != (513 * 2))
+        TEST_ERROR
+
+    /* Attempt to index existing record in leaf of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)555, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 555)
+        TEST_ERROR
+    if(find.val != (555 * 2))
+        TEST_ERROR
+
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    PASSED();
+
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: make level 2 B-tree (r->l)");
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 internal nodes */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC * 9); u++) {
+        record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 1) - u;
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+    for(; u < (INSERT_SPLIT_ROOT_NREC_REC * 41); u++) {
+        record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 1) - (u +2); /* Leave a gap for later insertion */
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Check up on B-tree */
+    bt2_stat.depth = 2;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC * 41);
+    if(check_stats(bt2, &bt2_stat) < 0)
+        TEST_ERROR
+    record.key = 1344;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+    /* Add some extra records to right-most leaf */
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 41) + 2;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 41) + 3;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Add some extra records to middle leaf */
+    record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) - (INSERT_SPLIT_ROOT_NREC_REC * 9));
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) - (INSERT_SPLIT_ROOT_NREC_REC * 9)) + 1;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+        TEST_ERROR
+
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
+        FAIL_STACK_ERROR
+
+    /* Make certain that the index is correct */
+    if(idx.key != ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 4))
+        TEST_ERROR
+
+    /* Attempt to find non-existant record in level-2 B-tree */
+    /* (Should not be found, but not fail) */
+    find.key = INSERT_SPLIT_ROOT_NREC_REC * 42;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
+        TEST_ERROR
+
+    /* Attempt to find existant record in root of level-2 B-tree */
+    find.key = 1344;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (1344 * 2))
+        TEST_ERROR
+
+    /* Check with B-tree */
+    record.key = 1344;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
+        TEST_ERROR
+
+    /* Attempt to find existant record in internal node of level-2 B-tree */
+    find.key = 512;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (512 * 2))
         TEST_ERROR
 
-    /* Create the v2 B-tree & get its address */
-    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+    /* Check with B-tree */
+    record.key = 512;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
-    /* Insert enough records to force root to split into 3 internal nodes */
-    /* (and fill right internal node) */
-    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC * 31); u++) {
-        record = u;
-        if(H5B2_insert(bt2, dxpl, &record) < 0)
-            FAIL_STACK_ERROR
-    } /* end for */
-    for(; u < (INSERT_SPLIT_ROOT_NREC * 74); u++) {
-        record = u + ((INSERT_SPLIT_ROOT_NREC * 13) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3);
-        if(H5B2_insert(bt2, dxpl, &record) < 0)
-            FAIL_STACK_ERROR
-    } /* end for */
+    /* Attempt to find existant record in leaf of level-2 B-tree */
+    find.key = 555;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (555 * 2))
+        TEST_ERROR
 
-    /* Check for closing & re-opening the B-tree */
-    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+    /* Check with B-tree */
+    record.key = 555;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
-    /* Check up on B-tree */
-    bt2_stat.depth = 2;
-    bt2_stat.nrecords = INSERT_SPLIT_ROOT_NREC * 74;
-    if(check_stats(bt2, &bt2_stat) < 0)
+    /* Attempt to index non-existant record in level-2 B-tree */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_SPLIT_ROOT_NREC_REC * 42), index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
         TEST_ERROR
-    record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+
+    /* Attempt to index existing record in root of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1344, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 1344)
         TEST_ERROR
-    record = 3703;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(find.val != (1344 * 2))
         TEST_ERROR
-    record = 1952;      /* Record to left of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+
+    /* Attempt to index existing record in internal node of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)512, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 512)
         TEST_ERROR
-    record = 2884;      /* Record to right of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(find.val != (512 * 2))
         TEST_ERROR
-    record = 2822;      /* Record just after insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+
+    /* Attempt to index existing record in leaf of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)555, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 555)
+        TEST_ERROR
+    if(find.val != (555 * 2))
         TEST_ERROR
 
-    /* Insert records to fill up middle internal node */
-    for(u = 0; u < ((INSERT_SPLIT_ROOT_NREC * 13) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 2); u++) {
-        record = u + (INSERT_SPLIT_ROOT_NREC * 31);
-        if(H5B2_insert(bt2, dxpl, &record) < 0)
+    /* Close the v2 B-tree */
+    if(H5B2_close(bt2, dxpl) < 0)
+        FAIL_STACK_ERROR
+    bt2 = NULL;
+
+    PASSED();
+
+
+    /*
+     * Test inserting many records into v2 B-tree
+     */
+    TESTING("B-tree update: make level 2 B-tree (l+r->middle)");
+
+    /* Create the v2 B-tree & get its address */
+    if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
+        TEST_ERROR
+
+    /* Insert enough records to force root to split into 2 internal nodes */
+    for(u = 0; u < (INSERT_SPLIT_ROOT_NREC_REC * 9); u++) {
+        record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 3) - u;
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+    for(; u < (INSERT_SPLIT_ROOT_NREC_REC * 41); u++) {
+        record.key = u - ((INSERT_SPLIT_ROOT_NREC_REC * 9) - 2);  /* Leave a gap for later insertion */
+        record.val = record.key * 2;
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
             FAIL_STACK_ERROR
     } /* end for */
 
     /* Check up on B-tree */
     bt2_stat.depth = 2;
-    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 2;
+    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC_REC * 41);
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
-    record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
-        TEST_ERROR
-    record = 3703;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
-        TEST_ERROR
-    record = 2789;      /* Record to left of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
-        TEST_ERROR
-    record = 2822;      /* Record to right of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    record.key = 1345;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-    record = 2823;      /* Record just above insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+
+    /* Check for closing & re-opening the B-tree */
+    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
         TEST_ERROR
 
+    /* Add some extra records to right-most leaf */
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 41) + 4;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = (INSERT_SPLIT_ROOT_NREC_REC * 41) + 5;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Add some extra records to middle leaf */
+    record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) - (INSERT_SPLIT_ROOT_NREC_REC * 9)) + 2;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = ((INSERT_SPLIT_ROOT_NREC_REC * 41) - (INSERT_SPLIT_ROOT_NREC_REC * 9)) + 3;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Add some extra records to left-most leaf */
+    record.key = 0;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+    record.key = 1;
+    record.val = record.key * 2;
+    if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
+        FAIL_STACK_ERROR
+
     /* Check for closing & re-opening the B-tree */
     if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
         TEST_ERROR
 
-    /* Insert record to split middle internal node */
-    record = u + (INSERT_SPLIT_ROOT_NREC * 31);
-    if(H5B2_insert(bt2, dxpl, &record) < 0)
+
+    /* Iterate over B-tree to check records have been inserted correctly */
+    idx.key = 0;
+    idx.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &idx) < 0)
         FAIL_STACK_ERROR
 
-    /* Check up on B-tree */
-    bt2_stat.depth = 2;
-    bt2_stat.nrecords = (INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3;
-    if(check_stats(bt2, &bt2_stat) < 0)
+    /* Make certain that the index is correct */
+    if(idx.key != ((INSERT_SPLIT_ROOT_NREC_REC * 41) + 6))
         TEST_ERROR
-    record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+
+    /* Attempt to find non-existant record in level-2 B-tree */
+    /* (Should not be found, but not fail) */
+    find.key = INSERT_SPLIT_ROOT_NREC_REC * 42;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
         TEST_ERROR
-    record = 2789;      /* Middle record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(find.val != (hsize_t)-1)
         TEST_ERROR
-    record = 3703;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+
+    /* Attempt to find existant record in root of level-2 B-tree */
+    find.key = 1345;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (1345 * 2))
         TEST_ERROR
-#ifdef NONE
-    record = 3049;      /* Record to left of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+
+    /* Check with B-tree */
+    record.key = 1345;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
-#endif /* NONE */
-    record = 2822;      /* Record to right of insertion point in middle internal node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+
+    /* Attempt to find existant record in internal node of level-2 B-tree */
+    find.key = 513;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (513 * 2))
         TEST_ERROR
-    record = 2823;      /* Record just above insertion point in leaf node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+
+    /* Check with B-tree */
+    record.key = 513;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
-    /* Check for closing & re-opening the B-tree */
-    if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
+    /* Attempt to find existant record in leaf of level-2 B-tree */
+    find.key = 555;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
+        FAIL_STACK_ERROR
+    if(find.val != (555 * 2))
         TEST_ERROR
 
-    /* Iterate over B-tree to check records have been inserted correctly */
-    idx = 0;
-    if(H5B2_iterate(bt2, dxpl, iter_cb, &idx) < 0)
+    /* Check with B-tree */
+    record.key = 555;
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
+        TEST_ERROR
+
+    /* Attempt to index non-existant record in level-2 B-tree */
+    H5E_BEGIN_TRY {
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_SPLIT_ROOT_NREC_REC * 42), index_rec_cb, NULL);
+    } H5E_END_TRY;
+    /* Should fail */
+    if(ret != FAIL)
+        TEST_ERROR
+
+    /* Attempt to index existing record in level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)1345, index_rec_cb, &find) < 0)
         FAIL_STACK_ERROR
+    if(find.key != 1345)
+        TEST_ERROR
+    if(find.val != (1345 * 2))
+        TEST_ERROR
 
-    /* Make certain that the index is correct */
-    if(idx != ((INSERT_SPLIT_ROOT_NREC * 87) + ((3 * INSERT_SPLIT_ROOT_NREC) / 4) + 3))
+    /* Attempt to index existing record in internal node of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)513, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 513)
+        TEST_ERROR
+    if(find.val != (513 * 2))
+        TEST_ERROR
+
+    /* Attempt to index existing record in leaf of level-2 B-tree */
+    find.key = (hsize_t)-1;
+    find.val = (hsize_t)-1;
+    if(H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)555, index_rec_cb, &find) < 0)
+        FAIL_STACK_ERROR
+    if(find.key != 555)
+        TEST_ERROR
+    if(find.val != (555 * 2))
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -2730,103 +4959,95 @@ error:
 	H5Fclose(file);
     } H5E_END_TRY;
     return 1;
-} /* test_insert_level2_3internal_split() */
+} /* test_update_make_level2() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_insert_lots
+ * Function:	test_update_lots
  *
  * Purpose:	Basic tests for the B-tree v2 code.  This test inserts many
  *              records in random order, enough to make at a level 4 B-tree.
  *
  * Return:	Success:	0
- *
  *		Failure:	1
  *
  * Programmer:	Quincey Koziol
- *              Saturday, February 19, 2005
+ *              Sunday, December 27, 2015
  *
  *-------------------------------------------------------------------------
  */
 static unsigned
-test_insert_lots(hid_t fapl, const H5B2_create_t *cparam,
+test_update_lots(hid_t fapl, const H5B2_create_t *cparam,
     const bt2_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    char	filename[1024];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
-    hsize_t     record;                 /* Record to insert into tree */
-    hsize_t     idx;                    /* Index within B-tree, for iterator */
     time_t      curr_time;              /* Current time, for seeding random number generator */
-    hsize_t     *records;               /* Record #'s for random insertion */
-    unsigned    u;                      /* Local index variable */
-    unsigned    swap_idx;               /* Location to swap with when shuffling */
-    hsize_t     temp_rec;               /* Temporary record */
+    H5B2_test_rec_t *records;           /* Record #'s for random insertion */
+    H5B2_test_rec_t record;             /* Record to insert into tree */
+    H5B2_test_rec_t modify;             /* Modified value */
+    H5B2_test_rec_t find;               /* Record to find */
+    H5B2_test_rec_t iter;               /* Index within B-tree, for iterator */
     H5B2_stat_t bt2_stat;               /* Statistics about B-tree created */
     hsize_t     nrec;                   /* Number of records in B-tree */
+    unsigned    u;                      /* Local index variable */
     herr_t      ret;                    /* Generic error return value */
 
     /* Initialize random number seed */
-    curr_time=HDtime(NULL);
+    curr_time = HDtime(NULL);
 #ifdef QAK
-curr_time=1109170019;
-HDfprintf(stderr,"curr_time=%lu\n",(unsigned long)curr_time);
+curr_time = 1451342093;
+HDfprintf(stderr, "curr_time = %lu\n", (unsigned long)curr_time);
 #endif /* QAK */
     HDsrandom((unsigned)curr_time);
 
     /*
      * Test inserting many records into v2 B-tree
      */
-    TESTING("B-tree insert: create random level 4 B-tree");
+    TESTING("B-tree update: create random level 4 B-tree");
 
     /* Allocate space for the records */
-    if(NULL == (records = (hsize_t *)HDmalloc(sizeof(hsize_t) * INSERT_MANY)))
+    if(NULL == (records = (H5B2_test_rec_t *)HDmalloc(sizeof(H5B2_test_rec_t) * INSERT_MANY_REC)))
         TEST_ERROR
 
     /* Initialize record #'s */
-    for(u = 0; u < INSERT_MANY; u++)
-        records[u] = u;
+    for(u = 0; u < INSERT_MANY_REC; u++) {
+        records[u].key = u;
+        records[u].val = u * 2;
+    } /* end for */
 
     /* Shuffle record #'s */
-    for(u = 0; u < INSERT_MANY; u++) {
-        swap_idx = ((unsigned)HDrandom() % (INSERT_MANY - u)) + u;
+    for(u = 0; u < INSERT_MANY_REC; u++) {
+        H5B2_test_rec_t temp_rec;       /* Temporary record */
+        unsigned swap_idx;              /* Location to swap with when shuffling */
+
+        swap_idx = ((unsigned)HDrandom() % (INSERT_MANY_REC - u)) + u;
         temp_rec = records[u];
         records[u] = records[swap_idx];
         records[swap_idx] = temp_rec;
     } /* end for */
 
-    /* Set the filename to use for this test (dependent on fapl) */
-    h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
-
-    /* Create the file to work on */
-    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+    /* Create the file for the test */
+    if(create_file(&file, &f, fapl) < 0)
         TEST_ERROR
 
-    /* Get a pointer to the internal file object */
-    if(NULL == (f = (H5F_t *)H5I_object(file)))
-        STACK_ERROR
-
-    /* Ignore metadata tags in the file's cache */
-    if(H5AC_ignore_tags(f) < 0)
-        STACK_ERROR
-
     /* Create the v2 B-tree & get its address */
     if(create_btree(f, dxpl, cparam, &bt2, &bt2_addr) < 0)
         TEST_ERROR
 
     /* Insert random records */
-    for(u = 0; u < INSERT_MANY; u++) {
+    for(u = 0; u < INSERT_MANY_REC; u++) {
         record = records[u];
-        if(H5B2_insert(bt2, dxpl, &record) < 0)
+        if(H5B2_update(bt2, dxpl, &record, no_modify_cb, NULL) < 0)
             FAIL_STACK_ERROR
     } /* end for */
 
     /* Check up on B-tree */
     bt2_stat.depth = 4;
-    bt2_stat.nrecords = INSERT_MANY;
+    bt2_stat.nrecords = INSERT_MANY_REC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
 
@@ -2838,18 +5059,11 @@ HDfprintf(stderr,"curr_time=%lu\n",(unsigned long)curr_time);
     /* Close file */
     if(H5Fclose(file) < 0)
         STACK_ERROR
+    file = -1;
 
-    /* Re-open the file */
-    if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
-        FAIL_STACK_ERROR
-
-    /* Get a pointer to the internal file object */
-    if(NULL == (f = (H5F_t *)H5I_object(file)))
-        FAIL_STACK_ERROR
-
-    /* Ignore metadata tags in the file's cache */
-    if(H5AC_ignore_tags(f) < 0)
-        STACK_ERROR
+    /* Re-open the file for the test */
+    if(reopen_file(&file, &f, fapl) < 0)
+        TEST_ERROR
 
     /* Re-open v2 B-tree */
     if(NULL == (bt2 = H5B2_open(f, dxpl, bt2_addr, f)))
@@ -2857,87 +5071,110 @@ HDfprintf(stderr,"curr_time=%lu\n",(unsigned long)curr_time);
 
     /* Check up on B-tree after re-open */
     bt2_stat.depth = 4;
-    bt2_stat.nrecords = INSERT_MANY;
+    bt2_stat.nrecords = INSERT_MANY_REC;
     if(check_stats(bt2, &bt2_stat) < 0)
         TEST_ERROR
 
     /* Iterate over B-tree to check records have been inserted correctly */
-    idx = 0;
-    if(H5B2_iterate(bt2, dxpl, iter_cb, &idx) < 0)
+    iter.key = 0;
+    iter.val = 0;
+    if(H5B2_iterate(bt2, dxpl, iter_rec_cb, &iter) < 0)
         FAIL_STACK_ERROR
 
     /* Make certain that the index is correct */
-    if(idx != INSERT_MANY)
+    if(iter.key != INSERT_MANY_REC)
         TEST_ERROR
 
     /* Attempt to find non-existant record in level-4 B-tree */
     /* (Should not be found, but not fail) */
-    idx = INSERT_MANY * 2;
-    if(H5B2_find(bt2, dxpl, &idx, find_cb, &idx) != FALSE)
+    find.key = INSERT_MANY_REC * 2;
+    find.val = (hsize_t)-1;
+    if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != FALSE)
+        TEST_ERROR
+    if(find.val != (hsize_t)-1)
         TEST_ERROR
 
     /* Find random records */
-    for(u = 0; u < FIND_MANY; u++) {
+    for(u = 0; u < FIND_MANY_REC; u++) {
         /* Pick random record */
-        idx = (hsize_t)(HDrandom()%INSERT_MANY);
+        find.key = (hsize_t)(HDrandom() % INSERT_MANY_REC);
+        find.val = (hsize_t)-1;
 
-        /* Attempt to find existant record in root of level-4 B-tree */
-        if(H5B2_find(bt2, dxpl, &idx, find_cb, &idx) != TRUE)
+        /* Attempt to find existant record in level-4 B-tree */
+        if(H5B2_find(bt2, dxpl, &find, find_rec_cb, &find) != TRUE)
             FAIL_STACK_ERROR
+        if(find.val != (find.key * 2))
+            TEST_ERROR
     } /* end for */
 
     /* Attempt to index non-existant record in level-4 B-tree, in increasing & decreasing order */
     H5E_BEGIN_TRY {
-	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_MANY*3), find_cb, NULL);
+	ret = H5B2_index(bt2, dxpl, H5_ITER_INC, (hsize_t)(INSERT_MANY_REC * 3), find_rec_cb, NULL);
     } H5E_END_TRY;
     /* Should fail */
     if(ret != FAIL)
         TEST_ERROR
     H5E_BEGIN_TRY {
-	ret = H5B2_index(bt2, dxpl, H5_ITER_DEC, (hsize_t)(INSERT_MANY*3), find_cb, NULL);
+	ret = H5B2_index(bt2, dxpl, H5_ITER_DEC, (hsize_t)(INSERT_MANY_REC * 3), find_rec_cb, NULL);
     } H5E_END_TRY;
     /* Should fail */
     if(ret != FAIL)
         TEST_ERROR
 
     /* Find random records */
-    for(u = 0; u < FIND_MANY; u++) {
+    for(u = 0; u < FIND_MANY_REC; u++) {
+        hsize_t idx;    /* Record index */
+
         /* Pick random record */
-        idx = (hsize_t)(HDrandom() % INSERT_MANY);
+        idx = (hsize_t)(HDrandom() % INSERT_MANY_REC);
 
-        /* Attempt to find existant record in root of level-4 B-tree */
+        /* Reset find record */
+        find.key = (hsize_t)-1;
+        find.val = (hsize_t)-1;
+
+        /* Attempt to find existant record in level-4 B-tree */
         /* (in increasing order) */
-        if(H5B2_index(bt2, dxpl, H5_ITER_INC, idx, find_cb, &idx) < 0)
+        if(H5B2_index(bt2, dxpl, H5_ITER_INC, idx, index_rec_cb, &find) < 0)
             FAIL_STACK_ERROR
+        if(find.key != idx)
+            TEST_ERROR
+        if(find.val != (find.key * 2))
+            TEST_ERROR
 
-        /* Attempt to find existant record in root of level-4 B-tree */
+        /* Reset find record */
+        find.key = (hsize_t)-1;
+        find.val = (hsize_t)-1;
+
+        /* Attempt to find existant record in level-4 B-tree */
         /* (in decreasing order) */
-        if(H5B2_index(bt2, dxpl, H5_ITER_DEC, idx, find_dec_cb, &idx) < 0)
+        if(H5B2_index(bt2, dxpl, H5_ITER_DEC, idx, index_rec_cb, &find) < 0)
             FAIL_STACK_ERROR
+        if(find.key != (INSERT_MANY_REC - (idx + 1)))
+            TEST_ERROR
+        if(find.val != (find.key * 2))
+            TEST_ERROR
     } /* end for */
 
     PASSED();
 
-    TESTING("B-tree insert: attempt duplicate record in level 4 B-tree");
+    TESTING("B-tree update: update record in level 4 B-tree");
 
     /* Check for closing & re-opening the B-tree */
     if(reopen_btree(f, dxpl, &bt2, bt2_addr, tparam) < 0)
         TEST_ERROR
 
-    record = INSERT_MANY / 2;
-    H5E_BEGIN_TRY {
-        ret = H5B2_insert(bt2, dxpl, &record);
-    } H5E_END_TRY;
-    /* Should fail */
-    if(ret != FAIL)
-        TEST_ERROR
+    record.key = INSERT_MANY_REC / 2;
+    modify.key = INSERT_MANY_REC / 2;
+    modify.val = record.key * 3;
+    if(H5B2_update(bt2, dxpl, &record, modify_rec_cb, &modify) < 0)
+        FAIL_STACK_ERROR
 
     /* Query the number of records in the B-tree */
     if(H5B2_get_nrec(bt2, &nrec) < 0)
         FAIL_STACK_ERROR
 
     /* Make certain that the # of records is correct */
-    if(nrec != INSERT_MANY)
+    if(nrec != INSERT_MANY_REC)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -2956,14 +5193,16 @@ HDfprintf(stderr,"curr_time=%lu\n",(unsigned long)curr_time);
     return 0;
 
 error:
+    HDfprintf(stderr, "curr_time = %lu\n", (unsigned long)curr_time);
     H5E_BEGIN_TRY {
         if(bt2)
             H5B2_close(bt2, dxpl);
 	H5Fclose(file);
     } H5E_END_TRY;
     HDfree(records);
+
     return 1;
-} /* test_insert_lots() */
+} /* test_update_lots() */
 
 

 /*-------------------------------------------------------------------------
@@ -2985,7 +5224,7 @@ test_remove_basic(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -3293,7 +5532,7 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -3365,13 +5604,13 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check up on B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 94;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = (INSERT_SPLIT_ROOT_NREC * 2) - 2;
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     rrecord = 0;
@@ -3384,10 +5623,10 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Make certain that the leaf nodes didn't redistribute */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 94;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Query the number of records in the B-tree */
@@ -3409,7 +5648,7 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check up on B-tree */
     record = 0;
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     rrecord = 1;
@@ -3422,10 +5661,10 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Make certain that the leaf nodes didn't redistribute */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 94;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Query the number of records in the B-tree */
@@ -3447,7 +5686,7 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check up on B-tree */
     record = INSERT_SPLIT_ROOT_NREC;
-    if(check_node_depth(bt2, dxpl, record, (unsigned)0) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)0) < 0)
         TEST_ERROR
 
     rrecord = 0;
@@ -3460,10 +5699,10 @@ test_remove_level1_noredistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Make certain that the leaf nodes didn't redistribute */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 94;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Query the number of records in the B-tree */
@@ -3516,7 +5755,7 @@ test_remove_level1_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -3545,10 +5784,10 @@ test_remove_level1_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 94;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Query the number of records in the B-tree */
@@ -3593,10 +5832,10 @@ test_remove_level1_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 90;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     PASSED();
@@ -3629,10 +5868,10 @@ test_remove_level1_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 64;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 90;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     PASSED();
@@ -3665,10 +5904,10 @@ test_remove_level1_redistrib(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 64;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 91;      /* Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
 
     /* Close the v2 B-tree */
@@ -3713,7 +5952,7 @@ test_remove_level1_2leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -3742,7 +5981,7 @@ test_remove_level1_2leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -3815,7 +6054,7 @@ test_remove_level1_2leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -3892,7 +6131,7 @@ test_remove_level1_3leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -3921,7 +6160,7 @@ test_remove_level1_3leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4018,7 +6257,7 @@ test_remove_level1_promote(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4047,13 +6286,13 @@ test_remove_level1_promote(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 125;      /* Center-Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 188;      /* Center-Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 4;
@@ -4093,13 +6332,13 @@ test_remove_level1_promote(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 125;      /* Center-Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 188;      /* Center-Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 4;
@@ -4139,13 +6378,13 @@ test_remove_level1_promote(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 63;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 125;      /* Center-Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 188;      /* Center-Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 4;
@@ -4181,13 +6420,13 @@ test_remove_level1_promote(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 63;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 126;      /* Center-Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     record = 188;      /* Center-Right record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 4;
@@ -4245,7 +6484,7 @@ test_remove_level1_promote_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4274,7 +6513,7 @@ test_remove_level1_promote_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4335,7 +6574,7 @@ test_remove_level1_promote_2leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4393,7 +6632,7 @@ test_remove_level1_promote_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4422,7 +6661,7 @@ test_remove_level1_promote_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4483,7 +6722,7 @@ test_remove_level1_promote_3leaf_redistrib(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 39;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4541,7 +6780,7 @@ test_remove_level1_promote_2leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4570,7 +6809,7 @@ test_remove_level1_promote_2leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4686,7 +6925,7 @@ test_remove_level1_promote_3leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4715,7 +6954,7 @@ test_remove_level1_promote_3leaf_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 62;      /* Left-most record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)1) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)1) < 0)
         TEST_ERROR
     ninfo.depth = 1;
     ninfo.nrec = 2;
@@ -4831,7 +7070,7 @@ test_remove_level1_collapse(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4970,7 +7209,7 @@ test_remove_level2_promote(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -4999,7 +7238,7 @@ test_remove_level2_promote(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5256,7 +7495,7 @@ test_remove_level2_promote_2internal_redistrib(hid_t fapl, const H5B2_create_t *
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -5285,7 +7524,7 @@ test_remove_level2_promote_2internal_redistrib(hid_t fapl, const H5B2_create_t *
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5406,7 +7645,7 @@ test_remove_level2_promote_3internal_redistrib(hid_t fapl, const H5B2_create_t *
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -5435,7 +7674,7 @@ test_remove_level2_promote_3internal_redistrib(hid_t fapl, const H5B2_create_t *
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5556,7 +7795,7 @@ test_remove_level2_promote_2internal_merge(hid_t fapl, const H5B2_create_t *cpar
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -5585,7 +7824,7 @@ test_remove_level2_promote_2internal_merge(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5707,7 +7946,7 @@ test_remove_level2_promote_3internal_merge(hid_t fapl, const H5B2_create_t *cpar
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -5736,7 +7975,7 @@ test_remove_level2_promote_3internal_merge(hid_t fapl, const H5B2_create_t *cpar
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5858,7 +8097,7 @@ test_remove_level2_2internal_merge_left(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -5887,7 +8126,7 @@ test_remove_level2_2internal_merge_left(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -5984,7 +8223,7 @@ test_remove_level2_2internal_merge_right(hid_t fapl, const H5B2_create_t *cparam
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -6013,7 +8252,7 @@ test_remove_level2_2internal_merge_right(hid_t fapl, const H5B2_create_t *cparam
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -6110,7 +8349,7 @@ test_remove_level2_3internal_merge(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -6139,7 +8378,7 @@ test_remove_level2_3internal_merge(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -6236,7 +8475,7 @@ test_remove_level2_collapse_right(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -6266,7 +8505,7 @@ test_remove_level2_collapse_right(hid_t fapl, const H5B2_create_t *cparam,
 
     /* Check record values in root of B-tree */
     record = 1889;      /* Left record in root node */
-    if(check_node_depth(bt2, dxpl, record, (unsigned)2) < 0)
+    if(check_node_depth(bt2, dxpl, &record, (unsigned)2) < 0)
         TEST_ERROR
     ninfo.depth = 2;
     ninfo.nrec = 2;
@@ -6362,7 +8601,7 @@ gen_l4_btree2(const char *filename, hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     hsize_t     record;                 /* Record to insert into tree */
     unsigned    u;                      /* Local index variable */
@@ -6443,7 +8682,7 @@ test_remove_lots(const char *env_h5_drvr, hid_t fapl, const H5B2_create_t *cpara
     int         fd = -1;                /* File descriptor */
     h5_stat_t	sb;                     /* Stat buffer for file */
     void        *file_data = NULL;      /* Copy of file data */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -6891,7 +9130,7 @@ test_find_neighbor(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -7115,7 +9354,7 @@ test_delete(hid_t fapl, const H5B2_create_t *cparam)
     H5F_t	*f = NULL;              /* Internal file object pointer */
     h5_stat_size_t       empty_size;             /* Size of an empty file */
     h5_stat_size_t       file_size;              /* Size of each file created */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -7222,7 +9461,7 @@ test_delete(hid_t fapl, const H5B2_create_t *cparam)
     /*
      * Delete v2 B-tree
      */
-    if(H5B2_delete(f, H5P_DATASET_XFER_DEFAULT, bt2_addr, f, NULL, NULL) < 0)
+    if(H5B2_delete(f, H5AC_ind_read_dxpl_id, bt2_addr, f, NULL, NULL) < 0)
         FAIL_STACK_ERROR
 
     /* Close file */
@@ -7385,7 +9624,7 @@ test_modify(hid_t fapl, const H5B2_create_t *cparam,
 {
     hid_t	file = -1;              /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
     hsize_t     record;                 /* Record to insert into tree */
@@ -7619,7 +9858,7 @@ test_open_twice_diff(hid_t fapl, const H5B2_create_t *cparam)
     hid_t	file00 = -1;            /* File ID */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5F_t	*f2 = NULL;             /* Internal file object pointer */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;        /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;        /* DXPL to use */
     H5B2_t      *bt2 = NULL;            /* v2 B-tree wrapper */
     H5B2_t      *bt2_2 = NULL;          /* Second v2 B-tree wrapper */
     haddr_t     bt2_addr;               /* Address of B-tree created */
@@ -7750,7 +9989,7 @@ error:
 int
 main(void)
 {
-    H5B2_create_t cparam;               /* Creation parameters for v2 B-tree */
+    H5B2_create_t cparam, cparam2;      /* Creation parameters for v2 B-tree */
     bt2_test_param_t tparam;            /* Test parameters for v2 B-tree */
     hid_t	fapl = -1;              /* File access property list for data files */
     unsigned	nerrors = 0;            /* Cumulative error count */
@@ -7770,8 +10009,7 @@ main(void)
         printf("***Express test mode on.  Some tests may be skipped\n");
 
     /* Initialize v2 B-tree creation parameters */
-    init_cparam(&cparam);
-
+    init_cparam(&cparam, &cparam2);
 
     /* Loop over re-opening B-tree during tests */
     for(reopen = FALSE; reopen <= TRUE; reopen++) {
@@ -7785,7 +10023,7 @@ main(void)
         } /* end else */
 
         /* Test B-tree record insertion */
-        /* Iteration, find & index routines tested in these routines as well */
+        /* (Iteration, find & index routines exercised in these routines as well) */
         nerrors += test_insert_basic(fapl, &cparam, &tparam);
         nerrors += test_insert_split_root(fapl, &cparam, &tparam);
         nerrors += test_insert_level1_2leaf_redistrib(fapl, &cparam, &tparam);
@@ -7804,6 +10042,20 @@ main(void)
         else
             nerrors += test_insert_lots(fapl, &cparam, &tparam);
 
+        /* Test B-tree record update (ie. insert/modify) */
+        /* (Iteration, find & index routines exercised in these routines as well) */
+        nerrors += test_update_basic(fapl, &cparam2, &tparam);
+        nerrors += test_update_split_root(fapl, &cparam2, &tparam);
+        nerrors += test_update_level1_2leaf_redistrib(fapl, &cparam2, &tparam);
+        nerrors += test_update_level1_side_split(fapl, &cparam2, &tparam);
+        nerrors += test_update_level1_3leaf_redistrib(fapl, &cparam2, &tparam);
+        nerrors += test_update_level1_middle_split(fapl, &cparam2, &tparam);
+        nerrors += test_update_make_level2(fapl, &cparam2, &tparam);
+        if(ExpressMode > 1)
+            printf("***Express test mode on.  test_update_lots skipped\n");
+        else
+            nerrors += test_update_lots(fapl, &cparam2, &tparam);
+
         /* Test B-tree record removal */
         /* Querying the number of records routine also tested in these routines as well */
         nerrors += test_remove_basic(fapl, &cparam, &tparam);
diff --git a/test/cache.c b/test/cache.c
index 3a4a0da..b96819f 100644
--- a/test/cache.c
+++ b/test/cache.c
@@ -3226,7 +3226,7 @@ check_flush_cache__empty_cache(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
 
         if ( result < 0 ) {
 
@@ -3237,7 +3237,7 @@ check_flush_cache__empty_cache(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -3248,7 +3248,7 @@ check_flush_cache__empty_cache(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_CLEAR_ONLY_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_CLEAR_ONLY_FLAG);
 
         if ( result < 0 ) {
 
@@ -3260,7 +3260,7 @@ check_flush_cache__empty_cache(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_MARKED_ENTRIES_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_MARKED_ENTRIES_FLAG);
 
         if ( result < 0 ) {
 
@@ -4931,7 +4931,7 @@ check_flush_cache__multi_entry_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, flush_flags);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, flush_flags);
 
         if ( result < 0 ) {
 
@@ -5005,7 +5005,7 @@ check_flush_cache__multi_entry_test(H5F_t * file_ptr,
     /* clean up the cache to prep for the next test */
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -5162,7 +5162,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, flush_flags);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, flush_flags);
 
         if ( result < 0 ) {
 
@@ -5236,7 +5236,7 @@ check_flush_cache__pe_multi_entry_test(H5F_t * file_ptr,
     /* clean up the cache to prep for the next test */
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -9233,7 +9233,7 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, flush_flags);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, flush_flags);
 
         if ( result < 0 ) {
 
@@ -9425,7 +9425,7 @@ check_flush_cache__flush_op_test(H5F_t * file_ptr,
     /* clean up the cache to prep for the next test */
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -10686,7 +10686,7 @@ check_flush_cache__flush_op_eviction_test(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -12415,7 +12415,7 @@ check_flush_cache__single_entry_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, flush_flags);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, flush_flags);
 
         if ( result < 0 ) {
 
@@ -12474,7 +12474,7 @@ check_flush_cache__single_entry_test(H5F_t * file_ptr,
     /* clean up the cache to prep for the next test */
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -12607,7 +12607,7 @@ check_flush_cache__pinned_single_entry_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, flush_flags);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, flush_flags);
 
         if ( result < 0 ) {
 
@@ -12682,7 +12682,7 @@ check_flush_cache__pinned_single_entry_test(H5F_t * file_ptr,
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -14207,7 +14207,7 @@ check_resize_entry(void)
 
         } else {
 
-            result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                        entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
             if ( result < 0 ) {
@@ -14292,7 +14292,7 @@ check_resize_entry(void)
 
         } else {
 
-            result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                        entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
             if ( result < 0 ) {
@@ -14652,7 +14652,7 @@ check_resize_entry(void)
 
         } else {
 
-            result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                        entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
             if ( result < 0 ) {
@@ -14739,7 +14739,7 @@ check_resize_entry(void)
 
         } else {
 
-            result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                        entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
             if ( result < 0 ) {
@@ -15807,7 +15807,7 @@ check_flush_protected_err(void)
 
         protect_entry(file_ptr, 0, 0);
 
-        if ( H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET) >= 0 ) {
+        if ( H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET) >= 0 ) {
 
             pass = FALSE;
             failure_mssg = "flush succeeded on cache with protected entry.\n";
@@ -15816,7 +15816,7 @@ check_flush_protected_err(void)
 
             unprotect_entry(file_ptr, 0, 0, H5C__DIRTIED_FLAG);
 
-            if ( H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET) < 0 ) {
+            if ( H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET) < 0 ) {
 
                 pass = FALSE;
                 failure_mssg = "flush failed after unprotect.\n";
@@ -15885,7 +15885,7 @@ check_destroy_pinned_err(void)
         protect_entry(file_ptr, 0, 0);
 	unprotect_entry(file_ptr, 0, 0, H5C__PIN_ENTRY_FLAG);
 
-        if ( H5C_dest(file_ptr, H5P_DATASET_XFER_DEFAULT) >= 0 ) {
+        if ( H5C_dest(file_ptr, H5AC_ind_read_dxpl_id) >= 0 ) {
 
             pass = FALSE;
             failure_mssg = "destroy succeeded on cache with pinned entry.\n";
@@ -15894,7 +15894,7 @@ check_destroy_pinned_err(void)
 
 	    unpin_entry(0, 0);
 
-            if ( H5C_dest(file_ptr, H5P_DATASET_XFER_DEFAULT) < 0 ) {
+            if ( H5C_dest(file_ptr, H5AC_ind_read_dxpl_id) < 0 ) {
 
                 pass = FALSE;
                 failure_mssg = "destroy failed after unpin.\n";
@@ -15971,7 +15971,7 @@ check_destroy_protected_err(void)
 
         protect_entry(file_ptr, 0, 0);
 
-        if ( H5C_dest(file_ptr, H5P_DATASET_XFER_DEFAULT) >= 0 ) {
+        if ( H5C_dest(file_ptr, H5AC_ind_read_dxpl_id) >= 0 ) {
 
             pass = FALSE;
             failure_mssg = "destroy succeeded on cache with protected entry.\n";
@@ -15980,7 +15980,7 @@ check_destroy_protected_err(void)
 
             unprotect_entry(file_ptr, 0, 0, H5C__DIRTIED_FLAG);
 
-            if ( H5C_dest(file_ptr, H5P_DATASET_XFER_DEFAULT) < 0 ) {
+            if ( H5C_dest(file_ptr, H5AC_ind_read_dxpl_id) < 0 ) {
 
                 pass = FALSE;
                 failure_mssg = "destroy failed after unprotect.\n";
@@ -16064,7 +16064,7 @@ check_duplicate_insert_err(void)
             base_addr = entries[0];
             entry_ptr = &(base_addr[0]);
 
-            result = H5C_insert_entry(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_insert_entry(file_ptr, H5AC_ind_read_dxpl_id,
                                       &(types[0]), entry_ptr->addr,
                                       (void *)entry_ptr, H5C__NO_FLAGS_SET);
 
@@ -16242,7 +16242,7 @@ check_double_pin_err(void)
 
     if ( pass ) {
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, H5C__PIN_ENTRY_FLAG);
 
         if ( result > 0 ) {
@@ -16326,7 +16326,7 @@ check_double_unpin_err(void)
 
     if ( pass ) {
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, H5C__UNPIN_ENTRY_FLAG);
 
         if ( result > 0 ) {
@@ -16526,7 +16526,7 @@ check_double_protect_err(void)
 
     if ( pass ) {
 
-        cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5AC_ind_read_dxpl_id,
 			               &(types[0]), entry_ptr->addr,
 				       &entry_ptr->addr, H5C__NO_FLAGS_SET);
 
@@ -16606,7 +16606,7 @@ check_double_unprotect_err(void)
 
     if ( pass ) {
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, H5C__NO_FLAGS_SET);
 
         if ( result > 0 ) {
@@ -16770,7 +16770,7 @@ check_expunge_entry_errs(void)
 
     if ( pass ) {
 
-	result = H5C_expunge_entry(file_ptr, H5P_DATASET_XFER_DEFAULT,
+	result = H5C_expunge_entry(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[0]), entry_ptr->addr, H5C__NO_FLAGS_SET);
 
         if ( result > 0 ) {
@@ -16788,7 +16788,7 @@ check_expunge_entry_errs(void)
 
     if ( pass ) {
 
-	result = H5C_expunge_entry(file_ptr, H5P_DATASET_XFER_DEFAULT,
+	result = H5C_expunge_entry(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[0]), entry_ptr->addr, H5C__NO_FLAGS_SET);
 
         if ( result > 0 ) {
@@ -16806,7 +16806,7 @@ check_expunge_entry_errs(void)
 
     if ( pass ) {
 
-	result = H5C_expunge_entry(file_ptr, H5P_DATASET_XFER_DEFAULT,
+	result = H5C_expunge_entry(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[0]), entry_ptr->addr, H5C__NO_FLAGS_SET);
 
         if ( result < 0 ) {
@@ -16982,7 +16982,7 @@ check_unprotect_ro_dirty_err(void)
 
     if ( pass ) {
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
         if ( result >= 0 ) {
@@ -17025,7 +17025,7 @@ check_unprotect_ro_dirty_err(void)
 
     if ( pass ) {
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, H5C__DIRTIED_FLAG);
 
         if ( result > 0 ) {
@@ -17110,7 +17110,7 @@ check_protect_ro_rw_err(void)
 
     if ( pass ) {
 
-        thing_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        thing_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5AC_ind_read_dxpl_id,
 			         &(types[0]), entry_ptr->addr,
 				 &entry_ptr->addr, H5C__NO_FLAGS_SET);
 
@@ -17203,7 +17203,7 @@ check_protect_retries(void)
         entry_ptr->max_verify_ct = 3;
         entry_ptr->verify_ct = 0;
 
-	cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+	cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[type]), entry_ptr->addr, &entry_ptr->addr, H5C__READ_ONLY_FLAG);
 
 	if ( ( cache_entry_ptr != (void *)entry_ptr ) ||
@@ -17248,7 +17248,7 @@ check_protect_retries(void)
         entry_ptr->max_verify_ct = 11;
         entry_ptr->verify_ct = 0;
 
-	cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+	cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[type]), entry_ptr->addr, &entry_ptr->addr, H5C__READ_ONLY_FLAG);
 
 	/* H5C_protect() should fail after all retries fail */
@@ -30946,7 +30946,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31052,7 +31052,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31164,7 +31164,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31283,7 +31283,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31459,7 +31459,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31669,7 +31669,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31827,7 +31827,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -31961,7 +31961,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -32154,7 +32154,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -32393,7 +32393,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -32650,7 +32650,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -32937,7 +32937,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -33253,7 +33253,7 @@ check_flush_deps_order(void)
         /* Reset index for tracking flush order */
         flush_order = 0;
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__NO_FLAGS_SET);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__NO_FLAGS_SET);
         if( result < 0 ) CACHE_ERROR("flushing entries with flush dependendices")
 
         /* Change expected values, and verify the status of the entries
@@ -34591,7 +34591,7 @@ cedds__expunge_dirty_entry_in_flush_test(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -34952,7 +34952,7 @@ cedds__H5C_make_space_in_cache(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -35395,7 +35395,7 @@ cedds__H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -35770,7 +35770,7 @@ cedds__H5C_flush_invalidate_cache__bucket_scan(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
@@ -36277,7 +36277,7 @@ check_stats__smoke_check_1(H5F_t * file_ptr)
 
     if ( pass ) {
 
-        result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT, H5C__FLUSH_INVALIDATE_FLAG);
+        result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id, H5C__FLUSH_INVALIDATE_FLAG);
 
         if ( result < 0 ) {
 
diff --git a/test/cache_common.c b/test/cache_common.c
index 0433f1c..96199f8 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -3210,7 +3210,7 @@ setup_cache(size_t max_cache_size,
 
     if ( pass ) { /* allocate space for test entries */
 
-        actual_base_addr = H5MF_alloc(file_ptr, H5FD_MEM_DEFAULT, H5P_DATASET_XFER_DEFAULT,
+        actual_base_addr = H5MF_alloc(file_ptr, H5FD_MEM_DEFAULT, H5AC_ind_read_dxpl_id,
 			              (hsize_t)(ADDR_SPACE_SIZE + BASE_ADDR));
 
 	if ( actual_base_addr == HADDR_UNDEF ) {
@@ -3295,7 +3295,7 @@ takedown_cache(H5F_t * file_ptr,
 
         flush_cache(file_ptr, TRUE, FALSE, FALSE);
 
-        H5C_dest(file_ptr, H5P_DATASET_XFER_DEFAULT);
+        H5C_dest(file_ptr, H5AC_ind_read_dxpl_id);
 
 	if ( saved_cache != NULL ) {
 
@@ -3320,7 +3320,7 @@ takedown_cache(H5F_t * file_ptr,
                 HDassert ( file_ptr );
             }
 
-            H5MF_xfree(file_ptr, H5FD_MEM_DEFAULT, H5P_DATASET_XFER_DEFAULT, saved_actual_base_addr,
+            H5MF_xfree(file_ptr, H5FD_MEM_DEFAULT, H5AC_ind_read_dxpl_id, saved_actual_base_addr,
                                           (hsize_t)(ADDR_SPACE_SIZE + BASE_ADDR));
             saved_actual_base_addr = HADDR_UNDEF;
         }
@@ -3409,7 +3409,7 @@ expunge_entry(H5F_t * file_ptr,
         HDassert( ! ( entry_ptr->header.is_pinned ) );
 	HDassert( ! ( entry_ptr->is_pinned ) );
 
-        result = H5C_expunge_entry(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_expunge_entry(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[type]), entry_ptr->addr, H5C__NO_FLAGS_SET);
 
         if ( result < 0 ) {
@@ -3461,11 +3461,11 @@ flush_cache(H5F_t * file_ptr,
         cache_ptr = file_ptr->shared->cache;
 
         if(destroy_entries)
-            result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id,
                                      H5C__FLUSH_INVALIDATE_FLAG);
 
         else
-            result = H5C_flush_cache(file_ptr, H5P_DATASET_XFER_DEFAULT,
+            result = H5C_flush_cache(file_ptr, H5AC_ind_read_dxpl_id,
                                      H5C__NO_FLAGS_SET);
 
         if(dump_stats)
@@ -3600,7 +3600,7 @@ insert_entry(H5F_t * file_ptr,
 {
     H5C_t * cache_ptr;
     herr_t result;
-    hid_t xfer = H5AC_ind_dxpl_id;
+    hid_t xfer = H5AC_ind_read_dxpl_id;
     hbool_t insert_pinned;
     test_entry_t * base_addr;
     test_entry_t * entry_ptr;
@@ -3616,7 +3616,7 @@ insert_entry(H5F_t * file_ptr,
 
         base_addr = entries[type];
         entry_ptr = &(base_addr[idx]);
-	baddrs = base_addrs[type];
+        baddrs = base_addrs[type];
 
         HDassert( entry_ptr->index == idx );
         HDassert( entry_ptr->type == type );
@@ -3625,16 +3625,16 @@ insert_entry(H5F_t * file_ptr,
         HDassert( entry_ptr->flush_dep_npar == 0 );
         HDassert( entry_ptr->flush_dep_nchd == 0 );
 
-	insert_pinned = (hbool_t)((flags & H5C__PIN_ENTRY_FLAG) != 0 );
+        insert_pinned = (hbool_t)((flags & H5C__PIN_ENTRY_FLAG) != 0 );
 
-	entry_ptr->is_dirty = TRUE;
+        entry_ptr->is_dirty = TRUE;
 
-	/* Set the base address of the entry type into the property list as tag */
-	/* Use to cork entries for the object */
-	if(H5AC_tag(xfer, baddrs, NULL) < 0) {
-	    pass = FALSE;
-	    failure_mssg = "error in H5P_set().";
-	}
+        /* Set the base address of the entry type into the property list as tag */
+        /* Use to cork entries for the object */
+        if(H5AC_tag(xfer, baddrs, NULL) < 0) {
+            pass = FALSE;
+            failure_mssg = "error in H5P_set().";
+        }
 
         result = H5C_insert_entry(file_ptr, xfer,
 	        &(types[type]), entry_ptr->addr, (void *)entry_ptr, flags);
@@ -3663,25 +3663,25 @@ insert_entry(H5F_t * file_ptr,
                       "entry_ptr->addr != entry_ptr->header.addr = %d\n",
                        (int)(entry_ptr->addr != entry_ptr->header.addr));
 #endif
-        }
-	HDassert(entry_ptr->cache_ptr == NULL);
+        } /* end if */
+        HDassert(entry_ptr->cache_ptr == NULL);
 
         entry_ptr->file_ptr = file_ptr;
         entry_ptr->cache_ptr = cache_ptr;
 
-	if(insert_pinned)
-	    HDassert(entry_ptr->header.is_pinned);
-	else
-	    HDassert(!(entry_ptr->header.is_pinned));
+        if(insert_pinned)
+            HDassert(entry_ptr->header.is_pinned);
+        else
+            HDassert(!(entry_ptr->header.is_pinned));
         entry_ptr->is_pinned = insert_pinned;
         entry_ptr->pinned_from_client = insert_pinned;
 
-	if(entry_ptr->header.is_corked)
-	    entry_ptr->is_corked = TRUE;
+        if(entry_ptr->header.is_corked)
+            entry_ptr->is_corked = TRUE;
 
         HDassert( entry_ptr->header.is_dirty );
         HDassert( ((entry_ptr->header).type)->id == type );
-    }
+    } /* end if */
 
     return;
 
@@ -3887,7 +3887,7 @@ protect_entry(H5F_t * file_ptr,
     test_entry_t * base_addr;
     test_entry_t * entry_ptr;
     haddr_t baddrs;
-    hid_t xfer = H5AC_ind_dxpl_id;
+    hid_t xfer = H5AC_ind_read_dxpl_id;
     H5C_cache_entry_t * cache_entry_ptr;
 
     if ( pass ) {
@@ -3900,19 +3900,19 @@ protect_entry(H5F_t * file_ptr,
 
         base_addr = entries[type];
         entry_ptr = &(base_addr[idx]);
-	baddrs = base_addrs[type];
+        baddrs = base_addrs[type];
 
         HDassert( entry_ptr->index == idx );
         HDassert( entry_ptr->type == type );
         HDassert( entry_ptr == entry_ptr->self );
         HDassert( !(entry_ptr->is_protected) );
 
-	/* Set the base address of the entry type into the property list as tag */
-	/* Use to cork entries for the object */
-	if(H5AC_tag(xfer, baddrs, NULL) < 0) {
-	    pass = FALSE;
-	    failure_mssg = "error in H5P_set().";
-	}
+        /* Set the base address of the entry type into the property list as tag */
+        /* Use to cork entries for the object */
+        if(H5AC_tag(xfer, baddrs, NULL) < 0) {
+            pass = FALSE;
+            failure_mssg = "error in H5P_set().";
+        }
 
         cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, xfer,
                 &(types[type]), entry_ptr->addr, &entry_ptr->addr, 
@@ -3945,10 +3945,10 @@ protect_entry(H5F_t * file_ptr,
             HDfprintf(stdout,
                       "entry_ptr->addr = %d, entry_ptr->header.addr = %d\n",
                       (int)(entry_ptr->addr), (int)(entry_ptr->header.addr));
-	    HDfprintf(stdout, 
-                   "entry_ptr->verify_ct = %d, entry_ptr->max_verify_ct = %d\n",
-		   entry_ptr->verify_ct, entry_ptr->max_verify_ct);
-	    H5Eprint2(H5E_DEFAULT, stdout);
+            HDfprintf(stdout, 
+                    "entry_ptr->verify_ct = %d, entry_ptr->max_verify_ct = %d\n",
+                    entry_ptr->verify_ct, entry_ptr->max_verify_ct);
+            H5Eprint2(H5E_DEFAULT, stdout);
 #endif
             pass = FALSE;
             failure_mssg = "error in H5C_protect().";
@@ -4019,7 +4019,7 @@ protect_entry_ro(H5F_t * file_ptr,
 		  ( ( entry_ptr->is_read_only ) &&
 		    ( entry_ptr->ro_ref_count > 0 ) ) );
 
-        cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        cache_entry_ptr = (H5C_cache_entry_t *)H5C_protect(file_ptr, H5AC_ind_read_dxpl_id,
                 &(types[type]), entry_ptr->addr, &entry_ptr->addr, H5C__READ_ONLY_FLAG);
 
         if ( ( cache_entry_ptr != (void *)entry_ptr ) ||
@@ -4236,7 +4236,7 @@ unprotect_entry(H5F_t * file_ptr,
                 mark_flush_dep_dirty(entry_ptr);
         } /* end if */
 
-        result = H5C_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT,
+        result = H5C_unprotect(file_ptr, H5AC_ind_read_dxpl_id,
                     entry_ptr->addr, (void *)entry_ptr, flags);
 
         if ( ( result < 0 ) ||
diff --git a/test/cache_tagging.c b/test/cache_tagging.c
index 470f7a1..0cc200c 100644
--- a/test/cache_tagging.c
+++ b/test/cache_tagging.c
@@ -3866,26 +3866,26 @@ check_invalid_tag_application(void)
 
     /* Call H5HL_create, an internal function that calls H5AC_insert_entry without setting up a tag */
     /* Ensure this returns FAILURE, as a tag has not been set up. */
-    if ( H5HL_create(f, H5AC_ind_dxpl_id, (size_t)1024, &addr) >= 0) TEST_ERROR;
+    if ( H5HL_create(f, H5AC_ind_read_dxpl_id, (size_t)1024, &addr) >= 0) TEST_ERROR;
 
     /* Now set up a tag in the dxpl */
-    if ( H5AC_tag(H5AC_ind_dxpl_id, (haddr_t)25, NULL) < 0) TEST_ERROR;
+    if ( H5AC_tag(H5AC_ind_read_dxpl_id, (haddr_t)25, NULL) < 0) TEST_ERROR;
 
     /* Verify the same call to H5HL_create now works as intended, with a tag set up. */
-    if ( H5HL_create(f, H5AC_ind_dxpl_id, (size_t)1024, &addr) < 0) TEST_ERROR;
+    if ( H5HL_create(f, H5AC_ind_read_dxpl_id, (size_t)1024, &addr) < 0) TEST_ERROR;
 
     /* Reset dxpl to use invalid tag. */
-    if ( H5AC_tag(H5AC_ind_dxpl_id, H5AC__INVALID_TAG, NULL) < 0) TEST_ERROR;
+    if ( H5AC_tag(H5AC_ind_read_dxpl_id, H5AC__INVALID_TAG, NULL) < 0) TEST_ERROR;
 
     /* Call H5HL_protect to protect the local heap created above. */
     /* This should fail as no tag is set up during the protect call */
-    if (( lheap = H5HL_protect(f, H5AC_ind_dxpl_id, addr, H5AC__NO_FLAGS_SET)) != NULL ) TEST_ERROR;
+    if (( lheap = H5HL_protect(f, H5AC_ind_read_dxpl_id, addr, H5AC__NO_FLAGS_SET)) != NULL ) TEST_ERROR;
 
     /* Again, set up a valid tag in the DXPL */
-    if ( H5AC_tag(H5AC_ind_dxpl_id, (haddr_t)25, NULL) < 0) TEST_ERROR;
+    if ( H5AC_tag(H5AC_ind_read_dxpl_id, (haddr_t)25, NULL) < 0) TEST_ERROR;
 
     /* Call H5HL_protect again to protect the local heap. This should succeed. */
-    if (( lheap = H5HL_protect(f, H5AC_ind_dxpl_id, addr, H5AC__NO_FLAGS_SET)) == NULL ) TEST_ERROR;
+    if (( lheap = H5HL_protect(f, H5AC_ind_read_dxpl_id, addr, H5AC__NO_FLAGS_SET)) == NULL ) TEST_ERROR;
 
     /* Now unprotect the heap, as we're done with the test. */
     if ( H5HL_unprotect(lheap) < 0 ) TEST_ERROR;
diff --git a/test/dsets.c b/test/dsets.c
index 4b7123d..b2b6c6f 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -66,6 +66,7 @@ const char *FILENAME[] = {
     "earray_hdr_fd",    /* 19 */
     "farray_hdr_fd",    /* 20 */
     "bt2_hdr_fd",    /* 21 */
+    "dls_01_strings.h5",/* 22 */ /* used by dls_01 test only */
     NULL
 };
 #define FILENAME_BUF_SIZE       1024
@@ -10180,48 +10181,48 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
         SKIPPED();
         HDputs("    Test skipped due to VFD not supporting SWMR I/O.");
         return 0;
-    }
+    } /* end if */
 
     /* Check if we are using the latest version of the format */
     if(H5Pget_libver_bounds(fapl, &low, NULL) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     h5_fixname(FILENAME[18], fapl, filename, sizeof filename);
 
     if(low == H5F_LIBVER_LATEST) {
-	/* Create file with write+latest-format */
-	if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) 
-	    FAIL_STACK_ERROR
+        /* Create file with write+latest-format */
+        if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) 
+            FAIL_STACK_ERROR
     } else {
-	/* Create file with SWMR-write+non-latest-format */
-	if((fid = H5Fcreate(filename, H5F_ACC_TRUNC|H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) 
-	    FAIL_STACK_ERROR
-    }
+        /* Create file with SWMR-write+non-latest-format */
+        if((fid = H5Fcreate(filename, H5F_ACC_TRUNC|H5F_ACC_SWMR_WRITE, H5P_DEFAULT, fapl)) < 0) 
+            FAIL_STACK_ERROR
+    } /* end else */
 
     /* Create a chunked dataset: this will use extensible array chunk indexing */
     if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     chunk_dim[0] = 6;
     if(H5Pset_chunk(dcpl, 1, chunk_dim) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     dim[0] = 1;
     max_dim[0] = H5S_UNLIMITED;
     if((sid = H5Screate_simple(1, dim, max_dim)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     if((did = H5Dcreate2(fid, DSET_CHUNKED_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Write to the dataset */
     data = 100;
     if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_EARRAY) 
         FAIL_PUTS_ERROR("created dataset not indexed by extensible array")
 
@@ -10233,50 +10234,50 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
 
     /* Open the file again */
     if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Open the dataset in the file */
     if((did = H5Dopen2(fid, DSET_CHUNKED_NAME, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_EARRAY) 
         FAIL_PUTS_ERROR("created dataset not indexed by extensible array")
 
     /* Read from the dataset and verify data read is correct */
     if(H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(data != 100)
-	FAIL_STACK_ERROR
+        TEST_ERROR
 
     /* Close the dataset */
     if(H5Dclose(did) < 0) FAIL_STACK_ERROR
 
     /* Create a group in the file */
     if((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Create a chunked dataset in the group: this will use v2 B-tree chunk indexing */
     if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     chunk_dims2[0] = chunk_dims2[1] = 10;
     if(H5Pset_chunk(dcpl, 2, chunk_dims2) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     dims2[0] = dims2[1] = 1;
     max_dims2[0] = max_dims2[1] = H5S_UNLIMITED;
     if((sid = H5Screate_simple(2, dims2, max_dims2)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     if((did = H5Dcreate2(gid, DSET_CHUNKED_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_BT2) 
         FAIL_PUTS_ERROR("created dataset not indexed by v2 B-tree")
 
@@ -10288,18 +10289,20 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
     if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
 
     /* Open the file again */
-    if((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) FAIL_STACK_ERROR
+    if((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
+        FAIL_STACK_ERROR
 
     /* Open the group */
-    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
 
     /* Open the dataset in the group */
     if((did = H5Dopen2(gid, DSET_CHUNKED_NAME, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_BT2) 
         FAIL_PUTS_ERROR("created dataset not indexed by v2 B-tree")
 
@@ -10310,15 +10313,16 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
 
 
     /* Reopen the file with SWMR-write */
-    if((fid = H5Fopen(filename, H5F_ACC_RDWR | H5F_ACC_SWMR_WRITE, fapl)) < 0) FAIL_STACK_ERROR
+    if((fid = H5Fopen(filename, H5F_ACC_RDWR | H5F_ACC_SWMR_WRITE, fapl)) < 0)
+        FAIL_STACK_ERROR
 
     /* Open the dataset in the file */
     if((did = H5Dopen2(fid, DSET_CHUNKED_NAME, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_EARRAY) 
         FAIL_PUTS_ERROR("created dataset not indexed by extensible array")
 
@@ -10326,22 +10330,23 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
     if(H5Dclose(did) < 0) FAIL_STACK_ERROR
 
     /* Open the group */
-    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
 
     /* Open the dataset in the group */
     if((did = H5Dopen2(gid, DSET_CHUNKED_NAME, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Verify the dataset's indexing type */
     if(H5D__layout_idx_type_test(did, &idx_type) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(idx_type != H5D_CHUNK_IDX_BT2) 
         FAIL_PUTS_ERROR("created dataset not indexed by v2 B-tree")
 
     /* Write to the dataset in the group */
     data = 99;
     if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Closing */
     if(H5Dclose(did) < 0) FAIL_STACK_ERROR
@@ -10350,19 +10355,21 @@ test_swmr_non_latest(const char *env_h5_driver, hid_t fapl)
 
     /* Open the file again with SWMR read access */
     if((fid = H5Fopen(filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, fapl)) < 0) 
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
-    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
 
     /* Open the dataset */
     if((did = H5Dopen2(gid, DSET_CHUNKED_NAME, H5P_DEFAULT)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Read from the dataset and verify data read is correct */
     data = 0;
     if(H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data) < 0)
-	FAIL_STACK_ERROR
-    if(data != 99) FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
+    if(data != 99)
+        TEST_ERROR
 
     /* Closing */
     if(H5Dclose(did) < 0) FAIL_STACK_ERROR
@@ -11766,6 +11773,278 @@ error:
     return -1;
 } /* end test_gather_error() */
 
+/*-------------------------------------------------------------------------
+ * DLS bug -- HDFFV-9672
+ *
+ * The following functions replicate the test code provided by DLS to 
+ * expose bug hdffv-9672.  All functions associated with this test
+ * have the prefix DLS_01_
+ *
+ * The note documenting the bug is reproduced below:
+ *
+ * ------------------------------------------------------
+ * 
+ * Hi,
+ * We've found an issue regarding fixed length strings.
+ *
+ * If we create a chunked dataset of large fixed length strings 
+ * (up to 1kb per string) with small chunk sizes (~8 elements per 
+ * chunk) then the resulting dataset may not be read later.
+ * This only happens if the file is created with LIBVER_LATEST 
+ * for the version bounds.
+ *
+ * Calling H5Oget_info(...) on the dataset results in the following:
+ * 
+ * H5Dearray.c:250: H5D__earray_crt_context: Assertion 
+ * `udata->chunk_size > 0' failed.
+ * 
+ * Example:
+ * void create_data(...) 
+ * {
+ *    ...
+ * 
+ *    hsize_t chunks[1] = {8} ;
+ *
+ *    err = H5Tset_size( tid, 256 );
+ *
+ *    err = H5Pset_chunk( dcpl, 1, chunks );
+ *
+ *    H5Dcreate2( fid, "data", tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT );
+ * 
+ *    // write data
+ * }                                                                       
+ *                                                                        
+ * void read_data(...)                                                     
+ * {                                                                       
+ *    ...                                                                  
+ *                                                                         
+ *    H5O_into_t info; status = H5Oget_info( did, &info ) // crash
+ *    ...                                                                  
+ * }                                                                       
+ *                                                                         
+ * If the size of the chunk is increased (usually matching the             
+ * string length) then this problem disappears.                            
+ *                                                                         
+ * A full program that produces such a file (and crashes trying to         
+ * read it) is attached.
+ * 
+ * Tested with 1.10.0-alpha1.
+ * 
+ * Regards,
+ * 
+ * Charles Mita
+ * Software Engineer
+ * Diamond Light Source Ltd.
+ * +44 1235 778029
+ *
+ * ------------------------------------------------------
+ * 
+ * The bug in question turned out to be caused by a failure to update
+ * the enc_bytes_per_dim field in the layout if the size of the 
+ * underlying type required more bytes to encode than any of the 
+ * chunk dimensions.
+ *
+ * At least in debug builds, the following test code exposes the 
+ * failure via an assertion failure.
+ *
+ * Note that the test code make no attempt to run with different 
+ * file drivers, as the bug is in the actual on disk encoding of 
+ * the chunk layout.
+ *
+ *                                           JRM -- 2/5/16
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define DLS_01_DATASET		"data"
+#define DLS_01_STR_SIZE 	256
+#define DLS_01_CHUNK_SIZE 	8
+#define DLS_01_DIMS 		4
+
+static herr_t dls_01_setup_file( hid_t fid );
+static herr_t dls_01_write_data( hid_t fid, char* buffer );
+static herr_t dls_01_read_stuff( hid_t fid );
+static herr_t dls_01_main( void );
+
+static herr_t
+dls_01_setup_file( hid_t fid ) {
+
+    int status = 0;
+    hid_t sid = 0, did = 0, tid = 0, dcpl = 0;
+    int ndims = 1;
+    hsize_t max_shape[1] = {H5S_UNLIMITED};
+    hsize_t initial_shape[1] = {0};
+    hsize_t chunks[1] = {DLS_01_CHUNK_SIZE};
+
+    sid = H5Screate_simple( ndims, initial_shape, max_shape );
+    if ( sid <= 0 ) TEST_ERROR
+
+    tid = H5Tcopy( H5T_C_S1 );
+    if ( tid <= 0 ) TEST_ERROR
+
+    status = H5Tset_size( tid, DLS_01_STR_SIZE );
+    if ( status != 0 ) TEST_ERROR
+
+    dcpl = H5Pcreate( H5P_DATASET_CREATE );
+    if ( dcpl <= 0 ) TEST_ERROR
+
+    status = H5Pset_chunk( dcpl, ndims, chunks );
+    if ( status != 0 ) TEST_ERROR
+
+    did = H5Dcreate2( fid, DLS_01_DATASET, tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT );
+    if ( did <= 0 ) TEST_ERROR
+
+    status = H5Dclose( did );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Pclose( dcpl );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Tclose( tid );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Sclose( sid );
+    if ( status != 0 ) TEST_ERROR
+
+    return 0;
+
+error:
+
+    return -1;
+
+} /* dls_01_setup_file */
+
+static herr_t
+dls_01_write_data( hid_t fid, char* buffer ) {
+
+    int status = 0;
+    hid_t did = 0, tid = 0;
+    hsize_t extent[1] = {4};
+
+    did = H5Dopen2( fid, DLS_01_DATASET, H5P_DEFAULT );
+    if ( did <= 0 ) TEST_ERROR
+
+    tid = H5Dget_type( did );
+    if ( tid <= 0 ) TEST_ERROR
+
+    status = H5Dset_extent( did, extent );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Dwrite( did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Fflush( fid, H5F_SCOPE_LOCAL );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Tclose( tid );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Dclose( did );
+    if ( status != 0 ) TEST_ERROR
+
+    return 0;
+
+error:
+
+    return -1;
+
+} /* dls_01_write_data */
+
+static herr_t
+dls_01_read_stuff( hid_t fid ) {
+
+    int status = 0;
+    hid_t did = 0;
+    H5O_info_t info;
+
+    did = H5Dopen2( fid, DLS_01_DATASET, H5P_DEFAULT );
+    if ( did <= 0 ) TEST_ERROR
+
+    status = H5Oget_info( did, &info );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Dclose( did );
+    if ( status != 0 ) TEST_ERROR
+
+    return 0;
+
+error:
+
+    return -1;
+
+} /* dls_01_read_stuff() */
+
+static herr_t
+dls_01_main( void ) {
+
+    char filename[512];
+    int status = 0;
+    hid_t fapl = 0, fid = 0;
+    const char* strings[DLS_01_DIMS] = 
+	{ "String 1", "Test string 2", "Another string", "Final String" };
+    char* buffer = NULL;
+
+    TESTING("Testing DLS bugfix 1");
+
+    if ( NULL == h5_fixname(FILENAME[22], H5P_DEFAULT, filename, 
+                            sizeof(filename)) )
+	TEST_ERROR
+
+    buffer = (char *)HDcalloc( DLS_01_DIMS, DLS_01_STR_SIZE );
+    if ( NULL == buffer ) 
+        TEST_ERROR
+
+    HDstrcpy( buffer, strings[0] );
+    HDstrcpy( buffer + DLS_01_STR_SIZE, strings[1] );
+    HDstrcpy( buffer + DLS_01_STR_SIZE * 2, strings[2] );
+    HDstrcpy( buffer + DLS_01_STR_SIZE * 3, strings[3] );
+
+    fapl = H5Pcreate( H5P_FILE_ACCESS );
+    if ( fapl <= 0 ) TEST_ERROR
+
+    status = H5Pset_libver_bounds( fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST );
+    if ( status != 0 ) TEST_ERROR
+
+    fid = H5Fcreate( filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl );
+    if ( fid <= 0 ) TEST_ERROR
+
+    if ( 0 != dls_01_setup_file( fid ) )
+	goto error;
+
+    if ( 0 != dls_01_write_data( fid, buffer ) )
+	goto error;
+
+    status = H5Fclose( fid );
+    if ( status != 0 ) TEST_ERROR
+
+    fid = H5Fopen( filename, H5F_ACC_RDONLY, fapl );
+    if ( fid <= 0 ) TEST_ERROR
+
+    if ( 0 != dls_01_read_stuff( fid ) )
+	goto error;
+
+    status = H5Fclose( fid );
+    if ( status != 0 ) TEST_ERROR
+
+    status = H5Pclose( fapl );
+    if ( status != 0 ) TEST_ERROR
+
+    HDfree(buffer);
+
+    PASSED();
+
+    return 0;
+
+error:
+
+    if ( buffer ) HDfree(buffer);
+
+    return -1;
+
+} /* dls_01_main() */
+
+
+
 

 /*-------------------------------------------------------------------------
  * Function:	main
@@ -11920,6 +12199,9 @@ main(void)
     nerrors += (test_scatter_error() < 0                    ? 1 : 0);
     nerrors += (test_gather_error() < 0                     ? 1 : 0);
 
+    /* Run misc tests */
+    nerrors += dls_01_main();
+
     /* Verify symbol table messages are cached */
     nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0);
 
diff --git a/test/dtypes.c b/test/dtypes.c
index 326294f..984b6c6 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -1789,6 +1789,13 @@ test_compound_9(void)
         goto error;
     } /* end if */
 
+    if(H5Dvlen_reclaim(dup_tid, space_id, H5P_DEFAULT, &rdata) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    rdata.str = NULL;
+
     if(H5Dclose(dset_id) < 0)
         goto error;
     if(H5Tclose(cmpd_tid) < 0)
@@ -1815,6 +1822,12 @@ test_compound_9(void)
         goto error;
     } /* end if */
 
+    if((space_id = H5Dget_space(dset_id)) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't get space\n");
+        goto error;
+    } /* end if */
+
     if((cmpd_tid = H5Dget_type(dset_id)) < 0) {
          H5_FAILED(); AT();
         printf("cannot open dataset\n");
@@ -1842,10 +1855,19 @@ test_compound_9(void)
         goto error;
     } /* end if */
 
+    if(H5Dvlen_reclaim(dup_tid, space_id, H5P_DEFAULT, &rdata) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't read data\n");
+        goto error;
+    } /* end if */
+    rdata.str = NULL;
+
     if(rdata.str) HDfree(rdata.str);
 
     if(H5Dclose(dset_id) < 0)
         goto error;
+    if(H5Sclose(space_id) < 0)
+        goto error;
     if(H5Tclose(cmpd_tid) < 0)
         goto error;
     if(H5Tclose(dup_tid) < 0)
@@ -2020,12 +2042,17 @@ test_compound_10(void)
             printf("incorrect VL read data\n");
             goto error;
         }
-
-        HDfree(t1);
-        HDfree(t2);
-        HDfree(wdata[i].str);
-        HDfree(rdata[i].str);
     } /* end for */
+    if(H5Dvlen_reclaim(arr_tid, space_id, H5P_DEFAULT, &rdata) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    if(H5Dvlen_reclaim(arr_tid, space_id, H5P_DEFAULT, &wdata) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
 
     if(H5Dclose(dset_id) < 0)
         goto error;
@@ -2090,6 +2117,8 @@ test_compound_11(void)
     hid_t big_tid, little_tid;  /* Datatype IDs for type conversion */
     hid_t big_tid2, little_tid2;  /* Datatype IDs for type conversion */
     hid_t opaq_src_tid, opaq_dst_tid;  /* Datatype IDs for type conversion */
+    hid_t space_id;             /* Dataspace for buffer elements */
+    hsize_t dim[1];             /* Dimensions for dataspace */
     void *buf = NULL;          /* Conversion buffer */
     void *buf_orig = NULL;      /* Copy of original conversion buffer */
     void *bkg = NULL;           /* Background buffer */
@@ -2138,6 +2167,13 @@ test_compound_11(void)
     /* Make copy of buffer before conversion */
     HDmemcpy(buf_orig,buf,sizeof(big_t)*NTESTELEM);
 
+    dim[0] = NTESTELEM;
+    if((space_id = H5Screate_simple(1, dim, NULL)) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't create space\n");
+        goto error;
+    } /* end if */
+
     /* Make copies of the 'big' and 'little' datatypes, so the type
      * conversion routine doesn't use the same ones this time and next time
      */
@@ -2169,8 +2205,12 @@ test_compound_11(void)
                     (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
             TEST_ERROR
         } /* end if */
-        HDfree(((little_t *)buf)[u].s1);
     } /* end for */
+    if(H5Dvlen_reclaim(little_tid2, space_id, H5P_DEFAULT, buf) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim data\n");
+        goto error;
+    } /* end if */
 
     /* Build source and destination types for conversion routine */
     if((opaq_src_tid=H5Tcreate(H5T_OPAQUE, (size_t)4)) < 0) TEST_ERROR
@@ -2209,8 +2249,12 @@ test_compound_11(void)
                     (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
             TEST_ERROR
         } /* end if */
-        HDfree(((little_t *)buf)[u].s1);
     } /* end for */
+    if(H5Dvlen_reclaim(little_tid, space_id, H5P_DEFAULT, buf) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim data\n");
+        goto error;
+    } /* end if */
 
     /* Unregister the conversion routine */
     if(H5Tunregister(H5T_PERS_HARD, "opaq_test", opaq_src_tid, opaq_dst_tid, convert_opaque) < 0) TEST_ERROR
@@ -2243,12 +2287,17 @@ test_compound_11(void)
                     (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
             TEST_ERROR
         } /* end if */
-        HDfree(((little_t *)buf)[u].s1);
     } /* end for */
+    if(H5Dvlen_reclaim(little_tid, space_id, H5P_DEFAULT, buf) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim data\n");
+        goto error;
+    } /* end if */
 
     /* Free everything */
     for(u=0; u<NTESTELEM; u++)
         HDfree(((big_t *)buf_orig)[u].s1);
+    if(H5Sclose(space_id) < 0) TEST_ERROR
     if(H5Tclose(opaq_dst_tid) < 0) TEST_ERROR
     if(H5Tclose(opaq_src_tid) < 0) TEST_ERROR
     if(H5Tclose(little_tid2) < 0) TEST_ERROR
@@ -2727,6 +2776,18 @@ test_compound_14(void)
         goto error;
     } /* end if */
 
+    if(H5Dvlen_reclaim(cmpd_m1_tid, space_id, H5P_DEFAULT, &rdata1) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    rdata1.str = NULL;
+    if(H5Dvlen_reclaim(cmpd_m2_tid, space_id, H5P_DEFAULT, &rdata2) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    rdata2.str = NULL;
     if(H5Dclose(dset1_id) < 0)
         goto error;
     if(H5Dclose(dset2_id) < 0)
@@ -2761,6 +2822,12 @@ test_compound_14(void)
         goto error;
     } /* end if */
 
+    if((space_id = H5Dget_space(dset2_id)) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't get space\n");
+        goto error;
+    } /* end if */
+
     rdata1.c1 = rdata1.c2 = 0;
     if(rdata1.str) HDfree(rdata1.str);
 
@@ -2796,13 +2863,25 @@ test_compound_14(void)
         goto error;
     } /* end if */
 
-    if(rdata1.str) HDfree(rdata1.str);
-    if(rdata2.str) HDfree(rdata2.str);
+    if(H5Dvlen_reclaim(cmpd_m1_tid, space_id, H5P_DEFAULT, &rdata1) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    rdata1.str = NULL;
+    if(H5Dvlen_reclaim(cmpd_m2_tid, space_id, H5P_DEFAULT, &rdata2) < 0) {
+        H5_FAILED(); AT();
+        printf("Can't reclaim read data\n");
+        goto error;
+    } /* end if */
+    rdata2.str = NULL;
 
     if(H5Dclose(dset1_id) < 0)
         goto error;
     if(H5Dclose(dset2_id) < 0)
         goto error;
+    if(H5Sclose(space_id) < 0)
+        goto error;
     if(H5Tclose(cmpd_m1_tid) < 0)
         goto error;
     if(H5Tclose(cmpd_m2_tid) < 0)
diff --git a/test/earray.c b/test/earray.c
index 1753104..39b58bf 100644
--- a/test/earray.c
+++ b/test/earray.c
@@ -597,7 +597,7 @@ finish(hid_t file, hid_t fapl, H5F_t *f, H5EA_t *ea, haddr_t ea_addr)
     h5_stat_size_t file_size;           /* File size, after deleting array */
 
     /* Close the extensible array */
-    if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
 #ifdef QAK
@@ -607,7 +607,7 @@ HDsystem("cp earray.h5 earray.h5.save");
 #endif /* QAK */
 
     /* Delete array */
-    if(H5EA_delete(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL) < 0)
+    if(H5EA_delete(f, H5AC_ind_read_dxpl_id, ea_addr, NULL) < 0)
         FAIL_STACK_ERROR
 
     /* Close the file */
@@ -910,11 +910,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.raw_elmt_size = 0;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -925,11 +925,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.max_nelmts_bits = 0;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -939,11 +939,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.max_nelmts_bits = 65;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -954,11 +954,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.sup_blk_min_data_ptrs = 0;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -967,11 +967,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.sup_blk_min_data_ptrs = 1;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -980,11 +980,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.sup_blk_min_data_ptrs = 6;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -995,11 +995,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.data_blk_min_elmts = 0;
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -1011,11 +1011,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
         HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
         test_cparam.max_dblk_page_nelmts_bits = (uint8_t)(H5VM_log2_gen((uint64_t)test_cparam.idx_blk_elmts) - 1);
         H5E_BEGIN_TRY {
-            ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+            ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
         } H5E_END_TRY;
         if(ea) {
             /* Close opened extensible array */
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
             ea = NULL;
 
             /* Indicate error */
@@ -1025,11 +1025,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.max_dblk_page_nelmts_bits = 4;  /* corresponds to 16 elements in data block page, which is less than the 64 elements for the default settings */
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -1038,11 +1038,11 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.max_dblk_page_nelmts_bits = (uint8_t)(test_cparam.max_nelmts_bits + 1);
     H5E_BEGIN_TRY {
-        ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        ea = H5EA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened extensible array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
         ea = NULL;
 
         /* Indicate error */
@@ -1062,7 +1062,7 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
     TESTING("extensible array creation");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     PASSED()
@@ -1086,7 +1086,7 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSE
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -1125,19 +1125,19 @@ test_reopen(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
     TESTING("create, close & reopen extensible array");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Close the extensible array */
-    if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, NULL, HADDR_UNDEF, tparam) < 0)
         TEST_ERROR
 
     /* Re-open the array */
-    if(NULL == (ea = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1156,7 +1156,7 @@ test_reopen(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -1198,11 +1198,11 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
     TESTING("open extensible array twice");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Open the array again, through the first file handle */
-    if(NULL == (ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea2 = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1212,12 +1212,12 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the second extensible array wrapper */
-    if(H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea2 = NULL;
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &ea, ea_addr, tparam) < 0)
         TEST_ERROR
 
     /* Re-open the file */
@@ -1229,7 +1229,7 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Open the extensible array through the second file handle */
-    if(NULL == (ea2 = H5EA_open(f2, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea2 = H5EA_open(f2, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1237,7 +1237,7 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the first extensible array wrapper */
-    if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea = NULL;
 
@@ -1260,9 +1260,9 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
         if(ea2)
-            H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
 	H5Fclose(file2);
     } H5E_END_TRY;
@@ -1310,11 +1310,11 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
     TESTING("open extensible array twice, through different file handles");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Open the array again, through the first file handle */
-    if(NULL == (ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea2 = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1324,7 +1324,7 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
         TEST_ERROR
 
     /* Close the second extensible array wrapper */
-    if(H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea2 = NULL;
 
@@ -1336,7 +1336,7 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
         FAIL_STACK_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &ea, ea_addr, tparam) < 0)
         TEST_ERROR
 
     /* Verify the creation parameters */
@@ -1344,7 +1344,7 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
         TEST_ERROR
 
     /* Close the first extensible array wrapper */
-    if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea = NULL;
 
@@ -1375,7 +1375,7 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
         FAIL_STACK_ERROR
 
     /* Open the extensible array through the second file handle */
-    if(NULL == (ea2 = H5EA_open(f2, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea2 = H5EA_open(f2, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1400,9 +1400,9 @@ test_open_twice_diff(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tpa
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
         if(ea2)
-            H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
 	H5Fclose(file2);
 	H5Fclose(file0);
@@ -1446,15 +1446,15 @@ test_delete_open(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
     TESTING("deleting open extensible array");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Open the array again */
-    if(NULL == (ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL)))
+    if(NULL == (ea2 = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Request that the array be deleted */
-    if(H5EA_delete(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL) < 0)
+    if(H5EA_delete(f, H5AC_ind_read_dxpl_id, ea_addr, NULL) < 0)
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -1464,38 +1464,38 @@ test_delete_open(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the second extensible array wrapper */
-    if(H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea2 = NULL;
 
     /* Try re-opening the array again (should fail, as array will be deleted) */
     H5E_BEGIN_TRY {
-        ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL);
+        ea2 = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL);
     } H5E_END_TRY;
     if(ea2) {
         /* Close opened array */
-        H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea2, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
     } /* end if */
 
     /* Close the first extensible array wrapper */
-    if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5EA_close(ea, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     ea = NULL;
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, NULL, HADDR_UNDEF, tparam) < 0)
         TEST_ERROR
 
     /* Try re-opening the array again (should fail, as array is now deleted) */
     H5E_BEGIN_TRY {
-        ea = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL);
+        ea = H5EA_open(f, H5AC_ind_read_dxpl_id, ea_addr, NULL);
     } H5E_END_TRY;
     if(ea) {
         /* Close opened array */
-        H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+        H5EA_close(ea, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
@@ -1521,9 +1521,9 @@ test_delete_open(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
         if(ea2)
-            H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -2394,7 +2394,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
         TEST_ERROR
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Verify the creation parameters */
@@ -2402,7 +2402,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
         TEST_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &ea, ea_addr, tparam) < 0)
         TEST_ERROR
 
     /* Verify high-water # of elements written */
@@ -2433,7 +2433,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
         /* Retrieve element of array (not set yet) */
         relmt = (uint64_t)0;
-        if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5EA_get(ea, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify element is fill value for array */
@@ -2461,7 +2461,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
         /* Retrieve element of array (not set yet) */
         relmt = (uint64_t)0;
-        if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5EA_get(ea, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify element is fill value for array */
@@ -2470,7 +2470,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
         /* Set element of array */
         welmt = (uint64_t)7 + idx;
-        if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
+        if(H5EA_set(ea, H5AC_ind_read_dxpl_id, idx, &welmt) < 0)
             FAIL_STACK_ERROR
 
         /* Get the max. array index */
@@ -2498,7 +2498,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
         /* Retrieve element of array (set now) */
         relmt = (uint64_t)0;
-        if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5EA_get(ea, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify element is value written */
@@ -2522,7 +2522,7 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -2568,7 +2568,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
         TEST_ERROR
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &ea, &ea_addr, NULL) < 0)
         TEST_ERROR
 
     /* Verify the creation parameters */
@@ -2576,7 +2576,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
         TEST_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &ea, ea_addr, tparam) < 0)
         TEST_ERROR
 
     /* Verify high-water # of elements written */
@@ -2597,7 +2597,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
     /* Retrieve element of array (not set yet) */
     relmt = (uint64_t)0;
-    if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+    if(H5EA_get(ea, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify element is fill value for array */
@@ -2606,7 +2606,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
     /* Set element of array */
     welmt = (uint64_t)7 + idx;
-    if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
+    if(H5EA_set(ea, H5AC_ind_read_dxpl_id, idx, &welmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify high-water # of elements written */
@@ -2648,7 +2648,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 
     /* Retrieve element of array (set now) */
     relmt = (uint64_t)0;
-    if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+    if(H5EA_get(ea, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify element is value written */
@@ -2659,7 +2659,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
     for(cnt = 0; cnt < skip_elmts; cnt++) {
         /* Retrieve element of array (not set yet) */
         relmt = (uint64_t)0;
-        if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, cnt, &relmt) < 0)
+        if(H5EA_get(ea, H5AC_ind_read_dxpl_id, cnt, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify element is fill value for array */
@@ -2679,7 +2679,7 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
 error:
     H5E_BEGIN_TRY {
         if(ea)
-            H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
+            H5EA_close(ea, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
diff --git a/test/efc.c b/test/efc.c
index a8d77e0..6a7c8d8 100644
--- a/test/efc.c
+++ b/test/efc.c
@@ -3171,7 +3171,7 @@ main(void)
     /* Create property lists */
     fcpl_id = H5Pcreate(H5P_FILE_CREATE);
     fapl_id = h5_fileaccess();
-    dxpl_id = H5Pcreate(H5P_DATASET_XFER);
+    dxpl_id = H5AC_ind_read_dxpl_id;
 
     /* Patch filenames */
     h5_fixname(FILENAME[0], fapl_id, filename[0], sizeof(filename[0]));
@@ -3187,8 +3187,6 @@ main(void)
     nerrors += test_graph_cycle();
 
     /* Close property lists */
-    if(H5Pclose(dxpl_id) < 0)
-        TEST_ERROR
     if(H5Pclose(fcpl_id) < 0)
         TEST_ERROR
 
diff --git a/test/external.c b/test/external.c
index cbc9fc6..1865e71 100644
--- a/test/external.c
+++ b/test/external.c
@@ -20,974 +20,1616 @@
  * Purpose:	Tests datasets stored in external raw files.
  */
 #include "h5test.h"
-#include "H5srcdir.h"
-
-/* File for external link test.  Created with gen_udlinks.c */
-#define LINKED_FILE  "be_extlink2.h5"
 
 const char *FILENAME[] = {
     "extern_1",
     "extern_2",
     "extern_3",
     "extern_4",
+    "extern_dir/file_1",
+    "extern_5",
     NULL
 };
 
+/* A similar collection of files is used for the tests that
+ * perform file I/O.
+ */
+#define N_EXT_FILES         4
+#define PART_SIZE           25
+#define TOTAL_SIZE          100
+#define GARBAGE_PER_FILE    10
+
 

 /*-------------------------------------------------------------------------
- * Function:	same_contents
+ * Function:    files_have_same_contents
  *
- * Purpose:	Determines whether two files are exactly the same.
+ * Purpose:     Determines whether two files contain the same data.
  *
- * Return:	Success:	nonzero if same, zero if different.
+ * Return:      Success:    nonzero if same, zero if different.
+ *		        Failure:    zero
  *
- *		Failure:	zero
- *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, March  4, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
-static int
-same_contents (const char *name1, const char *name2)
+static hbool_t
+files_have_same_contents(const char *name1, const char *name2)
 {
-    int		fd1, fd2;
+    int		fd1 = 0, fd2 = 0;
     ssize_t	n1, n2;
     char	buf1[1024], buf2[1024];
+    hbool_t ret = false;            /* not equal until proven otherwise */
 
-    fd1 = HDopen(name1, O_RDONLY, 0666);
-    fd2 = HDopen(name2, O_RDONLY, 0666);
-    assert(fd1 >= 0 && fd2 >= 0);
+    if((fd1 = HDopen(name1, O_RDONLY, 0666)) < 0)
+        goto out;
+    if((fd2 = HDopen(name2, O_RDONLY, 0666)) < 0)
+        goto out;
 
+    /* Loop until files are empty or we encounter a problem */
     while(1) {
-        /* Asserts will catch negative return values */
+        HDmemset(buf1, 0, sizeof(buf1));
+        HDmemset(buf2, 0, sizeof(buf2));
+
         n1 = HDread(fd1, buf1, sizeof(buf1));
+        if(n1 < 0 || (size_t)n1 > sizeof(buf1))
+            break;
         n2 = HDread(fd2, buf2, sizeof(buf2));
-        assert(n1 >= 0 && (size_t)n1 <= sizeof(buf1));
-        assert(n2 >= 0 && (size_t)n2 <= sizeof(buf2));
-        assert(n1 == n2);
+        if(n2 < 0 || (size_t)n2 > sizeof(buf2))
+            break;
+
+        if(n1 != n2)
+            break;
 
-        if(n1 == 0 && n2 == 0)
+        if(n1 == 0 && n2 == 0) {
+            ret = true;
             break;
-        if(HDmemcmp(buf1, buf2, (size_t)n1)) {
-            HDclose(fd1);
-            HDclose(fd2);
-            return 0;
         }
-    }
-    HDclose(fd1);
-    HDclose(fd2);
-    return 1;
-}
+
+        if(HDmemcmp(buf1, buf2, (size_t)n1))
+            break;
+
+    } /* end while */
+
+out:
+    if(fd1)
+        HDclose(fd1);
+    if(fd2)
+        HDclose(fd2);
+    return ret;
+} /* end files_have_same_contents() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1a
+ * Function:    reset_raw_data_files
  *
- * Purpose:	Tests a non-extendible dataset with a single external file.
+ * Purpose:     Resets the data in the raw data files for tests that
+ *              perform dataset I/O on a set of files.
  *
- * Return:	Success:	0
+ * Return:      SUCCEED/FAIL
  *
- *		Failure:	number of errors
+ * Programmer:  Dana Robinson
+ *              February 2016
  *
- * Programmer:	Robb Matzke
- *              Monday, November 23, 1998
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+reset_raw_data_files(void)
+{
+    int		    fd = 0;             /* external file descriptor             */
+    size_t	    i, j;               /* iterators                            */
+    hssize_t	n;                  /* bytes of I/O                         */
+    char	    filename[1024];     /* file name                            */
+    int		    data[PART_SIZE];    /* raw data buffer                      */
+    uint8_t     *garbage = NULL;    /* buffer of garbage data               */
+    size_t      garbage_count;      /* size of garbage buffer               */
+    size_t      garbage_bytes;      /* # of garbage bytes written to file   */
+
+    /* Set up garbage buffer */
+    garbage_count = N_EXT_FILES * GARBAGE_PER_FILE;
+    if(NULL == (garbage = (uint8_t *)HDcalloc(garbage_count, sizeof(uint8_t))))
+        goto error;
+    for(i = 0; i < garbage_count; i++)
+        garbage[i] = 0xFF;
+
+    /* The *r files are pre-filled with data and are used to
+     * verify that read operations work correctly.
+     */
+    for(i = 0; i < N_EXT_FILES; i++) {
+
+        /* Open file */
+        HDsprintf(filename, "extern_%lur.raw", (unsigned long)i + 1);
+        if((fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
+            goto error;
+        
+        /* Write garbage data to the file. This allows us to test the
+         * the ability to set an offset in the raw data file.
+         */
+        garbage_bytes = i * 10;
+        n = HDwrite(fd, garbage, garbage_bytes);
+        if(n < 0 || (size_t)n != garbage_bytes)
+            goto error;
+
+        /* Fill array with data */
+        for(j = 0; j < PART_SIZE; j++) {
+            data[j] = (int)(i * 25 + j);
+        } /* end for */
+
+        /* Write raw data to the file. */
+        n = HDwrite(fd, data, sizeof(data));
+        if(n != sizeof(data))
+            goto error;
+
+        /* Close this file */
+        HDclose(fd);
+
+    } /* end for */
+
+    /* The *w files are only pre-filled with the garbage data and are
+     * used to verify that write operations work correctly. The individual
+     * tests fill in the actual data.
+     */
+    for(i = 0; i < N_EXT_FILES; i++) {
+
+        /* Open file */
+        HDsprintf(filename, "extern_%luw.raw", (unsigned long)i + 1);
+        if((fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
+            goto error;
+        
+        /* Write garbage data to the file. This allows us to test the
+         * the ability to set an offset in the raw data file.
+         */
+        garbage_bytes = i * 10;
+        n = HDwrite(fd, garbage, garbage_bytes);
+        if(n < 0 || (size_t)n != garbage_bytes)
+            goto error;
+
+        /* Close this file */
+        HDclose(fd);
+
+    } /* end for */
+    HDfree(garbage);
+    return SUCCEED;
+
+error:
+    if(fd)
+        HDclose(fd);
+    if(garbage)
+        HDfree(garbage);
+    return FAIL;
+} /* end reset_raw_data_files() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    test_non_extendible
+ *
+ * Purpose:     Tests a non-extendible dataset with a single external file.
  *
- * Modifications:
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Robb Matzke
+ *              Monday, November 23, 1998
  *
  *-------------------------------------------------------------------------
  */
 static int
-test_1a(hid_t file)
+test_non_extendible(hid_t file)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*data space current size	*/
-    hsize_t	max_size[1];		/*data space maximum size	*/
-    int		n;			/*number of external files	*/
-    char	name[256];		/*external file name		*/
-    off_t	file_offset;		/*external file offset		*/
-    hsize_t	file_size;		/*sizeof external file segment	*/
-    haddr_t     dset_addr;              /*address of dataset            */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* data space current size              */
+    hsize_t	max_size[1];        /* data space maximum size              */
+    int		n;                  /* number of external files             */
+    char	name[256];          /* external file name                   */
+    off_t	file_offset;        /* external file offset                 */
+    hsize_t	file_size;          /* sizeof external file segment         */
+    haddr_t dset_addr;          /* address of dataset                   */
 
     TESTING("fixed-size data space, exact storage");
 
     /* Create the dataset */
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
     cur_size[0] = max_size[0] = 100;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0,
-	(hsize_t)(max_size[0] * sizeof(int))) < 0) goto error;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int))) < 0)
+        FAIL_STACK_ERROR
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
     if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-    if(H5Dclose(dset) < 0) goto error;
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+        FAIL_STACK_ERROR
+    if(H5Dclose(dset) < 0)
+        FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0)
+        FAIL_STACK_ERROR
 
     /* Read dataset creation information */
-    if((dset = H5Dopen2(file, "dset1", H5P_DEFAULT)) < 0) goto error;
+    if((dset = H5Dopen2(file, "dset1", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
 
     /* Test dataset address.  Should be undefined. */
     H5E_BEGIN_TRY {
         dset_addr = H5Dget_offset(dset);
     } H5E_END_TRY;
-    if(dset_addr != HADDR_UNDEF) goto error;
-
-    if((dcpl = H5Dget_create_plist(dset)) < 0) goto error;
-    if((n = H5Pget_external_count(dcpl)) < 0) goto error;
+    if(dset_addr != HADDR_UNDEF)
+        FAIL_STACK_ERROR
+
+    /* Check external count */
+    if((dcpl = H5Dget_create_plist(dset)) < 0)
+        FAIL_STACK_ERROR
+    if((n = H5Pget_external_count(dcpl)) < 0)
+        FAIL_STACK_ERROR
     if(1 != n) {
-	H5_FAILED();
-	puts("    Returned external count is wrong.");
-	printf("   got: %d\n    ans: 1\n", n);
-	goto error;
-    }
+        H5_FAILED();
+        HDputs("    Returned external count is wrong.");
+        printf("   got: %d\n    ans: 1\n", n);
+        goto error;
+    } /* end if */
+
     HDstrcpy(name + sizeof(name) - 4, "...");
-    if(H5Pget_external(dcpl, 0, sizeof(name) - 4, name, &file_offset,
-			 &file_size) < 0) goto error;
+    if(H5Pget_external(dcpl, 0, sizeof(name) - 4, name, &file_offset, &file_size) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check file offset */
     if(file_offset != 0) {
-	H5_FAILED();
-	puts("    Wrong file offset.");
-	printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
-	goto error;
-    }
+        H5_FAILED();
+        HDputs("    Wrong file offset.");
+        printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
+        goto error;
+    } /* end if */
+
+    /* Check file size */
     if(file_size != (max_size[0] * sizeof(int))) {
-	H5_FAILED();
-	puts("    Wrong file size.");
-	printf("    got: %lu\n    ans: %lu\n", (unsigned long)file_size,
-		(unsigned long)max_size[0]*sizeof(int));
-	goto error;
-    }
-    if (H5Pclose (dcpl) < 0) goto error;
-    if (H5Dclose (dset) < 0) goto error;
+        H5_FAILED();
+        HDputs("    Wrong file size.");
+        printf("    got: %lu\n    ans: %lu\n", (unsigned long)file_size, (unsigned long)max_size[0]*sizeof(int));
+        goto error;
+    } /* end if */
+
+    /* Done (dataspace was previously closed) */
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
     PASSED();
     return 0;
+
  error:
     H5E_BEGIN_TRY {
-	H5Pclose(dcpl);
-	H5Sclose(space);
-	H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
+        H5Dclose(dset);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_non_extendible() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1b
- *
- * Purpose:	Test a single external file which is too small to represent
- *		all the data.
+ * Function:    test_too_small
  *
- * Return:	Success:	0
+ * Purpose:     Test a single external file which is too small to represent
+ *              all the data.
  *
- *		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
  * Programmer:	Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1b(hid_t file)
+test_too_small(hid_t file)
 {
-    hid_t	dcpl = -1;		/*dataset creation properties	*/
-    hid_t	space = -1;		/*data space			*/
-    hid_t	dset = -1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*current data space size	*/
-    hsize_t	max_size[1];		/*maximum data space size	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* current data space size              */
+    hsize_t	max_size[1];        /* maximum data space size              */
 
     TESTING("external storage is too small");
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
     cur_size[0] = max_size[0] = 100;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0,
-	(hsize_t)(max_size[0] * sizeof(int) - 1)) < 0) goto error;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int) - 1)) < 0)
+        FAIL_STACK_ERROR
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
+
     H5E_BEGIN_TRY {
-	dset = H5Dcreate2(file, "dset2", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
+        dset = H5Dcreate2(file, "dset2", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
     } H5E_END_TRY;
-    if(dset >= 0) {
-	H5_FAILED();
-	puts("    Small external file succeeded instead of failing.");
-	goto error;
-    }
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+    if(dset >= 0)
+        FAIL_PUTS_ERROR("    Small external file succeeded instead of failing.");
+    if(H5Sclose(space) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0)
+        FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Sclose(space);
-	H5Pclose(dcpl);
-	H5Dclose(dset);
+        H5Sclose(space);
+        H5Pclose(dcpl);
+        H5Dclose(dset);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_too_small() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1c
- *
- * Purpose:	Test a single external file which is large enough to
- *		represent the current data and large enough to represent the
- *		eventual size of the data.
+ * Function:    test_large_enough_current_eventual
  *
- * Return:	Success:	0
+ * Purpose:     Test a single external file which is large enough to
+ *              represent the current data and large enough to represent the
+ *              eventual size of the data.
  *
- *		Failure:	number of errors
+ * Return:  Success:    0
+ *          Failure:    1
  *
  * Programmer:	Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1c(hid_t file)
+test_large_enough_current_eventual(hid_t file)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*current data space size       */
-    hsize_t	max_size[1];		/*maximum data space size	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* current data space size              */
+    hsize_t	max_size[1];        /* maximum data space size              */
 
     TESTING("extendible dataspace, exact external size");
 
-    if((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0) goto error;
+    if((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
     cur_size[0] = 100;
     max_size[0] = 200;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0,
-	(hsize_t)(max_size[0] * sizeof(int))) < 0) goto error;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int))) < 0)
+        FAIL_STACK_ERROR
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
     if((dset = H5Dcreate2(file, "dset3", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-    if(H5Dclose(dset) < 0) goto error;
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+        FAIL_STACK_ERROR
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
 error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_large_enough_current_eventual() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1d
- *
- * Purpose:	Test a single external file which is large enough for the
- *		current data size but not large enough for the eventual size.
+ * Function:    test_large_enough_current_not_eventual
  *
- * Return:	Success:	0
+ * Purpose:     Test a single external file which is large enough for the
+ *              current data size but not large enough for the eventual size.
  *
- *		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1d(hid_t file)
+test_large_enough_current_not_eventual(hid_t file)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*current data space size       */
-    hsize_t	max_size[1];		/*maximum data space size	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* current data space size              */
+    hsize_t	max_size[1];        /* maximum data space size              */
 
     TESTING("extendible dataspace, external storage is too small");
 
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
     cur_size[0] = 100;
     max_size[0] = 200;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0,
-	(hsize_t)(max_size[0] * sizeof(int) - 1)) < 0) goto error;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0] * sizeof(int) - 1)) < 0)
+        FAIL_STACK_ERROR
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
+
     H5E_BEGIN_TRY {
-	dset = H5Dcreate2(file, "dset4", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
+        dset = H5Dcreate2(file, "dset4", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
     } H5E_END_TRY;
-    if(dset >= 0) {
-	H5_FAILED();
-	puts("    Small external file succeeded instead of failing.");
-	goto error;
-    }
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+    if(dset >= 0)
+        FAIL_PUTS_ERROR("    Small external file succeeded instead of failing.");
+
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_large_enough_current_not_eventual() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1e
+ * Function:    test_unlimited
  *
- * Purpose:	Test a single external file of unlimited size and an
- *		unlimited data space.
+ * Purpose:     Test a single external file of unlimited size and an
+ *              unlimited data space.
  *
- * Return:	Success:	0
+ * Return:      Success:    0
+ *              Failure:    1
  *
- *		Failure:	number of errors
- *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1e(hid_t file)
+test_unlimited(hid_t file)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*data space current size	*/
-    hsize_t	max_size[1];		/*data space maximum size	*/
-    int		n;			/*number of external files	*/
-    char	name[256];		/*external file name		*/
-    off_t	file_offset;		/*external file offset		*/
-    hsize_t	file_size;		/*sizeof external file segment	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* data space current size              */
+    hsize_t	max_size[1];        /* data space maximum size              */
+    int		n;                  /* number of external files             */
+    char	name[256];          /* external file name                   */
+    off_t	file_offset;        /* external file offset                 */
+    hsize_t	file_size;          /* sizeof external file segment         */
 
     TESTING("unlimited dataspace, unlimited external storage");
 
     /* Create dataset */
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED) < 0) goto error;
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED) < 0)
+        FAIL_STACK_ERROR
     cur_size[0] = 100;
     max_size[0] = H5S_UNLIMITED;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
     if((dset = H5Dcreate2(file, "dset5", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-    if(H5Dclose(dset) < 0) goto error;
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+        FAIL_STACK_ERROR
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
 
     /* Read dataset creation information */
-    if((dset = H5Dopen2(file, "dset5", H5P_DEFAULT)) < 0) goto error;
-    if((dcpl = H5Dget_create_plist(dset)) < 0) goto error;
-    if((n = H5Pget_external_count(dcpl)) < 0) goto error;
+    if((dset = H5Dopen2(file, "dset5", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+    if((dcpl = H5Dget_create_plist(dset)) < 0)
+        FAIL_STACK_ERROR
+    if((n = H5Pget_external_count(dcpl)) < 0)
+        FAIL_STACK_ERROR
     if(1 != n) {
-	H5_FAILED();
-	puts("    Returned external count is wrong.");
-	printf("    got: %d\n    ans: 1\n", n);
-	goto error;
-    }
+        H5_FAILED();
+        HDputs("    Returned external count is wrong.");
+        printf("    got: %d\n    ans: 1\n", n);
+        goto error;
+    } /* end if */
+
     HDstrcpy(name + sizeof(name) - 4, "...");
-    if(H5Pget_external(dcpl, 0, sizeof(name) - 4, name, &file_offset,
-			 &file_size) < 0) goto error;
+    if(H5Pget_external(dcpl, 0, sizeof(name) - 4, name, &file_offset, &file_size) < 0)
+        FAIL_STACK_ERROR
     if(file_offset != 0) {
-	H5_FAILED();
-	puts("    Wrong file offset.");
-	printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
-	goto error;
-    }
+        H5_FAILED();
+        HDputs("    Wrong file offset.");
+        printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
+        goto error;
+    } /* end if */
+
     if(H5F_UNLIMITED != file_size) {
-	H5_FAILED();
-	puts("    Wrong file size.");
-	printf("    got: %lu\n    ans: INF\n", (unsigned long)file_size);
-	goto error;
-    }
-    if(H5Pclose(dcpl) < 0) goto error;
-    if(H5Dclose(dset) < 0) goto error;
+        H5_FAILED();
+        HDputs("    Wrong file size.");
+        printf("    got: %lu\n    ans: INF\n", (unsigned long)file_size);
+        goto error;
+    } /* end if */
+
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_unlimited() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1f
+ * Function:    test_multiple_files
  *
- * Purpose:	Test multiple external files for a dataset.
+ * Purpose:     Test multiple external files for a dataset.
  *
- * Return:	Success:	0
+ * Return:      Success:    0
+ *              Failure:    1
  *
- *		Failure:	number of errors
- *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1f(hid_t file)
+test_multiple_files(hid_t file)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hsize_t	cur_size[1];		/*data space current size	*/
-    hsize_t	max_size[1];		/*data space maximum size	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* dataspace                            */
+    hid_t	dset = -1;          /* dataset                              */
+    hsize_t	cur_size[1];        /* data space current size              */
+    hsize_t	max_size[1];        /* data space maximum size              */
 
     TESTING("multiple external files");
 
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+
     cur_size[0] = max_size[0] = 100;
-    if(H5Pset_external(dcpl, "ext1.data", (off_t)0,
-	(hsize_t)(max_size[0]*sizeof(int)/4)) < 0) goto error;
-    if(H5Pset_external(dcpl, "ext2.data", (off_t)0,
-	(hsize_t)(max_size[0]*sizeof(int)/4)) < 0) goto error;
-    if(H5Pset_external(dcpl, "ext3.data", (off_t)0,
-	(hsize_t)(max_size[0]*sizeof(int)/4)) < 0) goto error;
-    if(H5Pset_external(dcpl, "ext4.data", (off_t)0,
-	(hsize_t)(max_size[0]*sizeof(int)/4)) < 0) goto error;
-    if((space = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
+
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, (hsize_t)(max_size[0]*sizeof(int)/4)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)(max_size[0]*sizeof(int)/4)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext3.data", (off_t)0, (hsize_t)(max_size[0]*sizeof(int)/4)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext4.data", (off_t)0, (hsize_t)(max_size[0]*sizeof(int)/4)) < 0)
+        FAIL_STACK_ERROR
+    if((space = H5Screate_simple(1, cur_size, max_size)) < 0)
+        FAIL_STACK_ERROR
     if((dset = H5Dcreate2(file, "dset6", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-    if(H5Dclose(dset) < 0) goto error;
-    if(H5Sclose(space) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
+        FAIL_STACK_ERROR
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
 error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_multiple_files() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1g
- *
- * Purpose:	It should be impossible to define an unlimited external file
- *		and then follow it with another external file.
+ * Function:    test_add_to_unlimited
  *
- * Return:	Success:	0
+ * Purpose:     It should be impossible to define an unlimited external file
+ *              and then follow it with another external file.
  *
- *		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1g(void)
+test_add_to_unlimited(void)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    herr_t	status;			/*function return status	*/
-    int		n;			/*number of external files	*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    herr_t	status;             /* function return status               */
+    int		n;                  /* number of external files             */
 
     TESTING("external file following unlimited file");
-    if ((dcpl=H5Pcreate (H5P_DATASET_CREATE)) < 0) goto error;
-    if (H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED) < 0) goto error;
+
+    if((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED) < 0)
+        FAIL_STACK_ERROR
+
     H5E_BEGIN_TRY {
-	status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
+        status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
     } H5E_END_TRY;
-    if (status>=0) {
-	H5_FAILED();
-	puts ("    H5Pset_external() succeeded when it should have failed.");
-	goto error;
-    }
-    if ((n = H5Pget_external_count(dcpl)) < 0) goto error;
-    if (1!=n) {
-	H5_FAILED();
-	puts("    Wrong external file count returned.");
-	goto error;
-    }
-    if (H5Pclose(dcpl) < 0) goto error;
+    if(status >= 0)
+        FAIL_PUTS_ERROR("    H5Pset_external() succeeded when it should have failed.");
+
+    if((n = H5Pget_external_count(dcpl)) < 0)
+        FAIL_STACK_ERROR
+    if(1 != n)
+        FAIL_PUTS_ERROR("    Wrong external file count returned.");
+
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Pclose(dcpl);
+        H5Pclose(dcpl);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_add_to_unlimited() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_1h
- *
- * Purpose:	It should be impossible to create a set of external files
- *		whose total size overflows a size_t integer.
+ * Function:    test_overflow
  *
- * Return:	Success:	0
+ * Purpose:     It should be impossible to create a set of external files
+ *              whose total size overflows a size_t integer.
  *
- *		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, November 23, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_1h(void)
+test_overflow(void)
 {
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    herr_t	status;			/*return status			*/
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    herr_t	status;             /* return status                        */
 
     TESTING("address overflow in external files");
-    if((dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
-    if (H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED-1) < 0) goto error;
+
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED-1) < 0)
+        FAIL_STACK_ERROR
+
     H5E_BEGIN_TRY {
-	status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
+        status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
     } H5E_END_TRY;
-    if (status>=0) {
-	H5_FAILED();
-	puts("    H5Pset_external() succeeded when it should have failed.");
-	goto error;
-    }
-    if (H5Pclose(dcpl) < 0) goto error;
+    if(status >= 0)
+        FAIL_PUTS_ERROR("    H5Pset_external() succeeded when it should have failed.");
+
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Pclose(dcpl);
+        H5Pclose(dcpl);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_overflow() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_2
- *
- * Purpose:	Tests reading from an external file set.
+ * Function:    test_read_file_set
  *
- * Return:	Success:	0
+ * Purpose:     Tests reading from an external file set.
  *
- * 		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, March  4, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_2 (hid_t fapl)
+test_read_file_set(hid_t fapl)
 {
-    hid_t	file=-1;		/*file to write to		*/
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	space=-1;		/*data space			*/
-    hid_t	dset=-1;		/*dataset			*/
-    hid_t	grp=-1;			/*group to emit diagnostics	*/
-    int		fd;			/*external file descriptors	*/
-    size_t	i, j;			/*miscellaneous counters	*/
-    hssize_t	n;			/*bytes of I/O			*/
-    char	filename[1024];		/*file names			*/
-    int		part[25], whole[100];	/*raw data buffers		*/
-    hsize_t	cur_size;		/*current data space size	*/
-    hid_t	hs_space;		/*hyperslab data space		*/
-    hsize_t	hs_start = 30;		/*hyperslab starting offset	*/
-    hsize_t	hs_count = 25;		/*hyperslab size		*/
-	int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
+    hid_t	file = -1;          /* file to write to                     */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    hid_t	grp = -1;           /* group to emit diagnostics            */
+    size_t	i;                  /* miscellaneous counter                */
+    char	filename[1024];     /* file names                           */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size;           /* current data space size              */
+    hid_t	hs_space = -1;      /* hyperslab data space                 */
+    hsize_t	hs_start = 30;      /* hyperslab starting offset            */
+    hsize_t	hs_count = 25;      /* hyperslab size                       */
 
     TESTING("read external dataset");
 
-    /* Write the data to external files directly */
-    for (i=0; i<4; i++) {
-	for (j=0; j<25; j++) {
-	    part[j] = (int)(i*25+j);
-	}
-	sprintf (filename, "extern_%lua.raw", (unsigned long)i+1);
-	fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
-	assert (fd>=0);
-/*	n = lseek (fd, (off_t)(i*10), SEEK_SET);
-*/
-	n = HDwrite(fd,temparray,(size_t)i*10);
-	assert (n>=0 && (size_t)n==i*10);
-	n = HDwrite(fd, part, sizeof(part));
-	assert (n==sizeof(part));
-	HDclose(fd);
-    }
-
-    /*
-     * Create the file and an initial group.  This causes messages about
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
+        TEST_ERROR
+
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
+
+    /* Create the file and an initial group.  This causes messages about
      * debugging to be emitted before we start playing games with what the
      * output looks like.
      */
-    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
-    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
-    if((grp = H5Gcreate2(file, "emit-diagnostics", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    h5_fixname(FILENAME[1], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR
+    if((grp = H5Gcreate2(file, "emit-diagnostics", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
     if(H5Gclose(grp) < 0) FAIL_STACK_ERROR
 
+    /* Create the dcpl */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        HDsnprintf(filename, sizeof(filename), "extern_%dr.raw", (int) i + 1);
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Create the dataspace */
+    cur_size = TOTAL_SIZE;
+    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
+        FAIL_STACK_ERROR
+
     /* Create the dataset */
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
-    if(H5Pset_external(dcpl, "extern_1a.raw",  (off_t)0, (hsize_t)sizeof part) < 0 ||
-            H5Pset_external(dcpl, "extern_2a.raw", (off_t)10, (hsize_t)sizeof part) < 0 ||
-            H5Pset_external(dcpl, "extern_3a.raw", (off_t)20, (hsize_t)sizeof part) < 0 ||
-            H5Pset_external(dcpl, "extern_4a.raw", (off_t)30, (hsize_t)sizeof part) < 0)
-	goto error;
-    cur_size = 100;
-    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0) goto error;
-    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
-
-    /*
-     * Read the entire dataset and compare with the original
-     */
-    memset(whole, 0, sizeof(whole));
-    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0) goto error;
-    for(i = 0; i < 100; i++)
-	if(whole[i] != (signed)i) {
-	    H5_FAILED();
-	    puts("    Incorrect value(s) read.");
-	    goto error;
-	} /* end if */
-
-    /*
-     * Read the middle of the dataset
-     */
-    if((hs_space = H5Scopy(space)) < 0) goto error;
-    if(H5Sselect_hyperslab(hs_space, H5S_SELECT_SET, &hs_start, NULL,
-			    &hs_count, NULL) < 0) goto error;
+    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Read the entire dataset */
     HDmemset(whole, 0, sizeof(whole));
-    if(H5Dread(dset, H5T_NATIVE_INT, hs_space, hs_space, H5P_DEFAULT,
-		 whole) < 0) goto error;
-    if(H5Sclose(hs_space) < 0) goto error;
-    for(i = hs_start; i<hs_start+hs_count; i++) {
-	if(whole[i] != (signed)i) {
-	    H5_FAILED();
-	    puts("    Incorrect value(s) read.");
-	    goto error;
-	}
-    }
-
-    if (H5Dclose(dset) < 0) goto error;
-    if (H5Pclose(dcpl) < 0) goto error;
-    if (H5Sclose(space) < 0) goto error;
-    if (H5Fclose(file) < 0) goto error;
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+
+    /* Compare data */
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    /* Read via a hypserslab in the middle of the dataset */
+
+    /* Set up dataspace */
+    if((hs_space = H5Scopy(space)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Sselect_hyperslab(hs_space, H5S_SELECT_SET, &hs_start, NULL, &hs_count, NULL) < 0)
+        FAIL_STACK_ERROR
+
+    /* Read */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, hs_space, hs_space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+
+    /* Verify data */
+    for(i = (size_t)hs_start; i < (size_t)(hs_start + hs_count); i++) {
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read (hyperslab).");
+    } /* end for */
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(hs_space) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(space);
-	H5Fclose(file);
+        H5Gclose(grp);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
+        H5Sclose(hs_space);
+        H5Fclose(file);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_read_file_set() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_3
- *
- * Purpose:	Tests writing to an external file set.
+ * Function:    test_write_file_set
  *
- * Return:	Success:	0
+ * Purpose:     Tests writing to an external file set.
  *
- * 		Failure:	number of errors
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, March  4, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
-test_3 (hid_t fapl)
+test_write_file_set(hid_t fapl)
 {
-    hid_t	file=-1;		/*file to which to write	*/
-    hid_t	dcpl=-1;		/*dataset creation properties	*/
-    hid_t	mem_space=-1;		/*memory data space		*/
-    hid_t	file_space=-1;		/*file data space		*/
-    hid_t	dset=-1;		/*dataset			*/
-    unsigned	i;			/*miscellaneous counters	*/
-    int		fd;			/*external file descriptor	*/
-    int	    part[25],whole[100];	/*raw data buffers		*/
-    hsize_t	cur_size=100;		/*current data space size	*/
-    hsize_t	max_size=200;		/*maximum data space size	*/
-    hsize_t	hs_start=100;		/*hyperslab starting offset	*/
-    hsize_t	hs_count=100;		/*hyperslab size		*/
-    char	filename[1024];		/*file name			*/
-	int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
+    hid_t	file = -1;          /* file to which to write               */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	mem_space = -1;     /* memory data space                    */
+    hid_t	file_space = -1;    /* file data space                      */
+    hid_t	dset = -1;          /* dataset                              */
+    unsigned i;                 /* miscellaneous counter                */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size = 100;     /* current data space size              */
+    hsize_t	max_size = 200;     /* maximum data space size              */
+    hsize_t	hs_start = 100;     /* hyperslab starting offset            */
+    hsize_t	hs_count = 100;     /* hyperslab size                       */
+    char	filename[1024];     /* file name                            */
 
     TESTING("write external dataset");
 
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
+        TEST_ERROR
+
     /* Create another file */
-    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
-    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) {
-	goto error;
-    }
-
-    /* Create the external file list */
-    if((dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
-    if (H5Pset_external(dcpl, "extern_1b.raw", (off_t)0, (hsize_t)sizeof part) < 0 ||
-	H5Pset_external(dcpl, "extern_2b.raw", (off_t)10, (hsize_t)sizeof part) < 0 ||
-	H5Pset_external(dcpl, "extern_3b.raw", (off_t)20, (hsize_t)sizeof part) < 0 ||
-	H5Pset_external(dcpl, "extern_4b.raw", (off_t)30, H5F_UNLIMITED) < 0)
-	goto error;
-
-    /* Make sure the output files are fresh*/
-    for (i=1; i<=4; i++) {
-	sprintf(filename, "extern_%db.raw", i);
-	if ((fd= HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0) {
-	    H5_FAILED();
-	    printf("    cannot open %s: %s\n", filename, strerror(errno));
-	    goto error;
-	}
-
-	HDwrite(fd, temparray, (i-1)*10);
-	HDclose(fd);
-    }
+    h5_fixname(FILENAME[2], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dcpl and external file list */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        hsize_t size;
+
+        HDsnprintf(filename, sizeof(filename), "extern_%dw.raw", (int) i + 1);
+
+        if(i != N_EXT_FILES -1)
+            size = (hsize_t)sizeof(part);
+        else
+            size = H5F_UNLIMITED;
+
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), size) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
 
     /* Create the dataset */
-    if((mem_space = H5Screate_simple(1, &cur_size, &max_size)) < 0) goto error;
-    if((file_space = H5Scopy(mem_space)) < 0) goto error;
+    if((mem_space = H5Screate_simple(1, &cur_size, &max_size)) < 0)
+        FAIL_STACK_ERROR
+    if((file_space = H5Scopy(mem_space)) < 0)
+        FAIL_STACK_ERROR
     if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, file_space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
+        FAIL_STACK_ERROR
 
     /* Write the entire dataset and compare with the original */
     for(i = 0; i < cur_size; i++)
-        whole[i] = i;
-    if(H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole) < 0) goto error;
-    for(i = 0; i < 4; i++) {
-	char name1[64], name2[64];
-
-	sprintf(name1, "extern_%da.raw", i + 1);
-	sprintf(name2, "extern_%db.raw", i + 1);
-	if(!same_contents(name1, name2)) {
-	    H5_FAILED();
-	    puts ("   Output differs from expected value.");
-	    goto error;
-	} /* end if */
+        whole[i] = (int)i;
+    if(H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        char name1[64], name2[64];
+
+        HDsprintf(name1, "extern_%dr.raw", i + 1);
+        HDsprintf(name2, "extern_%dw.raw", i + 1);
+        if(!files_have_same_contents(name1, name2))
+            FAIL_PUTS_ERROR("   Output differs from expected value.")
     } /* end for */
 
     /* Extend the dataset by another 100 elements */
-    if(H5Dset_extent(dset, &max_size) < 0) goto error;
-    if(H5Sclose(file_space) < 0) goto error;
-    if((file_space = H5Dget_space(dset)) < 0) goto error;
+    if(H5Dset_extent(dset, &max_size) < 0)
+        FAIL_STACK_ERROR
+    if(H5Sclose(file_space) < 0)
+        FAIL_STACK_ERROR
+    if((file_space = H5Dget_space(dset)) < 0)
+        FAIL_STACK_ERROR
 
     /* Write second half of dataset */
     for(i = 0; i < hs_count; i++)
-        whole[i] = 100 + i;
-    if(H5Sselect_hyperslab(file_space, H5S_SELECT_SET, &hs_start, NULL, &hs_count, NULL) < 0) goto error;
-    if(H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole) < 0) goto error;
+        whole[i] = 100 + (int)i;
+    if(H5Sselect_hyperslab(file_space, H5S_SELECT_SET, &hs_start, NULL, &hs_count, NULL) < 0)
+        FAIL_STACK_ERROR
+    if(H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
 
 
-    if(H5Dclose(dset) < 0) goto error;
-    if(H5Pclose(dcpl) < 0) goto error;
-    if(H5Sclose(mem_space) < 0) goto error;
-    if(H5Sclose(file_space) < 0) goto error;
-    if(H5Fclose(file) < 0) goto error;
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(mem_space) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(file_space) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
 
     PASSED();
     return 0;
 
  error:
     H5E_BEGIN_TRY {
-	H5Dclose(dset);
-	H5Pclose(dcpl);
-	H5Sclose(mem_space);
-	H5Sclose(file_space);
-	H5Fclose(file);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(mem_space);
+        H5Sclose(file_space);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_write_file_set() */
+
+ 

+ /*-------------------------------------------------------------------------
+ * Function:    test_path_absolute
+ *
+ * Purpose:     Test absolute filenames for external files.
+ *              This will create an HDF5 file in a subdirectory which will
+ *              refer to /full/path/extern_*a.raw on unix and to
+ *              c:\full\path\extern_*a.raw and \full\path\extern_*a.raw on
+ *              windows.
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Steffen Kiess
+ *              March 10, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_path_absolute(hid_t fapl)
+{
+    hid_t	file = -1;          /* file to write to                     */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    size_t	i;                  /* miscellaneous counter                */
+    char	cwdpath[1024];      /* working directory                    */
+    char	filename[1024];     /* file name                            */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size;           /* current data space size              */
+
+    TESTING("absolute filenames for external file");
+
+    h5_fixname(FILENAME[3], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
+
+    /* Create the dcpl */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
+        TEST_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        HDsnprintf(filename, sizeof(filename), "%s%sextern_%dr.raw", cwdpath, H5_DIR_SEPS, (int) i + 1);
+#if defined(H5_HAVE_WINDOW_PATH)
+        /* For windows, test path-absolute case (\dir\file.raw) for the second file */
+        if(i == 1)
+            HDsnprintf(filename, sizeof(filename), "%s%sextern_%dr.raw", cwdpath + 2, H5_DIR_SEPS, i + 1);
+#endif
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    /* create the dataspace */
+    cur_size = TOTAL_SIZE;
+    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
+        FAIL_STACK_ERROR
+
+    /* create the dataset */
+    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Read the entire dataset and compare with the original */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Dclose(dset);
+        H5Sclose(space);
+        H5Pclose(dcpl);
+        H5Fclose(file);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_path_absolute() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	test_4
+ * Function:    test_path_relative
+ *
+ * Purpose:     Test external files with filename relative to current directory.
+ *              This will create an HDF5 file in a subdirectory which will
+ *              refer to extern_*a.raw
  *
- * Purpose:	Tests opening an external link twice.  It exposed a bug
- *              in the library.  This function tests the fix.  This test
- *              doesn't work with MULTI driver.
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Return:	Success:	0
+ * Programmer:  Steffen Kiess
+ *              March 10, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_path_relative(hid_t fapl)
+{
+    hid_t	file = -1;          /* file to write to                     */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dset = -1;          /* dataset                              */
+    size_t	i;                  /* miscellaneous counters               */
+    char	cwdpath[1024];      /* working directory                    */
+    char	filename[1024];     /* file name                            */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size;           /* current data space size              */
+
+    TESTING("filenames relative to current directory for external file");
+
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
+        TEST_ERROR
+
+    if (HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR;
+
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
+
+    /* Create the dataset */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
+        TEST_ERROR
+    for (i = 0; i < N_EXT_FILES; i++) {
+        HDsnprintf(filename, sizeof(filename), "extern_%dr.raw", (int)i + 1);
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
+
+    cur_size = TOTAL_SIZE;
+    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
+        FAIL_STACK_ERROR
+    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Read the entire dataset and compare with the original */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_path_relative() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    test_path_relative_cwd
  *
- * 		Failure:	number of errors
+ * Purpose:     Test external files with filename relative to current directory.
+ *              This will create an HDF5 file in a subdirectory which will
+ *              refer to ../extern_*a.raw
+ *              The files are then accessed by setting the efile_prefix dataset
+ *              access property to "${ORIGIN}".
  *
- * Programmer:	Raymond Lu
- *              5 November 2007
+ * Return:      Success:    0
+ *              Failure:    1
  *
- * Modifications:
+ * Programmer:  Steffen Kiess
+ *              March 10, 2015
  *
  *-------------------------------------------------------------------------
  */
 static int
-test_4 (hid_t fapl)
+test_path_relative_cwd(hid_t fapl)
 {
-    hid_t fid = -1;
-    hid_t gid = -1;
-    hid_t xid = -1;
-    hid_t xid2 = -1;
-    char  filename[1024];		/*file name			*/
-    const char *pathname = H5_get_srcdir_filename(LINKED_FILE); /* Corrected test file name */
+    hid_t	file = -1;          /* file to write to                     */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dapl = -1;          /* dataset access property list         */
+    hid_t	dapl2 = -1;         /* copy of dapl                         */
+    hid_t	dset = -1;          /* dataset                              */
+    hid_t	dset2 = -1;         /* dataset, opened a second time        */
+    hid_t	dset3 = -1;         /* dataset, opened with different prefix    */
+    size_t	i;                  /* miscellaneous counters               */
+    char	cwdpath[1024];      /* working directory                    */
+    char	filename[1024];     /* file name                            */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size;           /* current data space size              */
+    char	buffer[1024];       /* buffer to read efile_prefix          */
+
+    TESTING("filenames relative to HDF5 file for external file");
+
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
+        TEST_ERROR
 
-    TESTING("opening external link twice");
+    if(HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
+        TEST_ERROR;
 
-    /* Make a copy of the FAPL, in order to switch to the sec2 driver */
-    /* (useful when running test with another VFD) */
-    if((fapl = H5Pcopy(fapl)) < 0) FAIL_STACK_ERROR;
+    h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR;
 
-    /* Switch local copy of the fapl to the sec2 driver */
-    if(H5Pset_fapl_sec2(fapl) < 0) FAIL_STACK_ERROR;
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
 
-    h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+    /* Create the dataset */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
+        TEST_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        HDsnprintf(filename, sizeof(filename), "..%sextern_%dr.raw", H5_DIR_SEPS, (int)i + 1);
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
 
-    if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
-        goto error;
+    cur_size = TOTAL_SIZE;
+    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
+        FAIL_STACK_ERROR
+    if((dapl = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_efile_prefix(dapl, "${ORIGIN}") < 0)
+        FAIL_STACK_ERROR
+    if(H5Pget_efile_prefix(dapl, buffer, sizeof(buffer)) < 0)
+        FAIL_STACK_ERROR
+    if(HDstrcmp(buffer, "${ORIGIN}") != 0)
+        FAIL_PUTS_ERROR("efile prefix not set correctly");
+    if((dapl2 = H5Pcopy(dapl)) < 0)
+        FAIL_STACK_ERROR
 
-    if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0)
-        goto error;
+    /* Create dataset */
+    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, dapl2)) < 0)
+        FAIL_STACK_ERROR
 
-    /* Create an external link to an existing file*/
-    if(H5Lcreate_external(pathname, "/group", gid, " link", H5P_DEFAULT, H5P_DEFAULT) < 0)
-        goto error;
+    /* Reopen dataset with same efile_prefix property */
+    if((dset2 = H5Dopen2(file, "dset1", dapl2)) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5Gclose(gid) < 0)
-        goto error;
+    /* Reopen dataset with different efile_prefix property */
+    if(H5Pset_efile_prefix(dapl, "//") < 0)
+        FAIL_STACK_ERROR
+    H5E_BEGIN_TRY {
+        dset3 = H5Dopen2(file, "dset1", dapl);
+    } H5E_END_TRY;
+    if(dset3 >= 0)
+        FAIL_PUTS_ERROR("reopening the dataset with a different efile_prefix succeded");
 
-    if(H5Fclose(fid) < 0)
-        goto error;
+    /* Read the entire dataset and compare with the original */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    /* Close dataset */
+    if(H5Dclose(dset2) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+
+    /* Open dataset (use a differend prefix than for create.
+     * This works because the dataset was closed.
+     */
+    if(H5Pset_efile_prefix(dapl2, "${ORIGIN}/.") < 0)
+        FAIL_STACK_ERROR
+    if((dset = H5Dopen2(file, "dset1", dapl2)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Reopen dataset with same efile_prefix property */
+    if((dset2 = H5Dopen2(file, "dset1", dapl2)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Reopen dataset with different efile_prefix property */
+    if(H5Pset_efile_prefix(dapl, NULL) < 0)
+        FAIL_STACK_ERROR
+    H5E_BEGIN_TRY {
+        dset3 = H5Dopen2(file, "dset1", dapl);
+    } H5E_END_TRY;
+    if(dset3 >= 0)
+        FAIL_PUTS_ERROR("reopening the dataset with a different efile_prefix succeded");
 
-    /* Reopen the file */
-    if((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
-        goto error;
+    /* Read the entire dataset and compare with the original */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    if(H5Dclose(dset2) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl2) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
+    PASSED();
+    return 0;
 
-    /* Open the external link which is "/ link" as created previously via H5Lcreate_external() */
-    if((xid = H5Gopen2(fid, "/ link", H5P_DEFAULT)) < 0)
-        goto error;
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dapl2);
+        H5Pclose(dapl);
+        H5Dclose(dset3);
+        H5Dclose(dset2);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_path_relative_cwd() */
 
-    /* Open the external link twice */
-    if((xid2 = H5Gopen2(xid, ".", H5P_DEFAULT)) < 0)
-        goto error;
+

+/*-------------------------------------------------------------------------
+ * Function:    test_path_env
+ *
+ * Purpose:     Test whether the value of HDF5_EXTFILE_PREFIX will overwrite
+ *              the efile_prefix dataset access property.
+ *              This will create an HDF5 file in a subdirectory which will
+ *              refer to ../extern_*a.raw
+ *              The files are then accessed by setting the HDF5_EXTFILE_PREFIX
+ *              environment variable to "${ORIGIN}".
+ *              The efile_prefix dataset access property is set to "someprefix",
+ *              which will cause an error if the value is not overwritten by
+ *              the environment variable.
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Steffen Kiess
+ *              March 10, 2015
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_path_env(hid_t fapl)
+{
+    hid_t	file = -1;          /* file to write to                     */
+    hid_t	dcpl = -1;          /* dataset creation properties          */
+    hid_t	space = -1;         /* data space                           */
+    hid_t	dapl = -1;          /* dataset access property list         */
+    hid_t	dset = -1;          /* dataset                              */
+    size_t	i;                  /* miscellaneous counters               */
+    char	cwdpath[1024];		/* working directory                    */
+    char	filename[1024];		/* file name                            */
+    int	    part[PART_SIZE];    /* raw data buffer (partial)            */
+    int     whole[TOTAL_SIZE];  /* raw data buffer (total)              */
+    hsize_t	cur_size;           /* current data space size              */
+    char	buffer[1024];       /* buffer to read efile_prefix          */
+
+    TESTING("prefix in HDF5_EXTFILE_PREFIX");
+
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "${ORIGIN}", 1))
+        TEST_ERROR
 
-    if(H5Gclose(xid2) < 0)
-        goto error;
+    if(HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
+        TEST_ERROR;
 
-    if(H5Gclose(xid) < 0)
-        goto error;
+    h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5Fclose(fid) < 0)
-        goto error;
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
 
-    if(H5Pclose(fapl) < 0)
+    /* Create the dataset */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
         TEST_ERROR
+    for(i = 0; i < N_EXT_FILES; i++) {
+        HDsnprintf(filename, sizeof(filename), "..%sextern_%dr.raw", H5_DIR_SEPS, (int) i + 1);
+        if(H5Pset_external(dcpl, filename, (off_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
+            FAIL_STACK_ERROR
+    } /* end for */
 
+    cur_size = TOTAL_SIZE;
+    if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
+        FAIL_STACK_ERROR
+    if((dapl = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set prefix to a nonexistent directory, will be overwritten by environment variable */
+    if(H5Pset_efile_prefix(dapl, "someprefix") < 0)
+        FAIL_STACK_ERROR
+    if(H5Pget_efile_prefix(dapl, buffer, sizeof(buffer)) < 0)
+        FAIL_STACK_ERROR
+    if(HDstrcmp(buffer, "someprefix") != 0)
+        FAIL_PUTS_ERROR("efile prefix not set correctly");
+
+    /* Create dataset */
+    if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, dapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Read the entire dataset and compare with the original */
+    HDmemset(whole, 0, sizeof(whole));
+    if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
+        FAIL_STACK_ERROR
+    for(i = 0; i < TOTAL_SIZE; i++)
+        if(whole[i] != (signed)i)
+            FAIL_PUTS_ERROR("Incorrect value(s) read.");
+
+    if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(space) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(file) < 0) FAIL_STACK_ERROR
     PASSED();
+    return 0;
 
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dapl);
+        H5Dclose(dset);
+        H5Pclose(dcpl);
+        H5Sclose(space);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_path_env() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    test_h5d_get_access_plist
+ *
+ * Purpose:     Ensure that H5Dget_access_plist returns correct values.
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Dana Robinson
+ *              March 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_h5d_get_access_plist(hid_t fapl_id)
+{
+    hid_t	fid = -1;           /* file to write to                     */
+    hid_t	dcpl_id = -1;       /* dataset creation properties          */
+    hid_t	dapl_id = -1;       /* dataset access properties            */
+    hid_t	sid = -1;           /* data space                           */
+    hid_t	did = -1;           /* dataset                              */
+    hsize_t dims = 0;           /* dataset size                         */
+    char    *buffer = NULL;     /* saved prefix name from dapl          */
+    char	filename[1024];     /* file names                           */
+
+    TESTING("H5Dget_access_plist() returns correct prefix");
+
+    if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
+        TEST_ERROR
+
+    /* Reset the raw data files */
+    if(reset_raw_data_files() < 0)
+        TEST_ERROR
+
+    /* Create the file */
+    h5_fixname(FILENAME[5], fapl_id, filename, sizeof(filename));
+    if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dcpl and set external storage */
+    if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_external(dcpl_id, "extern_1r.raw", (off_t)0, (hsize_t)0) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dapl and set the prefix */
+    if((dapl_id = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_efile_prefix(dapl_id, "someprefix") < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dataset */
+    if((sid = H5Screate_simple(1, &dims, NULL)) < 0)
+        FAIL_STACK_ERROR
+    if((did = H5Dcreate2(fid, "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl_id, dapl_id)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close the dapl */
+    if(H5Pclose(dapl_id) < 0)
+        FAIL_STACK_ERROR
+    dapl_id = -1;
+
+    /* Get a data access property list from the dataset */
+    if((dapl_id = H5Dget_access_plist(did)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check the value for the external prefix */
+    if((buffer = (char *)HDcalloc((size_t)64, sizeof(char))) == NULL)
+        TEST_ERROR
+    if(H5Pget_efile_prefix(dapl_id, buffer, (size_t)64) < 0)
+        FAIL_STACK_ERROR
+    if(HDstrcmp(buffer, "someprefix") != 0)
+        FAIL_PUTS_ERROR("external file prefix from dapl incorrect");
+
+    /* Close everything */
+    HDfree(buffer);
+    if(H5Sclose(sid) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(did) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl_id) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl_id) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+
+    PASSED();
     return 0;
 
  error:
+    if(buffer)
+        HDfree(buffer);
     H5E_BEGIN_TRY {
-        H5Gclose(gid);
-        H5Gclose(xid);
-        H5Gclose(xid2);
+        H5Dclose(did);
+        H5Pclose(dcpl_id);
+        H5Pclose(dapl_id);
+        H5Sclose(sid);
         H5Fclose(fid);
     } H5E_END_TRY;
     return 1;
-}
+} /* end test_h5d_get_access_plist() */
 
 

 /*-------------------------------------------------------------------------
- * Function:	main
+ * Function:    main
  *
- * Purpose:	Runs external dataset tests.
+ * Purpose:     Runs external dataset tests.
  *
- * Return:	Success:	exit(0)
- *
- *		Failure:	exit(non-zero)
+ * Return:      EXIT_SUCCESS/EXIT_FAILURE
  *
  * Programmer:	Robb Matzke
  *              Tuesday, March  3, 1998
  *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 int
-main (void)
+main(void)
 {
-    hid_t	fapl=-1;		/*file access properties	*/
-    hid_t	file=-1;		/*file for test_1* functions	*/
-    char	filename[1024];		/*file name for test_1* funcs	*/
-    hid_t	grp=-1;			/*group to emit diagnostics	*/
-    int		nerrors=0;		/*number of errors		*/
+    hid_t	fapl_id_old = -1;   /* file access properties (old format)  */
+    hid_t	fapl_id_new = -1;   /* file access properties (new format)  */
+    hid_t	fid = -1;           /* file for test_1* functions           */
+    hid_t	gid = -1;           /* group to emit diagnostics            */
+    char	filename[1024];     /* file name for test_1* funcs          */
+    unsigned latest_format;     /* default or latest file format        */
+    int		nerrors = 0;        /* number of errors                     */
 
     h5_reset();
-    fapl = h5_fileaccess();
-    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
-    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
-    if((grp = H5Gcreate2(file, "emit-diagnostics", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
-    if(H5Gclose(grp) < 0) goto error;
-
-    nerrors += test_1a(file);
-    nerrors += test_1b(file);
-    nerrors += test_1c(file);
-    nerrors += test_1d(file);
-    nerrors += test_1e(file);
-    nerrors += test_1f(file);
-    nerrors += test_1g();
-    nerrors += test_1h();
-    nerrors += test_2(fapl);
-    nerrors += test_3(fapl);
-    nerrors += test_4(fapl);
-
-    /* Verify symbol table messages are cached */
-    nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0);
-
-    if (nerrors>0) goto error;
-
-    if (H5Fclose(file) < 0) goto error;
-    puts("All external storage tests passed.");
-    if (h5_cleanup(FILENAME, fapl)) {
-        remove("extern_1a.raw");
-        remove("extern_1b.raw");
-        remove("extern_2a.raw");
-        remove("extern_2b.raw");
-        remove("extern_3a.raw");
-        remove("extern_3b.raw");
-        remove("extern_4a.raw");
-        remove("extern_4b.raw");
-    }
 
-    return 0;
+    /* Get a fapl for the old (default) file format */
+    fapl_id_old = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl_id_old, filename, sizeof(filename));
+
+    /* Copy and set up a fapl for the latest file format */
+    if((fapl_id_new = H5Pcopy(fapl_id_old)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_libver_bounds(fapl_id_new, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+        FAIL_STACK_ERROR
+
+    /* The file format doesn't matter for this test */
+    nerrors += test_h5d_get_access_plist(fapl_id_new);
+    HDputs("");
+
+    /* Test with old & new format groups */
+    for(latest_format = FALSE; latest_format <= TRUE; latest_format++) {
+        hid_t current_fapl_id = -1;
+
+        /* Set the fapl for different file formats */
+        if(latest_format) {
+            HDputs("\nTesting with the latest file format:");
+            current_fapl_id = fapl_id_new;
+        } /* end if */
+        else {
+            HDputs("Testing with the default file format:");
+            current_fapl_id = fapl_id_old;
+        } /* end else */
+
+        /* Create the common file used by some of the tests */
+        if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, current_fapl_id)) < 0)
+            FAIL_STACK_ERROR
+
+        /* Create a group that will be used in the file set read test */
+        if((gid = H5Gcreate2(fid, "emit-diagnostics", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+            FAIL_STACK_ERROR
+        if(H5Gclose(gid) < 0) FAIL_STACK_ERROR
+
+        /* These tests use a common file */
+        nerrors += test_non_extendible(fid);
+        nerrors += test_too_small(fid);
+        nerrors += test_large_enough_current_eventual(fid);
+        nerrors += test_large_enough_current_not_eventual(fid);
+        nerrors += test_unlimited(fid);
+        nerrors += test_multiple_files(fid);
+
+        /* These tests use no file */
+        nerrors += test_add_to_unlimited();
+        nerrors += test_overflow();
+
+        /* These file set tests use the VFD-aware fapl */
+        nerrors += test_read_file_set(current_fapl_id);
+        nerrors += test_write_file_set(current_fapl_id);
+        nerrors += test_path_absolute(current_fapl_id);
+        nerrors += test_path_relative(current_fapl_id);
+        nerrors += test_path_relative_cwd(current_fapl_id);
+        nerrors += test_path_env(current_fapl_id);
+ 
+        /* Verify symbol table messages are cached */
+        nerrors += (h5_verify_cached_stabs(FILENAME, current_fapl_id) < 0 ? 1 : 0);
+
+        /* Close the common file */
+        if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+
+    } /* end for */
+
+    if(nerrors > 0) goto error;
+
+    /* Close the new ff fapl. h5_cleanup will take care of the old ff fapl */
+    if(H5Pclose(fapl_id_new) < 0) FAIL_STACK_ERROR
+
+    HDputs("All external storage tests passed.");
+
+    /* Clean up files used by file set tests */
+    if(h5_cleanup(FILENAME, fapl_id_old)) {
+        HDremove("extern_1r.raw");
+        HDremove("extern_2r.raw");
+        HDremove("extern_3r.raw");
+        HDremove("extern_4r.raw");
+
+        HDremove("extern_1w.raw");
+        HDremove("extern_2w.raw");
+        HDremove("extern_3w.raw");
+        HDremove("extern_4w.raw");
+
+        HDrmdir("extern_dir");
+    } /* end if */
+
+    return EXIT_SUCCESS;
 
 error:
     H5E_BEGIN_TRY {
-        H5Fclose(file);
-        H5Pclose(fapl);
+        H5Fclose(fid);
+        H5Pclose(fapl_id_old);
+        H5Pclose(fapl_id_new);
+        H5Gclose(gid);
     } H5E_END_TRY;
     nerrors = MAX(1, nerrors);
-    printf ("%d TEST%s FAILED.\n", nerrors, 1==nerrors?"":"s");
-    return 1;
-}
+    printf("%d TEST%s FAILED.\n", nerrors, 1 == nerrors ? "" : "s");
+    return EXIT_FAILURE;
+} /* end main() */
+
diff --git a/test/farray.c b/test/farray.c
index 50a9856..e84bfae 100644
--- a/test/farray.c
+++ b/test/farray.c
@@ -402,11 +402,11 @@ finish(hid_t file, hid_t fapl, H5F_t *f, H5FA_t *fa, haddr_t fa_addr)
     h5_stat_size_t file_size;           /* File size, after deleting array */
 
     /* Close the fixed array */
-    if(H5FA_close(fa, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
     /* Delete array */
-    if(H5FA_delete(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL) < 0)
+    if(H5FA_delete(f, H5AC_ind_read_dxpl_id, fa_addr, NULL) < 0)
         FAIL_STACK_ERROR
 
     /* Close the file */
@@ -464,11 +464,11 @@ test_create(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.raw_elmt_size = 0;
     H5E_BEGIN_TRY {
-        fa = H5FA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        fa = H5FA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(fa) {
         /* Close opened fixed array */
-        H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+        H5FA_close(fa, H5AC_ind_read_dxpl_id);
         fa = NULL;
 
         /* Indicate error */
@@ -479,11 +479,11 @@ test_create(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.max_dblk_page_nelmts_bits = 0;
     H5E_BEGIN_TRY {
-        fa = H5FA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        fa = H5FA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(fa) {
         /* Close opened fixed array */
-        H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+        H5FA_close(fa, H5AC_ind_read_dxpl_id);
         fa = NULL;
 
         /* Indicate error */
@@ -494,11 +494,11 @@ test_create(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t H5_ATTR_UNUSE
     HDmemcpy(&test_cparam, cparam, sizeof(test_cparam));
     test_cparam.nelmts = 0;
     H5E_BEGIN_TRY {
-        fa = H5FA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL);
+        fa = H5FA_create(f, H5AC_ind_read_dxpl_id, &test_cparam, NULL);
     } H5E_END_TRY;
     if(fa) {
         /* Close opened fixed array */
-        H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+        H5FA_close(fa, H5AC_ind_read_dxpl_id);
         fa = NULL;
 
         /* Indicate error */
@@ -518,7 +518,7 @@ test_create(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t H5_ATTR_UNUSE
     TESTING("fixed array creation");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     PASSED()
@@ -542,7 +542,7 @@ test_create(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t H5_ATTR_UNUSE
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -578,19 +578,19 @@ test_reopen(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
     TESTING("create, close & reopen fixed array");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Close the fixed array */
-    if(H5FA_close(fa, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, NULL, HADDR_UNDEF, tparam) < 0)
         TEST_ERROR
 
     /* Re-open the array */
-    if(NULL == (fa = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -609,7 +609,7 @@ test_reopen(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -648,11 +648,11 @@ test_open_twice(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
     TESTING("open fixed array twice");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Open the array again, through the first file handle */
-    if(NULL == (fa2 = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa2 = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -662,12 +662,12 @@ test_open_twice(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the second fixed array wrapper */
-    if(H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa2 = NULL;
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &fa, fa_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &fa, fa_addr, tparam) < 0)
         TEST_ERROR
 
     /* Re-open the file */
@@ -679,7 +679,7 @@ test_open_twice(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Open the fixed array through the second file handle */
-    if(NULL == (fa2 = H5FA_open(f2, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa2 = H5FA_open(f2, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -687,7 +687,7 @@ test_open_twice(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the first extensible array wrapper */
-    if(H5FA_close(fa, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa = NULL;
 
@@ -710,9 +710,9 @@ test_open_twice(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
         if(fa2)
-            H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
 	H5Fclose(file2);
     } H5E_END_TRY;
@@ -760,11 +760,11 @@ test_open_twice_diff(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tpa
         TEST_ERROR
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Open the array again, through the first file handle */
-    if(NULL == (fa2 = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa2 = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -774,7 +774,7 @@ test_open_twice_diff(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tpa
         TEST_ERROR
 
     /* Close the second fixed array wrapper */
-    if(H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa2 = NULL;
 
@@ -786,11 +786,11 @@ test_open_twice_diff(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tpa
         FAIL_STACK_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &fa, fa_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &fa, fa_addr, tparam) < 0)
         TEST_ERROR
 
     /* Close the first fixed array wrapper */
-    if(H5FA_close(fa, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa = NULL;
 
@@ -821,7 +821,7 @@ test_open_twice_diff(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tpa
         FAIL_STACK_ERROR
 
     /* Open the fixed array through the second file handle */
-    if(NULL == (fa2 = H5FA_open(f2, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa2 = H5FA_open(f2, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -846,9 +846,9 @@ test_open_twice_diff(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tpa
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
         if(fa2)
-            H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
 	H5Fclose(file2);
 	H5Fclose(file0);
@@ -889,15 +889,15 @@ test_delete_open(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
     TESTING("deleting open fixed array");
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Open the array again */
-    if(NULL == (fa2 = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL)))
+    if(NULL == (fa2 = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL)))
         FAIL_STACK_ERROR
 
     /* Request that the array be deleted */
-    if(H5FA_delete(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL) < 0)
+    if(H5FA_delete(f, H5AC_ind_read_dxpl_id, fa_addr, NULL) < 0)
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -907,38 +907,38 @@ test_delete_open(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
         TEST_ERROR
 
     /* Close the second fixed array wrapper */
-    if(H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa2 = NULL;
 
     /* Try re-opening the array again (should fail, as array will be deleted) */
     H5E_BEGIN_TRY {
-        fa2 = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL);
+        fa2 = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL);
     } H5E_END_TRY;
     if(fa2) {
         /* Close opened array */
-        H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT);
+        H5FA_close(fa2, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
     } /* end if */
 
     /* Close the first fixed array wrapper */
-    if(H5FA_close(fa, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5FA_close(fa, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fa = NULL;
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, NULL, HADDR_UNDEF, tparam) < 0)
         TEST_ERROR
 
     /* Try re-opening the array again (should fail, as array is now deleted) */
     H5E_BEGIN_TRY {
-        fa = H5FA_open(f, H5P_DATASET_XFER_DEFAULT, fa_addr, NULL);
+        fa = H5FA_open(f, H5AC_ind_read_dxpl_id, fa_addr, NULL);
     } H5E_END_TRY;
     if(fa) {
         /* Close opened array */
-        H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+        H5FA_close(fa, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
@@ -964,9 +964,9 @@ test_delete_open(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam)
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
         if(fa2)
-            H5FA_close(fa2, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -1393,7 +1393,7 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
         TEST_ERROR
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Verify the creation parameters */
@@ -1401,7 +1401,7 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
         TEST_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &fa, fa_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &fa, fa_addr, tparam) < 0)
         TEST_ERROR
 
     if(H5FA_get_nelmts(fa, &fa_nelmts) < 0)
@@ -1433,7 +1433,7 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 
         /* Retrieve element of array (not set yet) */
         relmt = (uint64_t)0;
-        if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5FA_get(fa, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify that the retrieved is correct */
@@ -1460,7 +1460,7 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 	idx = (hsize_t)sidx;
 
         relmt = (uint64_t)0;
-        if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5FA_get(fa, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify that the retrieved element is correct */
@@ -1469,12 +1469,12 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 
         /* Set element of array */
         welmt = (uint64_t)7 + idx;
-        if(H5FA_set(fa, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
+        if(H5FA_set(fa, H5AC_ind_read_dxpl_id, idx, &welmt) < 0)
             FAIL_STACK_ERROR
 
         /* Retrieve element of array (set now) */
         relmt = (uint64_t)0;
-        if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+        if(H5FA_get(fa, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
             FAIL_STACK_ERROR
 
         /* Verify that the retrieved element is correct */
@@ -1504,7 +1504,7 @@ test_set_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
@@ -1548,7 +1548,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
         TEST_ERROR
 
     /* Create array */
-    if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &fa, &fa_addr) < 0)
+    if(create_array(f, H5AC_ind_read_dxpl_id, cparam, &fa, &fa_addr) < 0)
         TEST_ERROR
 
     /* Verify the creation parameters */
@@ -1556,7 +1556,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
         TEST_ERROR
 
     /* Check for closing & re-opening the file */
-    if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &fa, fa_addr, tparam) < 0)
+    if(reopen_file(&file, &f, fapl, H5AC_ind_read_dxpl_id, &fa, fa_addr, tparam) < 0)
         TEST_ERROR
 
     if(H5FA_get_nelmts(fa, &fa_nelmts) < 0)
@@ -1578,7 +1578,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 
     /* Retrieve element of array (not set yet) */
     relmt = (uint64_t)0;
-    if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+    if(H5FA_get(fa, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify that the retrieved is correct */
@@ -1587,7 +1587,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 
     /* Set element of array */
     welmt = (uint64_t)7 + idx;
-    if(H5FA_set(fa, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
+    if(H5FA_set(fa, H5AC_ind_read_dxpl_id, idx, &welmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify array state */
@@ -1598,7 +1598,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 
     /* Retrieve element of array (set now) */
     relmt = (uint64_t)0;
-    if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
+    if(H5FA_get(fa, H5AC_ind_read_dxpl_id, idx, &relmt) < 0)
         FAIL_STACK_ERROR
 
     /* Verify that the retrieved is correct */
@@ -1610,7 +1610,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
         for(cnt = 0; cnt < skip_elmts; cnt++) {
             /* Retrieve element of array (not set yet) */
             relmt = (uint64_t)0;
-            if(H5FA_get(fa, H5P_DATASET_XFER_DEFAULT, cnt, &relmt) < 0)
+            if(H5FA_get(fa, H5AC_ind_read_dxpl_id, cnt, &relmt) < 0)
                 FAIL_STACK_ERROR
 
             /* Verify that the retrieved is correct */
@@ -1631,7 +1631,7 @@ test_skip_elmts(hid_t fapl, H5FA_create_t *cparam, farray_test_param_t *tparam,
 error:
     H5E_BEGIN_TRY {
         if(fa)
-            H5FA_close(fa, H5P_DATASET_XFER_DEFAULT);
+            H5FA_close(fa, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
 
diff --git a/test/fheap.c b/test/fheap.c
index 25784a9..558cb44 100644
--- a/test/fheap.c
+++ b/test/fheap.c
@@ -470,16 +470,16 @@ get_del_string(const fheap_test_param_t *tparam)
     /* Remove half of total objects from heap */
     if(tparam->del_dir == FHEAP_DEL_FORWARD)
         if(tparam->drain_half == FHEAP_DEL_DRAIN_ALL)
-            str = HDstrdup("(all - forward)");
+            str = H5MM_strdup("(all - forward)");
         else
-            str = HDstrdup("(half, refill, all - forward)");
+            str = H5MM_strdup("(half, refill, all - forward)");
     else if(tparam->del_dir == FHEAP_DEL_REVERSE)
         if(tparam->drain_half == FHEAP_DEL_DRAIN_ALL)
-            str = HDstrdup("(all - reverse)");
+            str = H5MM_strdup("(all - reverse)");
         else
-            str = HDstrdup("(half, refill, all - reverse)");
+            str = H5MM_strdup("(half, refill, all - reverse)");
     else
-        str = HDstrdup("(all - deleting heap)");
+        str = H5MM_strdup("(all - deleting heap)");
 
     return(str);
 } /* get_del_string() */
@@ -1872,7 +1872,7 @@ test_create(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
      */
     TESTING("fractal heap creation");
 
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -1896,11 +1896,11 @@ test_create(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
         TEST_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
     /* Delete heap */
-    if(H5HF_delete(f, H5P_DATASET_XFER_DEFAULT, fh_addr) < 0)
+    if(H5HF_delete(f, H5AC_ind_read_dxpl_id, fh_addr) < 0)
         FAIL_STACK_ERROR
 
     /* Close the file */
@@ -1923,7 +1923,7 @@ test_create(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
 error:
     H5E_BEGIN_TRY {
         if(fh)
-            H5HF_close(fh, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -1991,7 +1991,7 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
     TESTING("create, close & reopen fractal heap");
 
     /* Create heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -2006,7 +2006,7 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
         TEST_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
     /* Check for closing & re-opening the file */
@@ -2030,7 +2030,7 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
     } /* end if */
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Query the creation parameters */
@@ -2041,12 +2041,12 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
         TEST_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh = NULL;
 
     /* Delete heap */
-    if(H5HF_delete(f, H5P_DATASET_XFER_DEFAULT, fh_addr) < 0)
+    if(H5HF_delete(f, H5AC_ind_read_dxpl_id, fh_addr) < 0)
         FAIL_STACK_ERROR
 
     /* Close the file */
@@ -2069,7 +2069,7 @@ test_reopen(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UNUSED
 error:
     H5E_BEGIN_TRY {
         if(fh)
-            H5HF_close(fh, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -2139,7 +2139,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
     TESTING("open fractal heap twice");
 
     /* Create heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -2154,7 +2154,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
         TEST_ERROR
 
     /* Open the heap again, through the first file handle */
-    if(NULL == (fh2 = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh2 = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -2165,12 +2165,12 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
         TEST_ERROR
 
     /* Close the second fractal heap wrapper */
-    if(H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh2 = NULL;
 
     /* Check for closing & re-opening the heap & file */
-    if(reopen_file(&file, &f, filename, fapl, H5P_DATASET_XFER_DEFAULT, &fh, fh_addr, tparam) < 0)
+    if(reopen_file(&file, &f, filename, fapl, H5AC_ind_read_dxpl_id, &fh, fh_addr, tparam) < 0)
         TEST_ERROR
 
     /* Re-open the file */
@@ -2186,7 +2186,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
         FAIL_STACK_ERROR
 
     /* Open the fractal heap through the second file handle */
-    if(NULL == (fh2 = H5HF_open(f2, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh2 = H5HF_open(f2, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -2197,7 +2197,7 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
         TEST_ERROR
 
     /* Close the first fractal heap wrapper */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh = NULL;
 
@@ -2209,12 +2209,12 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
         FAIL_STACK_ERROR
 
     /* Close the second fractal heap wrapper */
-    if(H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh2 = NULL;
 
     /* Delete heap */
-    if(H5HF_delete(f2, H5P_DATASET_XFER_DEFAULT, fh_addr) < 0)
+    if(H5HF_delete(f2, H5AC_ind_read_dxpl_id, fh_addr) < 0)
         FAIL_STACK_ERROR
 
     /* Close the second file */
@@ -2237,9 +2237,9 @@ test_open_twice(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_UN
 error:
     H5E_BEGIN_TRY {
         if(fh)
-            H5HF_close(fh, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh, H5AC_ind_read_dxpl_id);
         if(fh2)
-            H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
 	H5Fclose(file2);
     } H5E_END_TRY;
@@ -2307,7 +2307,7 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_U
     TESTING("deleting open fractal heap");
 
     /* Create heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -2322,11 +2322,11 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_U
         TEST_ERROR
 
     /* Open the heap again */
-    if(NULL == (fh2 = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh2 = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Request that the heap be deleted */
-    if(H5HF_delete(f, H5P_DATASET_XFER_DEFAULT, fh_addr) < 0)
+    if(H5HF_delete(f, H5AC_ind_read_dxpl_id, fh_addr) < 0)
         FAIL_STACK_ERROR
 
     /* Verify the creation parameters */
@@ -2337,24 +2337,24 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_U
         TEST_ERROR
 
     /* Close the second fractal heap wrapper */
-    if(H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh2, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh2 = NULL;
 
     /* Try re-opening the heap again (should fail, as heap will be deleted) */
     H5E_BEGIN_TRY {
-        fh2 = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr);
+        fh2 = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr);
     } H5E_END_TRY;
     if(fh2) {
         /* Close opened heap */
-        H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT);
+        H5HF_close(fh2, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
     } /* end if */
 
     /* Close the first fractal heap wrapper */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh = NULL;
 
@@ -2380,11 +2380,11 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_U
 
     /* Try re-opening the heap again (should fail, as heap is now deleted) */
     H5E_BEGIN_TRY {
-        fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr);
+        fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr);
     } H5E_END_TRY;
     if(fh) {
         /* Close opened heap */
-        H5HF_close(fh, H5P_DATASET_XFER_DEFAULT);
+        H5HF_close(fh, H5AC_ind_read_dxpl_id);
 
         /* Indicate error */
         TEST_ERROR
@@ -2410,9 +2410,9 @@ test_delete_open(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t H5_ATTR_U
 error:
     H5E_BEGIN_TRY {
         if(fh)
-            H5HF_close(fh, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh, H5AC_ind_read_dxpl_id);
         if(fh2)
-            H5HF_close(fh2, H5P_DATASET_XFER_DEFAULT);
+            H5HF_close(fh2, H5AC_ind_read_dxpl_id);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -2436,7 +2436,7 @@ static unsigned
 test_id_limits(hid_t fapl, H5HF_create_t *cparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -2781,7 +2781,7 @@ static unsigned
 test_filtered_create(hid_t fapl, H5HF_create_t *cparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -2849,7 +2849,7 @@ test_filtered_create(hid_t fapl, H5HF_create_t *cparam)
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Query the heap creation parameters */
@@ -2860,7 +2860,7 @@ test_filtered_create(hid_t fapl, H5HF_create_t *cparam)
         FAIL_STACK_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
 
@@ -2904,7 +2904,7 @@ static unsigned
 test_size(hid_t fapl, H5HF_create_t *cparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3005,7 +3005,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
         TEST_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
 
@@ -3049,7 +3049,7 @@ test_reopen_hdr(hid_t fapl, H5HF_create_t *cparam)
 {
     hid_t       file1 = -1;             /* File ID */
     hid_t       file2 = -2;             /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char        filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t       *f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3143,7 +3143,7 @@ test_reopen_hdr(hid_t fapl, H5HF_create_t *cparam)
         FAIL_STACK_ERROR
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
 
@@ -3185,7 +3185,7 @@ static unsigned
 test_man_insert_weird(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3297,7 +3297,7 @@ static unsigned
 test_man_insert_first(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3398,7 +3398,7 @@ static unsigned
 test_man_insert_second(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3494,7 +3494,7 @@ static unsigned
 test_man_insert_root_mult(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3593,7 +3593,7 @@ static unsigned
 test_man_insert_force_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3618,7 +3618,7 @@ test_man_insert_force_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_par
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -3699,7 +3699,7 @@ static unsigned
 test_man_insert_fill_second(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3724,7 +3724,7 @@ test_man_insert_fill_second(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -3806,7 +3806,7 @@ static unsigned
 test_man_insert_third_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3831,7 +3831,7 @@ test_man_insert_third_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -3917,7 +3917,7 @@ static unsigned
 test_man_fill_first_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -3942,7 +3942,7 @@ test_man_fill_first_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4013,7 +4013,7 @@ static unsigned
 test_man_start_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4038,7 +4038,7 @@ test_man_start_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4116,7 +4116,7 @@ static unsigned
 test_man_fill_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4141,7 +4141,7 @@ test_man_fill_second_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4217,7 +4217,7 @@ static unsigned
 test_man_start_third_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4242,7 +4242,7 @@ test_man_start_third_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4327,7 +4327,7 @@ static unsigned
 test_man_fill_fourth_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4353,7 +4353,7 @@ test_man_fill_fourth_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4425,7 +4425,7 @@ static unsigned
 test_man_fill_all_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4450,7 +4450,7 @@ test_man_fill_all_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_para
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4521,7 +4521,7 @@ static unsigned
 test_man_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4546,7 +4546,7 @@ test_man_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4623,7 +4623,7 @@ static unsigned
 test_man_second_direct_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4648,7 +4648,7 @@ test_man_second_direct_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhe
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4733,7 +4733,7 @@ static unsigned
 test_man_fill_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4758,7 +4758,7 @@ test_man_fill_first_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4836,7 +4836,7 @@ static unsigned
 test_man_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4861,7 +4861,7 @@ test_man_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -4947,7 +4947,7 @@ static unsigned
 test_man_fill_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -4972,7 +4972,7 @@ test_man_fill_second_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5055,7 +5055,7 @@ static unsigned
 test_man_fill_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5076,7 +5076,7 @@ test_man_fill_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fheap_te
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5153,7 +5153,7 @@ static unsigned
 test_man_start_2nd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5178,7 +5178,7 @@ test_man_start_2nd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5262,7 +5262,7 @@ static unsigned
 test_man_recursive_indirect_two_deep(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5287,7 +5287,7 @@ test_man_recursive_indirect_two_deep(hid_t fapl, H5HF_create_t *cparam, fheap_te
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5365,7 +5365,7 @@ static unsigned
 test_man_start_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5390,7 +5390,7 @@ test_man_start_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5475,7 +5475,7 @@ static unsigned
 test_man_fill_first_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5500,7 +5500,7 @@ test_man_fill_first_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fh
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5586,7 +5586,7 @@ static unsigned
 test_man_fill_3rd_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5611,7 +5611,7 @@ test_man_fill_3rd_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fhea
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5693,7 +5693,7 @@ static unsigned
 test_man_fill_all_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5718,7 +5718,7 @@ test_man_fill_all_3rd_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhea
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5801,7 +5801,7 @@ static unsigned
 test_man_start_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5826,7 +5826,7 @@ test_man_start_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -5916,7 +5916,7 @@ static unsigned
 test_man_fill_first_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -5941,7 +5941,7 @@ test_man_fill_first_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fh
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -6036,7 +6036,7 @@ static unsigned
 test_man_fill_4th_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6061,7 +6061,7 @@ test_man_fill_4th_recursive_indirect_row(hid_t fapl, H5HF_create_t *cparam, fhea
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -6148,7 +6148,7 @@ static unsigned
 test_man_fill_all_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6173,7 +6173,7 @@ test_man_fill_all_4th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fhea
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -6263,7 +6263,7 @@ static unsigned
 test_man_start_5th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6288,7 +6288,7 @@ test_man_start_5th_recursive_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_t
         STACK_ERROR
 
     /* Create absolute heap */
-    if(NULL == (fh = H5HF_create(f, H5P_DATASET_XFER_DEFAULT, cparam)))
+    if(NULL == (fh = H5HF_create(f, H5AC_ind_read_dxpl_id, cparam)))
         FAIL_STACK_ERROR
     if(H5HF_get_id_len(fh, &id_len) < 0)
         FAIL_STACK_ERROR
@@ -6392,7 +6392,7 @@ static unsigned
 test_man_remove_bogus(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6546,7 +6546,7 @@ static unsigned
 test_man_remove_one(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6709,7 +6709,7 @@ static unsigned
 test_man_remove_two(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -6902,7 +6902,7 @@ static unsigned
 test_man_remove_one_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7070,7 +7070,7 @@ static unsigned
 test_man_remove_two_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7313,7 +7313,7 @@ static unsigned
 test_man_remove_three_larger(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7614,7 +7614,7 @@ static unsigned
 test_man_incr_insert_remove(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7729,7 +7729,7 @@ static unsigned
 test_man_remove_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7803,7 +7803,7 @@ static unsigned
 test_man_remove_two_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7892,7 +7892,7 @@ static unsigned
 test_man_remove_first_row(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -7963,7 +7963,7 @@ static unsigned
 test_man_remove_first_two_rows(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8036,7 +8036,7 @@ static unsigned
 test_man_remove_first_four_rows(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8113,7 +8113,7 @@ static unsigned
 test_man_remove_all_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8184,7 +8184,7 @@ static unsigned
 test_man_remove_2nd_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8259,7 +8259,7 @@ static unsigned
 test_man_remove_3rd_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8343,7 +8343,7 @@ static unsigned
 test_man_skip_start_block(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8421,7 +8421,7 @@ static unsigned
 test_man_skip_start_block_add_back(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8520,7 +8520,7 @@ static unsigned
 test_man_skip_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8630,7 +8630,7 @@ static unsigned
 test_man_skip_2nd_block(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8727,7 +8727,7 @@ static unsigned
 test_man_skip_2nd_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -8872,7 +8872,7 @@ static unsigned
 test_man_fill_one_partial_skip_2nd_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9038,7 +9038,7 @@ static unsigned
 test_man_fill_row_skip_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9165,7 +9165,7 @@ static unsigned
 test_man_skip_direct_skip_indirect_two_rows_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9292,7 +9292,7 @@ static unsigned
 test_man_fill_direct_skip_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9416,7 +9416,7 @@ static unsigned
 test_man_fill_direct_skip_2nd_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9545,7 +9545,7 @@ static unsigned
 test_man_fill_2nd_direct_less_one_wrap_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9691,7 +9691,7 @@ static unsigned
 test_man_fill_direct_skip_2nd_indirect_skip_2nd_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -9861,7 +9861,7 @@ static unsigned
 test_man_fill_direct_skip_indirect_two_rows_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10015,7 +10015,7 @@ static unsigned
 test_man_fill_direct_skip_indirect_two_rows_skip_indirect_row_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10195,7 +10195,7 @@ static unsigned
 test_man_fill_2nd_direct_skip_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10324,7 +10324,7 @@ static unsigned
 test_man_fill_2nd_direct_skip_2nd_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10462,7 +10462,7 @@ static unsigned
 test_man_fill_2nd_direct_fill_direct_skip_3rd_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10614,7 +10614,7 @@ static unsigned
 test_man_fill_2nd_direct_fill_direct_skip2_3rd_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10777,7 +10777,7 @@ static unsigned
 test_man_fill_3rd_direct_less_one_fill_direct_wrap_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -10940,7 +10940,7 @@ static unsigned
 test_man_fill_1st_row_3rd_direct_fill_2nd_direct_less_one_wrap_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -11107,7 +11107,7 @@ static unsigned
 test_man_fill_3rd_direct_fill_direct_skip_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -11269,7 +11269,7 @@ static unsigned
 test_man_fill_3rd_direct_fill_2nd_direct_fill_direct_skip_3rd_indirect_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -11449,7 +11449,7 @@ static unsigned
 test_man_fill_3rd_direct_fill_2nd_direct_fill_direct_skip_3rd_indirect_two_rows_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -11664,7 +11664,7 @@ static unsigned
 test_man_fill_3rd_direct_fill_2nd_direct_fill_direct_skip_3rd_indirect_wrap_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -11861,7 +11861,7 @@ static unsigned
 test_man_fill_4th_direct_less_one_fill_2nd_direct_fill_direct_skip_3rd_indirect_wrap_start_block_add_skipped(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12089,7 +12089,7 @@ static unsigned
 test_man_frag_simple(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12221,7 +12221,7 @@ static unsigned
 test_man_frag_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12393,7 +12393,7 @@ static unsigned
 test_man_frag_2nd_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12507,7 +12507,7 @@ static unsigned
 test_man_frag_3rd_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12622,7 +12622,7 @@ static unsigned
 test_huge_insert_one(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -12775,7 +12775,7 @@ static unsigned
 test_huge_insert_two(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -13008,7 +13008,7 @@ static unsigned
 test_huge_insert_three(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -13316,7 +13316,7 @@ static unsigned
 test_huge_insert_mix(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -13742,7 +13742,7 @@ static unsigned
 test_filtered_huge(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -13847,7 +13847,7 @@ test_filtered_huge(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam
         STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 #endif /* QAK */
 /* QAK */
@@ -13958,7 +13958,7 @@ static unsigned
 test_tiny_insert_one(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -14111,7 +14111,7 @@ static unsigned
 test_tiny_insert_two(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -14345,7 +14345,7 @@ static unsigned
 test_tiny_insert_mix(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -14956,7 +14956,7 @@ static unsigned
 test_filtered_man_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -15027,7 +15027,7 @@ test_filtered_man_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_para
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Check up on heap... */
@@ -15068,7 +15068,7 @@ test_filtered_man_root_direct(hid_t fapl, H5HF_create_t *cparam, fheap_test_para
     } /* end if */
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh = NULL;
 
@@ -15132,7 +15132,7 @@ static unsigned
 test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -15213,7 +15213,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Check up on heap... */
@@ -15277,7 +15277,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
                 FAIL_STACK_ERROR
 
             /* Re-open the heap */
-            if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+            if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
                 FAIL_STACK_ERROR
 
             /* Remove object #2 from heap */
@@ -15313,7 +15313,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
                 FAIL_STACK_ERROR
 
             /* Re-open the heap */
-            if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+            if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
                 FAIL_STACK_ERROR
 
             /* Check up on heap... */
@@ -15350,7 +15350,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
                 FAIL_STACK_ERROR
 
             /* Re-open the heap */
-            if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+            if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
                 FAIL_STACK_ERROR
 
             /* Remove object #1 from heap */
@@ -15386,7 +15386,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
                 FAIL_STACK_ERROR
 
             /* Re-open the heap */
-            if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+            if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
                 FAIL_STACK_ERROR
 
             /* Check up on heap... */
@@ -15397,7 +15397,7 @@ test_filtered_man_root_indirect(hid_t fapl, H5HF_create_t *cparam, fheap_test_pa
     } /* end if */
 
     /* Close the fractal heap */
-    if(H5HF_close(fh, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5HF_close(fh, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
     fh = NULL;
 
@@ -15467,7 +15467,7 @@ static unsigned
 test_random(hsize_t size_limit, hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -15671,7 +15671,7 @@ static unsigned
 test_random_pow2(hsize_t size_limit, hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -15897,7 +15897,7 @@ static unsigned
 test_write(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -16027,7 +16027,7 @@ test_write(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Initialize data to overwrite with */
@@ -16094,7 +16094,7 @@ test_write(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Verify changed objects */
@@ -16174,7 +16174,7 @@ static unsigned
 test_bug1(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
 {
     hid_t	file = -1;              /* File ID */
-    hid_t       dxpl = H5P_DATASET_XFER_DEFAULT;     /* DXPL to use */
+    hid_t       dxpl = H5AC_ind_read_dxpl_id;     /* DXPL to use */
     char	filename[FHEAP_FILENAME_LEN];         /* Filename to use */
     H5F_t	*f = NULL;              /* Internal file object pointer */
     H5HF_t      *fh = NULL;             /* Fractal heap wrapper */
@@ -16259,7 +16259,7 @@ test_bug1(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Remove one of the objects */
@@ -16289,7 +16289,7 @@ test_bug1(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_t *tparam)
         FAIL_STACK_ERROR
 
     /* Re-open the heap */
-    if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
+    if(NULL == (fh = H5HF_open(f, H5AC_ind_read_dxpl_id, fh_addr)))
         FAIL_STACK_ERROR
 
     /* Insert another object */
diff --git a/test/file_image.c b/test/file_image.c
index 52d0b28..6d1845f 100644
--- a/test/file_image.c
+++ b/test/file_image.c
@@ -156,8 +156,8 @@ error:
     if(H5Pclose(fapl_1) < 0) retval = 1;
     if(H5Pclose(fapl_2) < 0) retval = 1;
     HDfree(buffer);
-    HDfree(temp);
-    HDfree(temp2);
+    H5free_memory(temp);
+    H5free_memory(temp2);
 
     if(retval == 0)
         PASSED();
diff --git a/test/freespace.c b/test/freespace.c
index 1b87974..2023724 100644
--- a/test/freespace.c
+++ b/test/freespace.c
@@ -487,7 +487,7 @@ test_fs_create(hid_t fapl)
     init_cparam(&cparam);
     nclasses = NELMTS(test_classes);
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -507,12 +507,12 @@ test_fs_create(hid_t fapl)
         FAIL_STACK_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
         FAIL_STACK_ERROR
     frsp = NULL;
 
     /* reopen the free-space manager */
-    if(NULL == (frsp = H5FS_open(f, H5P_DATASET_XFER_DEFAULT, fs_addr,
+    if(NULL == (frsp = H5FS_open(f, H5AC_ind_read_dxpl_id, fs_addr,
 			nclasses, test_classes, NULL, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -522,12 +522,12 @@ test_fs_create(hid_t fapl)
 	TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
         FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
         FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -550,7 +550,7 @@ test_fs_create(hid_t fapl)
 error:
     H5E_BEGIN_TRY {
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -625,7 +625,7 @@ test_fs_sect_add(hid_t fapl)
     init_cparam(&cparam);
     nclasses = NELMTS(test_classes);
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
             &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
         FAIL_STACK_ERROR
 
@@ -637,7 +637,7 @@ test_fs_sect_add(hid_t fapl)
 
     init_sect_node(sect_node, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node,
             H5FS_ADD_RETURNED_SPACE, NULL) < 0)
         FAIL_STACK_ERROR
 
@@ -652,7 +652,7 @@ test_fs_sect_add(hid_t fapl)
     fr_meta_size = H5FS_HEADER_SIZE(f) + H5FS_SINFO_PREFIX_SIZE(f);
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
         FAIL_STACK_ERROR
     frsp = NULL;
 
@@ -687,7 +687,7 @@ test_fs_sect_add(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = H5FS_CLS_GHOST_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
             &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
         FAIL_STACK_ERROR
 
@@ -700,7 +700,7 @@ test_fs_sect_add(hid_t fapl)
 
     init_sect_node(sect_node, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node,
             0, NULL) < 0)
         FAIL_STACK_ERROR
 
@@ -715,7 +715,7 @@ test_fs_sect_add(hid_t fapl)
     fr_meta_size = H5FS_HEADER_SIZE(f);
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
         FAIL_STACK_ERROR
 
     /* Close the file */
@@ -759,7 +759,7 @@ test_fs_sect_add(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = 0;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -774,7 +774,7 @@ test_fs_sect_add(hid_t fapl)
      */
     init_sect_node(sect_node, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -785,12 +785,12 @@ test_fs_sect_add(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -828,7 +828,7 @@ test_fs_sect_add(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = 0;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -843,7 +843,7 @@ test_fs_sect_add(hid_t fapl)
      */
     init_sect_node(sect_node, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node,
 	    H5FS_ADD_DESERIALIZING, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -855,7 +855,7 @@ test_fs_sect_add(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -864,12 +864,12 @@ test_fs_sect_add(hid_t fapl)
     sect_node = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -886,7 +886,7 @@ error:
         if(sect_node)
             TEST_sect_free((H5FS_section_info_t *)sect_node);
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -946,7 +946,7 @@ test_fs_sect_find(hid_t fapl)
     init_cparam(&cparam);
     nclasses = NELMTS(test_classes);
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -958,7 +958,7 @@ test_fs_sect_find(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE30, (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -968,7 +968,7 @@ test_fs_sect_find(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
@@ -977,7 +977,7 @@ test_fs_sect_find(hid_t fapl)
     TESTING("H5FS_sect_find() a section equal to requested-size from free-space");
 
     /* reopen the free-space manager */
-    if(NULL == (frsp = H5FS_open(f, H5P_DATASET_XFER_DEFAULT, fs_addr, nclasses,
+    if(NULL == (frsp = H5FS_open(f, H5AC_ind_read_dxpl_id, fs_addr, nclasses,
 			    test_classes, NULL, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -994,7 +994,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1015,7 +1015,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node3, (haddr_t)(TEST_SECT_ADDR200), (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1034,7 +1034,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1053,7 +1053,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node4, (haddr_t)TEST_SECT_ADDR300, (hsize_t)TEST_SECT_SIZE80, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node4,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node4,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1064,7 +1064,7 @@ test_fs_sect_find(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE50, (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1077,11 +1077,11 @@ test_fs_sect_find(hid_t fapl)
 	TEST_ERROR
 
     /* remove sections A, C and D */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1) < 0)
 	FAIL_STACK_ERROR
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3) < 0)
 	FAIL_STACK_ERROR
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node4) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node4) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -1096,7 +1096,7 @@ test_fs_sect_find(hid_t fapl)
     sect_node4 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
@@ -1105,7 +1105,7 @@ test_fs_sect_find(hid_t fapl)
     TESTING("H5FS_sect_find() a section greater than requested-size from free-space");
 
     /* reopen the free-space manager */
-    if(NULL == (frsp = H5FS_open(f, H5P_DATASET_XFER_DEFAULT, fs_addr, nclasses,
+    if(NULL == (frsp = H5FS_open(f, H5AC_ind_read_dxpl_id, fs_addr, nclasses,
 			    test_classes, NULL, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1122,7 +1122,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1142,7 +1142,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR200, (hsize_t)TEST_SECT_SIZE80, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1153,7 +1153,7 @@ test_fs_sect_find(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE50, (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1166,7 +1166,7 @@ test_fs_sect_find(hid_t fapl)
     node = NULL;
 
     /* remove sections A */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -1175,7 +1175,7 @@ test_fs_sect_find(hid_t fapl)
     sect_node1 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
@@ -1184,7 +1184,7 @@ test_fs_sect_find(hid_t fapl)
     TESTING("H5FS_sect_find(): cannot find a section with requested-size from free-space");
 
     /* reopen the free-space manager */
-    if(NULL == (frsp = H5FS_open(f, H5P_DATASET_XFER_DEFAULT, fs_addr, nclasses,
+    if(NULL == (frsp = H5FS_open(f, H5AC_ind_read_dxpl_id, fs_addr, nclasses,
 			    test_classes, NULL, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1201,7 +1201,7 @@ test_fs_sect_find(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1213,14 +1213,14 @@ test_fs_sect_find(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE50, (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* remove sections A */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -1229,12 +1229,12 @@ test_fs_sect_find(hid_t fapl)
     sect_node1 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1255,7 +1255,7 @@ error:
         if(sect_node4)
             TEST_sect_free((H5FS_section_info_t *)sect_node4);
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -1330,7 +1330,7 @@ test_fs_sect_merge(hid_t fapl)
     init_cparam(&cparam);
     nclasses = NELMTS(test_classes);
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1345,7 +1345,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1365,7 +1365,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1383,7 +1383,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node3, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE10, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1401,7 +1401,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node4, (haddr_t)TEST_SECT_ADDR150, (hsize_t)TEST_SECT_SIZE80, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node4,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node4,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1413,7 +1413,7 @@ test_fs_sect_merge(hid_t fapl)
 
 
     /* should be able to find the merged section of A, B, C & D */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE10+TEST_SECT_SIZE30+TEST_SECT_SIZE50+TEST_SECT_SIZE80), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1426,12 +1426,12 @@ test_fs_sect_merge(hid_t fapl)
 	TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1458,7 +1458,7 @@ test_fs_sect_merge(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = H5FS_CLS_SEPAR_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1473,7 +1473,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1493,7 +1493,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1506,17 +1506,17 @@ test_fs_sect_merge(hid_t fapl)
         TEST_ERROR
 
     /* should not be able to find the merged section of A & B */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE30+TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* remove section A from free-space */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1) < 0)
 	FAIL_STACK_ERROR
     /* remove section B from free-space */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -1528,12 +1528,12 @@ test_fs_sect_merge(hid_t fapl)
     sect_node2 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1560,7 +1560,7 @@ test_fs_sect_merge(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = 0; /* reset */
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1575,7 +1575,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE10, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1595,7 +1595,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE_NEW, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1615,7 +1615,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node3, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE_NEW, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1633,7 +1633,7 @@ test_fs_sect_merge(hid_t fapl)
 
     init_sect_node(sect_node4, (haddr_t)TEST_SECT_ADDR150, (hsize_t)TEST_SECT_SIZE80, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node4,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node4,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -1649,14 +1649,14 @@ test_fs_sect_merge(hid_t fapl)
         TEST_ERROR
 
     /* should not be able to find a merged section of A, B, C & D */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE10+TEST_SECT_SIZE30+TEST_SECT_SIZE50+TEST_SECT_SIZE80), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* should be able to find the merged section of B & C */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE30+TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1670,7 +1670,7 @@ test_fs_sect_merge(hid_t fapl)
 	TEST_ERROR
 
     /* should be able to find section A */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE10), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1683,7 +1683,7 @@ test_fs_sect_merge(hid_t fapl)
 	TEST_ERROR
 
     /* should be able to find section D */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE80), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1696,12 +1696,12 @@ test_fs_sect_merge(hid_t fapl)
 	TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1720,7 +1720,7 @@ error:
         if(sect_node2)
             TEST_sect_free((H5FS_section_info_t *)sect_node2);
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -1796,7 +1796,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     TEST_set_eoa((haddr_t)TEST_SECT_ADDR150);  /* set end of file address for shrinking */
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1812,7 +1812,7 @@ test_fs_sect_shrink(hid_t fapl)
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE_NEW, H5FS_SECT_LIVE);
 
     can_shrink = FALSE;
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -1825,7 +1825,7 @@ test_fs_sect_shrink(hid_t fapl)
         TEST_ERROR
 
     /* section A should still be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1846,7 +1846,7 @@ test_fs_sect_shrink(hid_t fapl)
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
     can_shrink = FALSE;
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -1857,19 +1857,19 @@ test_fs_sect_shrink(hid_t fapl)
         TEST_ERROR
 
     /* section A should not be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1897,7 +1897,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     /* does not allow merging */
     init_flags = H5FS_CLS_SEPAR_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -1912,7 +1912,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -1932,7 +1932,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -1941,7 +1941,7 @@ test_fs_sect_shrink(hid_t fapl)
         TEST_ERROR
 
     /* section B should not be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1952,7 +1952,7 @@ test_fs_sect_shrink(hid_t fapl)
 
 
     /* section A should still be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE20), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
@@ -1965,12 +1965,12 @@ test_fs_sect_shrink(hid_t fapl)
 	TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -1996,7 +1996,7 @@ test_fs_sect_shrink(hid_t fapl)
     TEST_set_eoa((haddr_t)TEST_SECT_ADDR150);  /* set end of file address for shrinking */
 
     init_flags = 0; /* reset */
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2011,7 +2011,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -2031,7 +2031,7 @@ test_fs_sect_shrink(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, &can_shrink) < 0)
 	FAIL_STACK_ERROR
 
@@ -2041,26 +2041,26 @@ test_fs_sect_shrink(hid_t fapl)
         TEST_ERROR
 
     /* section B should not be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE50), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* section A should not be there in free-space */
-    if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)(TEST_SECT_SIZE30), (H5FS_section_info_t **)&node)) < 0)
 	FAIL_STACK_ERROR
 
     if (node_found) TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2075,7 +2075,7 @@ test_fs_sect_shrink(hid_t fapl)
 error:
     H5E_BEGIN_TRY {
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -2131,7 +2131,7 @@ test_fs_sect_change_class(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = H5FS_CLS_GHOST_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2146,7 +2146,7 @@ test_fs_sect_change_class(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR60, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2166,7 +2166,7 @@ test_fs_sect_change_class(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE_NONE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2177,7 +2177,7 @@ test_fs_sect_change_class(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if (H5FS_sect_change_class(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if (H5FS_sect_change_class(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 		    TEST_FSPACE_SECT_TYPE_NONE) < 0)
 	TEST_ERROR
 
@@ -2186,7 +2186,7 @@ test_fs_sect_change_class(hid_t fapl)
     if(check_stats(f, frsp, &state))
         TEST_ERROR
 
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE30, (H5FS_section_info_t **)&node) < 0)
 	FAIL_STACK_ERROR
 
@@ -2196,7 +2196,7 @@ test_fs_sect_change_class(hid_t fapl)
     if(TEST_sect_free((H5FS_section_info_t *)node) < 0)
 	TEST_ERROR
 
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -2205,12 +2205,12 @@ test_fs_sect_change_class(hid_t fapl)
     sect_node2 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2237,7 +2237,7 @@ test_fs_sect_change_class(hid_t fapl)
     nclasses = NELMTS(test_classes);
 
     init_flags = H5FS_CLS_SEPAR_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2252,7 +2252,7 @@ test_fs_sect_change_class(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE30, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2264,7 +2264,7 @@ test_fs_sect_change_class(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE50, TEST_FSPACE_SECT_TYPE_NONE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2276,17 +2276,17 @@ test_fs_sect_change_class(hid_t fapl)
 
     init_sect_node(sect_node3, (haddr_t)TEST_SECT_ADDR200, (hsize_t)TEST_SECT_SIZE80, TEST_FSPACE_SECT_TYPE_NONE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
     /* change the class of B to A's class */
-    if (H5FS_sect_change_class(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if (H5FS_sect_change_class(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 		    TEST_FSPACE_SECT_TYPE) < 0)
 	TEST_ERROR
 
     /* change the class of C to A's class */
-    if (H5FS_sect_change_class(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node3,
+    if (H5FS_sect_change_class(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node3,
 		    TEST_FSPACE_SECT_TYPE) < 0)
 	TEST_ERROR
 
@@ -2296,7 +2296,7 @@ test_fs_sect_change_class(hid_t fapl)
 	    TEST_ERROR
 
     /* verify that section B has changed class */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE50, (H5FS_section_info_t **)&node) < 0)
 	FAIL_STACK_ERROR
 
@@ -2307,7 +2307,7 @@ test_fs_sect_change_class(hid_t fapl)
 	TEST_ERROR
 
     /* verify that section C has changed class */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, frsp,
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, frsp,
             (hsize_t)TEST_SECT_SIZE80, (H5FS_section_info_t **)&node) < 0)
 	FAIL_STACK_ERROR
 
@@ -2318,7 +2318,7 @@ test_fs_sect_change_class(hid_t fapl)
 	TEST_ERROR
 
     /* remove section A from free-space */
-    if(H5FS_sect_remove(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1) < 0)
+    if(H5FS_sect_remove(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1) < 0)
 	FAIL_STACK_ERROR
 
     /* Free the section node(s) */
@@ -2327,12 +2327,12 @@ test_fs_sect_change_class(hid_t fapl)
     sect_node1 = NULL;
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2351,7 +2351,7 @@ error:
         if(sect_node2)
             TEST_sect_free((H5FS_section_info_t *)sect_node2);
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -2421,7 +2421,7 @@ test_fs_sect_extend(hid_t fapl)
     init_cparam(&cparam);
     nclasses = NELMTS(test_classes);
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2436,7 +2436,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE5, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2456,7 +2456,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE40, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2468,7 +2468,7 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Extend a block by requested-size */
-    if((status = H5FS_sect_try_extend(f, H5P_DATASET_XFER_DEFAULT, frsp, (haddr_t)TEST_SECT_SIZE80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE40)) < 0)
+    if((status = H5FS_sect_try_extend(f, H5AC_ind_read_dxpl_id, frsp, (haddr_t)TEST_SECT_SIZE80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE40)) < 0)
 	FAIL_STACK_ERROR
     if(FALSE == status)
         TEST_ERROR
@@ -2481,12 +2481,12 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2497,7 +2497,7 @@ test_fs_sect_extend(hid_t fapl)
      */
     TESTING("a block's extension by requested-size which is > adjoining free section's size: Test 2");
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2512,7 +2512,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE5, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2532,7 +2532,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE40, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2544,7 +2544,7 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Extend the block by requested-size */
-    if((status = H5FS_sect_try_extend(f, H5P_DATASET_XFER_DEFAULT, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE50)) < 0)
+    if((status = H5FS_sect_try_extend(f, H5AC_ind_read_dxpl_id, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE50)) < 0)
 	FAIL_STACK_ERROR
     if(TRUE == status)
         TEST_ERROR
@@ -2554,12 +2554,12 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2570,7 +2570,7 @@ test_fs_sect_extend(hid_t fapl)
      */
     TESTING("a block's extension by requested-size which is < adjoining free section's size: Test 3");
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2585,7 +2585,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE5, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2605,7 +2605,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE40, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2617,7 +2617,7 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Extend the block by requested-size */
-    if((status = H5FS_sect_try_extend(f, H5P_DATASET_XFER_DEFAULT, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE30)) < 0)
+    if((status = H5FS_sect_try_extend(f, H5AC_ind_read_dxpl_id, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE20, (hsize_t)TEST_SECT_SIZE30)) < 0)
 	TEST_ERROR
     if(FALSE == status)
         TEST_ERROR
@@ -2628,12 +2628,12 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2644,7 +2644,7 @@ test_fs_sect_extend(hid_t fapl)
      */
     TESTING("a block's extension by requested-size which does not adjoin any free section: Test 4");
 
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2659,7 +2659,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node1, (haddr_t)TEST_SECT_ADDR70, (hsize_t)TEST_SECT_SIZE5, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node1,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node1,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2679,7 +2679,7 @@ test_fs_sect_extend(hid_t fapl)
 
     init_sect_node(sect_node2, (haddr_t)TEST_SECT_ADDR100, (hsize_t)TEST_SECT_SIZE40, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-    if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node2,
+    if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node2,
 	    H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	FAIL_STACK_ERROR
 
@@ -2691,7 +2691,7 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Extend the block by requested-size */
-    if((status = H5FS_sect_try_extend(f, H5P_DATASET_XFER_DEFAULT, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE15, (hsize_t)TEST_SECT_SIZE40)) < 0)
+    if((status = H5FS_sect_try_extend(f, H5AC_ind_read_dxpl_id, frsp, (haddr_t)TEST_SECT_ADDR80, (hsize_t)TEST_SECT_SIZE15, (hsize_t)TEST_SECT_SIZE40)) < 0)
 	TEST_ERROR
     if(TRUE == status)
         TEST_ERROR
@@ -2701,12 +2701,12 @@ test_fs_sect_extend(hid_t fapl)
         TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2721,7 +2721,7 @@ test_fs_sect_extend(hid_t fapl)
 error:
     H5E_BEGIN_TRY {
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
@@ -2772,7 +2772,7 @@ test_fs_sect_iterate(hid_t fapl)
     udata.tot_sect_count = 0;
 
     init_flags = H5FS_CLS_SEPAR_OBJ;
-    if(NULL == (frsp = H5FS_create(f, H5P_DATASET_XFER_DEFAULT, &fs_addr,
+    if(NULL == (frsp = H5FS_create(f, H5AC_ind_read_dxpl_id, &fs_addr,
 	    &cparam, nclasses, test_classes, &init_flags, (hsize_t)FSPACE_THRHD_DEF, (hsize_t)FSPACE_ALIGN_DEF)))
 	FAIL_STACK_ERROR
 
@@ -2786,12 +2786,12 @@ test_fs_sect_iterate(hid_t fapl)
 	sect_size = (unsigned)((i-1) % 9) + 1;
 	init_sect_node(sect_node, (haddr_t)i*10, (hsize_t)sect_size, TEST_FSPACE_SECT_TYPE, H5FS_SECT_LIVE);
 
-	if(H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, frsp, (H5FS_section_info_t *)sect_node,
+	if(H5FS_sect_add(f, H5AC_ind_read_dxpl_id, frsp, (H5FS_section_info_t *)sect_node,
 		H5FS_ADD_RETURNED_SPACE, NULL) < 0)
 	    FAIL_STACK_ERROR
     }
 
-    if(H5FS_sect_iterate(f, H5P_DATASET_XFER_DEFAULT, frsp, TEST_sects_cb, &udata) < 0)
+    if(H5FS_sect_iterate(f, H5AC_ind_read_dxpl_id, frsp, TEST_sects_cb, &udata) < 0)
 	TEST_ERROR
 
     H5FS_sect_stats(frsp, &tot_space, &nsects);
@@ -2802,12 +2802,12 @@ test_fs_sect_iterate(hid_t fapl)
 	TEST_ERROR
 
     /* Close the free space manager */
-    if(H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp) < 0)
+    if(H5FS_close(f, H5AC_ind_read_dxpl_id, frsp) < 0)
 	FAIL_STACK_ERROR
     frsp = NULL;
 
     /* Delete free space manager */
-    if(H5FS_delete(f, H5P_DATASET_XFER_DEFAULT, fs_addr) < 0)
+    if(H5FS_delete(f, H5AC_ind_read_dxpl_id, fs_addr) < 0)
 	FAIL_STACK_ERROR
     fs_addr = HADDR_UNDEF;
 
@@ -2822,7 +2822,7 @@ test_fs_sect_iterate(hid_t fapl)
 error:
     H5E_BEGIN_TRY {
         if(frsp)
-	    H5FS_close(f, H5P_DATASET_XFER_DEFAULT, frsp);
+	    H5FS_close(f, H5AC_ind_read_dxpl_id, frsp);
 	H5Fclose(file);
     } H5E_END_TRY;
     return(1);
diff --git a/test/gen_bogus.c b/test/gen_bogus.c
index e9ce686..fdd8744 100644
--- a/test/gen_bogus.c
+++ b/test/gen_bogus.c
@@ -21,8 +21,8 @@
  *              datasets that have "bogus" messages in their object header.
  */
 
-#include "H5private.h"
 #include "hdf5.h"
+#include "H5private.h"
 #include "H5Oprivate.h"
 
 #ifdef H5O_ENABLE_BOGUS
@@ -36,18 +36,21 @@
 #define FALSE 0
 #endif /* FALSE */
 
-int main(void)
-{
 #ifdef H5O_ENABLE_BOGUS
-    hid_t fid = -1;             /* File ID */
+
+/*
+ * Create datasets in the location (in "/" or "/group") with 
+ *   message id: (a) H5O_BOGUS_VALID_ID or (b)H5O_BOGUS_INVALID_ID
+ *   and various unknown message flags
+ */
+static int
+generate_datasets(hid_t loc_id, unsigned bogus_id) 
+{
     hid_t sid = -1;             /* Dataspace ID */
     hid_t dcpl = -1;            /* Dataset creation property list ID */
     hid_t did = -1;             /* Dataset ID */
     uint8_t bogus_flags = 0;    /* Flags for bogus message */
 
-    /* Create file for test datasets */
-    if((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
-
     /* Create dataspace for datasets */
     if((sid = H5Screate(H5S_SCALAR)) < 0) goto error;
 
@@ -57,8 +60,11 @@ int main(void)
     /* Add property for bogus message flags */
     if(H5Pinsert2(dcpl, H5O_BOGUS_MSG_FLAGS_NAME, H5O_BOGUS_MSG_FLAGS_SIZE, &bogus_flags, NULL, NULL, NULL, NULL, NULL, NULL) < 0) goto error;
 
+    /* Add property for bogus message ID */
+    if(H5Pinsert2(dcpl, H5O_BOGUS_MSG_ID_NAME, H5O_BOGUS_MSG_ID_SIZE, &bogus_id, NULL, NULL, NULL, NULL, NULL, NULL) < 0) goto error;
+
     /* Create dataset with "bogus" message, but no message flags */
-    if((did = H5Dcreate2(fid, "/Dataset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+    if((did = H5Dcreate2(loc_id, "Dataset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
     if(H5Dclose(did) < 0) goto error;
 
     /* Set "fail if unknown and open for write" message flag for bogus message */
@@ -66,7 +72,7 @@ int main(void)
     if(H5Pset(dcpl, H5O_BOGUS_MSG_FLAGS_NAME, &bogus_flags) < 0) goto error;
 
     /* Create second dataset, with "fail if unknown" message flag */
-    if((did = H5Dcreate2(fid, "/Dataset2", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+    if((did = H5Dcreate2(loc_id, "Dataset2", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
     if(H5Dclose(did) < 0) goto error;
 
     /* Set "fail if unknown always" message flag for bogus message */
@@ -74,7 +80,7 @@ int main(void)
     if(H5Pset(dcpl, H5O_BOGUS_MSG_FLAGS_NAME, &bogus_flags) < 0) goto error;
 
     /* Create third dataset, with "fail if unknown always" message flag */
-    if((did = H5Dcreate2(fid, "/Dataset3", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+    if((did = H5Dcreate2(loc_id, "Dataset3", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
     if(H5Dclose(did) < 0) goto error;
 
     /* Set "mark if unknown" message flag for bogus message */
@@ -82,7 +88,7 @@ int main(void)
     if(H5Pset(dcpl, H5O_BOGUS_MSG_FLAGS_NAME, &bogus_flags) < 0) goto error;
 
     /* Create fourth dataset, with "mark if unknown" message flag */
-    if((did = H5Dcreate2(fid, "/Dataset4", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+    if((did = H5Dcreate2(loc_id, "Dataset4", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
     if(H5Dclose(did) < 0) goto error;
 
     /* Close dataset creation property list */
@@ -91,9 +97,6 @@ int main(void)
     /* Close dataspace */
     if(H5Sclose(sid) < 0) goto error;
 
-    /* Close file */
-    if(H5Fclose(fid) < 0) goto error;
-
     return 0;
 
 error:
@@ -101,6 +104,43 @@ error:
         H5Dclose(did);
         H5Sclose(sid);
         H5Pclose(dcpl);
+    } H5E_END_TRY;
+
+    return -1;
+} /* generate_datasets() */
+#endif
+
+int main(void)
+{
+#ifdef H5O_ENABLE_BOGUS
+    hid_t fid = -1;             /* File ID */
+    hid_t gid = -1;             /* Group ID */
+
+    /* Create file for test datasets */
+    if((fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
+
+    /* Create datasets in "/" group with bogus message H5O_BOGUS_VALID_ID */
+    if(generate_datasets(fid, H5O_BOGUS_VALID_ID) < 0)
+        goto error;
+
+    if((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        goto error;
+
+    /* Create datasets in "/group" with bogus message H5O_BOGUS_INVALID_ID */
+    if(generate_datasets(gid, H5O_BOGUS_INVALID_ID) < 0)
+        goto error;
+
+    /* Close the group */
+    if(H5Gclose(gid) < 0) goto error;
+
+    /* Close file */
+    if(H5Fclose(fid) < 0) goto error;
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Gclose(gid);
         H5Fclose(fid);
     } H5E_END_TRY;
 #else /* H5O_ENABLE_BOGUS */
diff --git a/test/gen_udlinks.c b/test/gen_udlinks.c
index fc044da..55abab0 100644
--- a/test/gen_udlinks.c
+++ b/test/gen_udlinks.c
@@ -22,9 +22,6 @@
  *  They will be named according to the platform and should
  *  be placed in the hdf5/test directory so that the links test can use them.
  *
- * Note: The be_extlink2.h5 is also used by external.c to test opening
- *  external link twice. -SLU 2007/11/7
- *
  */
 
 #include "hdf5.h"
diff --git a/test/gheap.c b/test/gheap.c
index f30935a..3f66d35 100644
--- a/test/gheap.c
+++ b/test/gheap.c
@@ -23,6 +23,7 @@
  */
 #include "h5test.h"
 #include "H5private.h"
+#include "H5ACprivate.h"
 #include "H5Eprivate.h"
 #include "H5Fprivate.h"
 #include "H5Gprivate.h"
@@ -107,7 +108,7 @@ test_1 (hid_t fapl)
 	size = i + 1;
 	HDmemset(out, 'A' + i % 26, size);
 	H5Eclear2(H5E_DEFAULT);
-	status = H5HG_insert(f, H5P_DATASET_XFER_DEFAULT, size, out, obj + i);
+	status = H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj + i);
 	if(status < 0) {
 	    H5_FAILED();
 	    puts("    Unable to insert object into global heap");
@@ -126,7 +127,7 @@ test_1 (hid_t fapl)
 	size = i + 1;
 	HDmemset(out, 'A' + i % 26, size);
 	H5Eclear2(H5E_DEFAULT);
-	if(NULL == H5HG_read(f, H5P_DATASET_XFER_DEFAULT, obj + i, in, NULL)) {
+	if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, obj + i, in, NULL)) {
 	    H5_FAILED();
 	    puts("    Unable to read object");
 	    nerrors++;
@@ -200,7 +201,7 @@ test_2 (hid_t fapl)
 	size = 1024-i;
 	memset (out, 'A'+i%26, size);
 	H5Eclear2(H5E_DEFAULT);
-	if (H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i)<0) {
+	if (H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i)<0) {
 	    H5_FAILED();
 	    puts("    Unable to insert object into global heap");
 	    nerrors++;
@@ -214,7 +215,7 @@ test_2 (hid_t fapl)
 	size = 1024-i;
 	memset (out, 'A'+i%26, size);
 	H5Eclear2(H5E_DEFAULT);
-	if (NULL==H5HG_read (f, H5P_DATASET_XFER_DEFAULT, obj+i, in, NULL)) {
+	if (NULL==H5HG_read (f, H5AC_ind_read_dxpl_id, obj+i, in, NULL)) {
 	    H5_FAILED();
 	    puts("    Unable to read object");
 	    nerrors++;
@@ -285,7 +286,7 @@ test_3 (hid_t fapl)
 	size = i%30+100;
 	memset (out, 'A'+i%26, size);
 	H5Eclear2(H5E_DEFAULT);
-	status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
+	status = H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i);
 	if (status<0) {
 	    H5_FAILED();
 	    puts("    Unable to insert object into global heap");
@@ -295,7 +296,7 @@ test_3 (hid_t fapl)
 
     /* Remove everything */
     for (i=0; i<1024; i++) {
-	status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i);
+	status = H5HG_remove (f, H5AC_ind_read_dxpl_id, obj+i);
 	if (status<0) {
 	    H5_FAILED();
 	    puts("    Unable to remove object");
@@ -364,7 +365,7 @@ test_4 (hid_t fapl)
 	size = i%30+100;
 	memset (out, 'A'+i%26, size);
 	H5Eclear2(H5E_DEFAULT);
-	status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
+	status = H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i);
 	if (status<0) {
 	    H5_FAILED();
 	    puts("    Unable to insert object into global heap");
@@ -378,7 +379,7 @@ test_4 (hid_t fapl)
 	 */
 	if (1==i%3) {
 	    H5Eclear2(H5E_DEFAULT);
-	    status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i-1);
+	    status = H5HG_remove (f, H5AC_ind_read_dxpl_id, obj+i-1);
 	    if (status<0) {
 		H5_FAILED();
 		puts("    Unable to remove object");
@@ -454,7 +455,7 @@ test_ooo_indices(hid_t fapl)
          * can be deleted. */
         for(j=1000*((~i&1)); j<1000*((~i&1)+1); j++) {
             H5Eclear2(H5E_DEFAULT);
-            status = H5HG_insert(f, H5P_DATASET_XFER_DEFAULT, sizeof(j), &j, &obj[j]);
+            status = H5HG_insert(f, H5AC_ind_read_dxpl_id, sizeof(j), &j, &obj[j]);
             if (status<0)
                 GHEAP_REPEATED_ERR("    Unable to insert object into global heap")
 
@@ -467,7 +468,7 @@ test_ooo_indices(hid_t fapl)
         if(i>0)
             for(j=1000*(i&1); j<1000*((i&1)+1); j++) {
                 H5Eclear2(H5E_DEFAULT);
-                status = H5HG_remove(f, H5P_DATASET_XFER_DEFAULT, &obj[j]);
+                status = H5HG_remove(f, H5AC_ind_read_dxpl_id, &obj[j]);
                 if (status<0)
                     GHEAP_REPEATED_ERR("    Unable to remove object from global heap");
             } /* end for */
@@ -489,7 +490,7 @@ test_ooo_indices(hid_t fapl)
 
     /* Read the objects to make sure the heap is still readable */
     for(i=0; i<1000; i++) {
-        if(NULL == H5HG_read(f, H5P_DATASET_XFER_DEFAULT, &obj[i], &j, NULL))
+        if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, &obj[i], &j, NULL))
             goto error;
         if(i != j) {
             H5_FAILED();
diff --git a/test/h5test.c b/test/h5test.c
index cbe067f..723ecdc 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -193,6 +193,107 @@ h5_clean_files(const char *base_name[], hid_t fapl)
 
 

 /*-------------------------------------------------------------------------
+ * Function:    h5_delete_test_file
+ *
+ * Purpose      Clean up temporary test files.
+ *
+ *              When a test calls h5_fixname() get a VFD-dependent
+ *              test file name, this function can be used to clean it up.
+ *
+ * Return:      void
+ *
+ *              Since this is a cleanup file, we don't care if it fails.
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_delete_test_file(const char *base_name, hid_t fapl)
+{
+    char filename[1024];        /* VFD-dependent filename to delete     */
+    char sub_filename[2048];    /* sub-files in multi & family VFDs     */
+    hid_t driver = -1;          /* VFD ID                               */
+
+    /* Get the VFD-dependent filename */
+    if(NULL == h5_fixname(base_name, fapl, filename, sizeof(filename)))
+        return;
+
+    driver = H5Pget_driver(fapl);
+
+    if(driver == H5FD_FAMILY) {
+        int j;
+        for(j = 0; /*void*/; j++) {
+            HDsnprintf(sub_filename, sizeof(sub_filename), filename, j);
+
+            /* If we can't access the file, it probably doesn't exist
+             * and we are done deleting the sub-files.
+             */
+            if(HDaccess(sub_filename, F_OK) < 0)
+                break;
+
+            HDremove(sub_filename);
+        } /* end for */
+    } else if(driver == H5FD_CORE) {
+        hbool_t backing;        /* Whether the core file has backing store */
+
+        H5Pget_fapl_core(fapl, NULL, &backing);
+
+        /* If the file was stored to disk with bacing store, remove it */
+        if(backing)
+            HDremove(filename);
+    } else if (driver == H5FD_MULTI) {
+        H5FD_mem_t mt;
+
+        HDassert(HDstrlen(multi_letters) == H5FD_MEM_NTYPES);
+
+        for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+            HDsnprintf(sub_filename, sizeof(sub_filename), "%s-%c.h5", filename, multi_letters[mt]);
+            HDremove(sub_filename);
+        } /* end for */
+    } else {
+        HDremove(filename);
+    } /* end if */
+
+    return;
+} /* end h5_delete_test_file() */
+
+

+/*-------------------------------------------------------------------------
+ * Function:    h5_delete_all_test_files
+ *
+ * Purpose      Clean up temporary test files.
+ *
+ *              When a test calls h5_fixname() get a VFD-dependent
+ *              test file name, this function can be used to clean it up.
+ *
+ *              This function takes an array of filenames that ends with
+ *              a NULL string and cleans them all.
+ *
+ * Return:      void
+ *
+ *              Since this is a cleanup file, we don't care if it fails.
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_delete_all_test_files(const char *base_name[], hid_t fapl)
+{
+    int i;                      /* iterator                             */
+
+    for(i = 0; base_name[i]; i++) {
+        h5_delete_test_file(base_name[i], fapl);
+    } /* end for */
+
+    return;
+} /* end h5_delete_all_test_files() */
+
+

+/*-------------------------------------------------------------------------
  * Function:  h5_cleanup
  *
  * Purpose:  Cleanup temporary test files.
@@ -226,6 +327,35 @@ h5_cleanup(const char *base_name[], hid_t fapl)
 
 

 /*-------------------------------------------------------------------------
+ * Function:    h5_test_shutdown
+ *
+ * Purpose:     Performs any special test cleanup required before the test
+ *              ends.
+ *
+ *              NOTE: This function should normally only be called once
+ *              in a given test, usually just before leaving main(). It
+ *              is intended for use in the single-file unit tests, not
+ *              testhdf5.
+ *
+ * Return:      void
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_test_shutdown(void)
+{
+
+    /* Restore the original error reporting routine */
+    h5_restore_err();
+
+    return;
+} /* end h5_test_shutdown() */
+
+

+/*-------------------------------------------------------------------------
  * Function:    h5_restore_err
  *
  * Purpose:     Restore the default error handler.
@@ -303,6 +433,39 @@ h5_reset(void)
 
 

 /*-------------------------------------------------------------------------
+ * Function:    h5_test_init
+ *
+ * Purpose:     Performs any special actions before the test begins.
+ *
+ *              NOTE: This function should normally only be called once
+ *              in a given test, usually at the beginning of main(). It
+ *              is intended for use in the single-file unit tests, not
+ *              testhdf5.
+ *
+ * Return:      void
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_test_init(void)
+{
+    HDfflush(stdout);
+    HDfflush(stderr);
+    H5close();
+
+    /* Save current error stack reporting routine and redirect to our local one */
+    HDassert(err_func == NULL);
+    H5Eget_auto2(H5E_DEFAULT, &err_func, NULL);
+    H5Eset_auto2(H5E_DEFAULT, h5_errors, NULL);
+
+    return;
+} /* end h5_test_init() */
+
+

+/*-------------------------------------------------------------------------
  * Function:  h5_fixname
  *
  * Purpose:  Create a file name from a file base name like `test' and
@@ -744,6 +907,137 @@ h5_fileaccess(void)
 
 

 /*-------------------------------------------------------------------------
+ * Function:    h5_get_vfd_fapl
+ *
+ * Purpose:     Returns a file access property list which is the default
+ *              fapl but with a file driver set according to the constant or
+ *              environment variable HDF5_DRIVER.
+ *
+ * Return:      Success:    A file access property list ID
+ *              Failure:    -1
+ *
+ * Programmer:  Dana Robinson
+ *              February 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+h5_get_vfd_fapl(void)
+{
+    const char  *env = NULL;    /* HDF5_DRIVER environment variable     */
+    const char  *tok = NULL;    /* strtok pointer                       */
+    char        buf[1024];      /* buffer for tokenizing HDF5_DRIVER    */
+    hid_t       fapl = -1;      /* fapl to be returned                  */
+
+    /* Get the environment variable, if it exists */
+    env = HDgetenv("HDF5_DRIVER");
+
+    /* Create a default fapl */
+    if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+        return -1;
+
+    /* If the environment variable was not set, just return
+     * the default fapl.
+     */
+    if(!env || !*env)
+        return fapl;
+
+    /* Get the first 'word' of the environment variable.
+     * If it's nothing (environment variable was whitespace)
+     * just return the default fapl.
+     */
+    HDstrncpy(buf, env, sizeof(buf));
+    HDmemset(buf, 0, sizeof(buf));
+    if(NULL == (tok = HDstrtok(buf, " \t\n\r")))
+        return fapl;
+
+    if(!HDstrcmp(tok, "sec2")) {
+        /* POSIX (section 2) read() and write() system calls */
+        if(H5Pset_fapl_sec2(fapl) < 0)
+            return -1;
+    } else if(!HDstrcmp(tok, "stdio")) {
+        /* Standard C fread() and fwrite() system calls */
+        if(H5Pset_fapl_stdio(fapl) < 0)
+            return -1;
+    } else if(!HDstrcmp(tok, "core")) {
+        /* In-memory driver settings (backing store on, 1 MB increment) */
+        if(H5Pset_fapl_core(fapl, (size_t)1, TRUE) < 0)
+            return -1;
+    } else if(!HDstrcmp(tok, "core_paged")) {
+        /* In-memory driver with write tracking and paging on */
+        if(H5Pset_fapl_core(fapl, (size_t)1, TRUE) < 0)
+            return -1;
+        if(H5Pset_core_write_tracking(fapl, TRUE, (size_t)4096) < 0)
+            return -1;
+     } else if(!HDstrcmp(tok, "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(tok, "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;
+            HDsprintf(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;
+        } /* end if */
+    } else if(!HDstrcmp(tok, "family")) {
+        /* Family of files, each 1MB and using the default driver */
+        hsize_t fam_size = 100*1024*1024; /*100 MB*/
+
+        /* Was a family size specified in the environment variable? */
+        if((tok = HDstrtok(NULL, " \t\n\r")))
+            fam_size = (hsize_t)(HDstrtod(tok, NULL) * 1024*1024);
+        if(H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT) < 0)
+            return -1;
+    } else if(!HDstrcmp(tok, "log")) {
+        /* Log file access */
+        unsigned log_flags = H5FD_LOG_LOC_IO | H5FD_LOG_ALLOC;
+
+        /* Were special log file flags specified in the environment variable? */
+        if((tok = HDstrtok(NULL, " \t\n\r")))
+            log_flags = (unsigned)HDstrtol(tok, NULL, 0);
+
+        if(H5Pset_fapl_log(fapl, NULL, log_flags, (size_t)0) < 0)
+            return -1;
+#ifdef H5_HAVE_DIRECT
+    } else if(!HDstrcmp(tok, "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;
+#endif
+    } else {
+        /* Unknown driver */
+        return -1;
+    } /* end if */
+
+    return fapl;
+} /* end h5_get_vfd_fapl() */
+
+

+/*-------------------------------------------------------------------------
  * Function:  h5_no_hwconv
  *
  * Purpose:  Turn off hardware data type conversions.
diff --git a/test/h5test.h b/test/h5test.h
index a91da5d..450099a 100644
--- a/test/h5test.h
+++ b/test/h5test.h
@@ -142,6 +142,23 @@ H5TEST_DLL int print_func(const char *format, ...);
 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);
 
+/* Functions that will replace VFD-dependent functions that violate
+ * the single responsibility principle. Unlike their predecessors,
+ * these new functions do not have hidden side effects.
+ */
+/* h5_fileaccess() replacement */
+H5TEST_DLL hid_t h5_get_vfd_fapl(void);
+
+/* h5_clean_files() replacements */
+H5TEST_DLL void h5_delete_test_file(const char *base_name, hid_t fapl);
+H5TEST_DLL void h5_delete_all_test_files(const char *base_name[], hid_t fapl);
+
+/* h5_reset() replacement */
+H5TEST_DLL void h5_test_init(void);
+
+/* h5_cleanup() replacement */
+H5TEST_DLL void h5_test_shutdown(void);
+
 /* Routines for operating on the list of tests (for the "all in one" tests) */
 H5TEST_DLL void TestUsage(void);
 H5TEST_DLL void AddTest(const char *TheName, void (*TheCall) (void),
diff --git a/test/lheap.c b/test/lheap.c
index 60b29f3..9c07ec6 100644
--- a/test/lheap.c
+++ b/test/lheap.c
@@ -87,12 +87,12 @@ main(void)
         H5Eprint2(H5E_DEFAULT, stdout);
         goto error;
     }
-    if(FAIL == H5HL_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)0, &heap_addr/*out*/)) {
+    if(FAIL == H5HL_create(f, H5AC_ind_read_dxpl_id, (size_t)0, &heap_addr/*out*/)) {
         H5_FAILED();
         H5Eprint2(H5E_DEFAULT, stdout);
         goto error;
     }
-    if (NULL == (heap = H5HL_protect(f, H5P_DATASET_XFER_DEFAULT, heap_addr, H5AC__NO_FLAGS_SET))) {
+    if (NULL == (heap = H5HL_protect(f, H5AC_ind_read_dxpl_id, heap_addr, H5AC__NO_FLAGS_SET))) {
         H5_FAILED();
         H5Eprint2(H5E_DEFAULT, stdout);
         goto error;
@@ -104,7 +104,7 @@ main(void)
         if(j > 4)
             buf[j] = '\0';
 
-        if(UFAIL == (obj[i] = H5HL_insert(f, H5P_DATASET_XFER_DEFAULT, heap, strlen(buf) + 1, buf))) {
+        if(UFAIL == (obj[i] = H5HL_insert(f, H5AC_ind_read_dxpl_id, heap, strlen(buf) + 1, buf))) {
             H5_FAILED();
             H5Eprint2(H5E_DEFAULT, stdout);
             goto error;
@@ -144,7 +144,7 @@ main(void)
         if(j > 4)
             buf[j] = '\0';
 
-        if (NULL == (heap = H5HL_protect(f, H5P_DATASET_XFER_DEFAULT, heap_addr, H5AC__READ_ONLY_FLAG))) {
+        if (NULL == (heap = H5HL_protect(f, H5AC_ind_read_dxpl_id, heap_addr, H5AC__READ_ONLY_FLAG))) {
             H5_FAILED();
             H5Eprint2(H5E_DEFAULT, stdout);
             goto error;
diff --git a/test/links.c b/test/links.c
index 7e63bfa..a791c89 100644
--- a/test/links.c
+++ b/test/links.c
@@ -140,7 +140,7 @@ const char *FILENAME[] = {
 #define H5L_DIM1 100
 #define H5L_DIM2 100
 
-#define FILTER_FILESIZE_MAX_FRACTION 0.9F
+#define FILTER_FILESIZE_MAX_FRACTION (double)0.9F
 
 /* Creation order macros */
 #define CORDER_GROUP_NAME       "corder_group"
@@ -552,8 +552,27 @@ cklinks(hid_t fapl, hbool_t new_format)
 	HDputs("    expected file location.");
 	TEST_ERROR
     } /* end if */
+    if(H5Lexists(file, "/", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
     if(H5Lexists(file, "d1", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
     if(H5Lexists(file, "grp1/hard", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
+    if(H5Lexists(file, "/grp1", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
+    if(H5Lexists(file, "/grp1/hard", H5P_DEFAULT) != TRUE) FAIL_STACK_ERROR
+    H5E_BEGIN_TRY {
+        status = H5Lexists(file, "no_grp1/hard", H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(status >= 0) {
+	H5_FAILED();
+	HDputs("    H5Lexists() should have failed for a path with missing components.");
+	TEST_ERROR
+    } /* end if */
+    H5E_BEGIN_TRY {
+        status = H5Lexists(file, "/no_grp1/hard", H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(status >= 0) {
+	H5_FAILED();
+	HDputs("    H5Lexists() should have failed for a path with missing components.");
+	TEST_ERROR
+    } /* end if */
 
     /* Symbolic link */
     if(H5Oget_info_by_name(file, "grp1/soft", &oinfo2, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
@@ -7380,7 +7399,7 @@ error:
     } H5E_END_TRY
 
     return -1;
-} /* end efc_open_twice */
+} /* end external_open_twice() */
 
 

 /*-------------------------------------------------------------------------
@@ -11085,6 +11104,7 @@ link_info_by_idx(hid_t fapl)
     char        filename[NAME_BUF_SIZE];/* File name */
     char        tmpname[NAME_BUF_SIZE]; /* Temporary link name */
     unsigned    u;                      /* Local index variable */
+    ssize_t     name_len;               /* Length of name */
     herr_t      ret;                    /* Generic return value */
 
     /* Loop over creating hard or soft links */
@@ -11126,9 +11146,9 @@ link_info_by_idx(hid_t fapl)
             } H5E_END_TRY;
             if(ret >= 0) TEST_ERROR
             H5E_BEGIN_TRY {
-                ret = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)0, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
+                name_len = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)0, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
             } H5E_END_TRY;
-            if(ret >= 0) TEST_ERROR
+            if(name_len >= 0) TEST_ERROR
 
             /* Create several links, up to limit of compact form */
             for(u = 0; u < max_compact; u++) {
@@ -11168,9 +11188,9 @@ link_info_by_idx(hid_t fapl)
             } H5E_END_TRY;
             if(ret >= 0) TEST_ERROR
             H5E_BEGIN_TRY {
-                ret = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
+                name_len = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
             } H5E_END_TRY;
-            if(ret >= 0) TEST_ERROR
+            if(name_len >= 0) TEST_ERROR
 
             /* Create more links, to push group into dense form */
             for(; u < (max_compact * 2); u++) {
@@ -11210,9 +11230,9 @@ link_info_by_idx(hid_t fapl)
             } H5E_END_TRY;
             if(ret >= 0) TEST_ERROR
             H5E_BEGIN_TRY {
-                ret = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
+                name_len = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
             } H5E_END_TRY;
-            if(ret >= 0) TEST_ERROR
+            if(name_len >= 0) TEST_ERROR
 
             /* Close the group */
             if(H5Gclose(group_id) < 0) TEST_ERROR
@@ -11267,6 +11287,7 @@ link_info_by_idx_old(hid_t fapl)
     char        tmpname[NAME_BUF_SIZE]; /* Temporary link name */
     char        tmpval[NAME_BUF_SIZE];  /* Temporary link value */
     unsigned    u;                      /* Local index variable */
+    ssize_t     name_len;               /* Length of name */
     herr_t      ret;                    /* Generic return value */
 
     /* Loop over creating hard or soft links */
@@ -11378,9 +11399,9 @@ link_info_by_idx_old(hid_t fapl)
         } H5E_END_TRY;
         if(ret >= 0) TEST_ERROR
         H5E_BEGIN_TRY {
-            ret = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
+            name_len = H5Lget_name_by_idx(group_id, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT);
         } H5E_END_TRY;
-        if(ret >= 0) TEST_ERROR
+        if(name_len >= 0) TEST_ERROR
 
         /* Verify state of group */
         if(H5G__has_stab_test(group_id) != TRUE) TEST_ERROR
@@ -12138,7 +12159,7 @@ link_iterate_check(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order,
     iter_info->order = order;
     iter_info->stop = -1;
     iter_info->ncalled = 0;
-    iter_info->curr = order != H5_ITER_DEC ? skip : ((max_links - 1) - skip);
+    iter_info->curr = (int64_t)(order != H5_ITER_DEC ? skip : ((max_links - 1) - skip));
     HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
     if(H5Literate(group_id, idx_type, order, &skip, link_iterate_cb, iter_info) < 0) TEST_ERROR
 
@@ -12166,11 +12187,11 @@ link_iterate_check(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order,
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     /* Skip over some links in group, with H5Giterate */
-    iter_info->nskipped = gskip = max_links / 2;
+    iter_info->nskipped = (unsigned)(gskip = (int)(max_links / 2));
     iter_info->order = order;
     iter_info->stop = -1;
     iter_info->ncalled = 0;
-    iter_info->curr = order != H5_ITER_DEC ? (unsigned)gskip : ((max_links - 1) - gskip);
+    iter_info->curr = order != H5_ITER_DEC ? (unsigned)gskip : ((max_links - 1) - (unsigned)gskip);
     HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
     if(H5Giterate(group_id, ".", &gskip, group_iterate_cb, iter_info) < 0) TEST_ERROR
 
@@ -12211,7 +12232,7 @@ link_iterate_check(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order,
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     /* Iterate over links in group, stopping in the middle, with H5Giterate() */
-    iter_info->nskipped = gskip = 0;
+    iter_info->nskipped = (unsigned)(gskip = 0);
     iter_info->order = order;
     iter_info->stop = 3;
     iter_info->ncalled = 0;
@@ -12568,7 +12589,7 @@ link_iterate_old_check(hid_t group_id, H5_iter_order_t order,
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     /* Iterate over links in group, with H5Giterate */
-    iter_info->nskipped = gskip = 0;
+    iter_info->nskipped = (unsigned)(gskip = 0);
     iter_info->order = order;
     iter_info->stop = -1;
     iter_info->ncalled = 0;
@@ -12588,7 +12609,7 @@ link_iterate_old_check(hid_t group_id, H5_iter_order_t order,
     iter_info->order = order;
     iter_info->stop = -1;
     iter_info->ncalled = 0;
-    iter_info->curr = order != H5_ITER_DEC ? skip : ((max_links - 1) - skip);
+    iter_info->curr = (int64_t)(order != H5_ITER_DEC ? skip : ((max_links - 1) - skip));
     HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
     if(H5Literate(group_id, H5_INDEX_NAME, order, &skip, link_iterate_old_cb, iter_info) < 0) TEST_ERROR
 
@@ -12616,11 +12637,11 @@ link_iterate_old_check(hid_t group_id, H5_iter_order_t order,
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     /* Skip over some links in group, with H5Giterate */
-    iter_info->nskipped = gskip = max_links / 2;
+    iter_info->nskipped = (unsigned)(gskip = (int)(max_links / 2));
     iter_info->order = order;
     iter_info->stop = -1;
     iter_info->ncalled = 0;
-    iter_info->curr = order != H5_ITER_DEC ? (unsigned)gskip : ((max_links - 1) - gskip);
+    iter_info->curr = order != H5_ITER_DEC ? (unsigned)gskip : ((max_links - 1) - (unsigned)gskip);
     HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
     if(H5Giterate(group_id, ".", &gskip, group_iterate_old_cb, iter_info) < 0) TEST_ERROR
 
@@ -12661,7 +12682,7 @@ link_iterate_old_check(hid_t group_id, H5_iter_order_t order,
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     /* Iterate over links in group, stopping in the middle, with H5Giterate() */
-    iter_info->nskipped = gskip = 0;
+    iter_info->nskipped = (unsigned)(gskip = 0);
     iter_info->order = order;
     iter_info->stop = 3;
     iter_info->ncalled = 0;
diff --git a/test/mf.c b/test/mf.c
index 6b5cfac..a36b1ec 100644
--- a/test/mf.c
+++ b/test/mf.c
@@ -234,7 +234,7 @@ test_mf_eoa(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* nothing should be changed in meta_aggr */
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &ma_size);
@@ -244,7 +244,7 @@ test_mf_eoa(const char *env_h5_drvr, hid_t fapl)
         if (addr1 < (haddr_t)file_size)
             TEST_ERROR
 
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* nothing should be changed in meta_aggr */
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &ma_size);
@@ -273,8 +273,8 @@ test_mf_eoa(const char *env_h5_drvr, hid_t fapl)
         if(NULL == (f = (H5F_t *)H5I_object(file)))
             FAIL_STACK_ERROR
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -377,7 +377,7 @@ test_mf_eoa_shrink(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         if (addr < (haddr_t)file_size)
             TEST_ERROR
@@ -409,7 +409,7 @@ test_mf_eoa_shrink(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         /* should succeed */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30) <= 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30) <= 0)
             TEST_ERROR
 
         /* nothing should be changed in meta_aggr */
@@ -453,13 +453,13 @@ test_mf_eoa_shrink(const char *env_h5_drvr, hid_t fapl)
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         if (addr < (haddr_t)file_size)
             TEST_ERROR
 
         /* should not succeed in shrinking */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30 - 10) > 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30 - 10) > 0)
             TEST_ERROR
 
         /* nothing should be changed in meta_aggr */
@@ -503,7 +503,7 @@ test_mf_eoa_shrink(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         /* should not succeed in shrinking */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30 + 10) > 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30 + 10) > 0)
             TEST_ERROR
 
         /* nothing should be changed in meta_aggr */
@@ -546,7 +546,7 @@ test_mf_eoa_shrink(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         /* should succeed in shrinking */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr+10, (hsize_t)(TEST_BLOCK_SIZE30 - 10)) <= 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr+10, (hsize_t)(TEST_BLOCK_SIZE30 - 10)) <= 0)
             TEST_ERROR
 
         /* nothing should be changed in meta_aggr */
@@ -656,7 +656,7 @@ test_mf_eoa_extend(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         if (addr < (haddr_t)file_size)
             TEST_ERROR
 
@@ -685,7 +685,7 @@ test_mf_eoa_extend(const char *env_h5_drvr, hid_t fapl)
             FAIL_STACK_ERROR
 
         /* should succeed */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)addr, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)TEST_BLOCK_SIZE50);
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)addr, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(was_extended <= 0)
             TEST_ERROR
@@ -734,7 +734,7 @@ test_mf_eoa_extend(const char *env_h5_drvr, hid_t fapl)
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(addr < (haddr_t)file_size)
             TEST_ERROR
@@ -744,7 +744,7 @@ test_mf_eoa_extend(const char *env_h5_drvr, hid_t fapl)
         if(new_ma_addr != ma_addr)
             TEST_ERROR
 
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)addr, (hsize_t)(TEST_BLOCK_SIZE30-10), (hsize_t)(TEST_BLOCK_SIZE50));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)addr, (hsize_t)(TEST_BLOCK_SIZE30-10), (hsize_t)(TEST_BLOCK_SIZE50));
 
         /* should not succeed */
         if(was_extended > 0)
@@ -866,19 +866,19 @@ test_mf_tmp(const char *env_h5_drvr, hid_t fapl)
 
         /* Reading & writing with a temporary address value should fail */
         H5E_BEGIN_TRY {
-            status = H5F_block_read(f, H5FD_MEM_SUPER, tmp_addr, sizeof(buf), H5P_DATASET_XFER_DEFAULT, &buf);
+            status = H5F_block_read(f, H5FD_MEM_SUPER, tmp_addr, sizeof(buf), H5AC_ind_read_dxpl_id, &buf);
         } H5E_END_TRY;
         if(status >= 0)
             TEST_ERROR
         H5E_BEGIN_TRY {
-            status = H5F_block_write(f, H5FD_MEM_SUPER, tmp_addr, sizeof(buf), H5P_DATASET_XFER_DEFAULT, &buf);
+            status = H5F_block_write(f, H5FD_MEM_SUPER, tmp_addr, sizeof(buf), H5AC_ind_read_dxpl_id, &buf);
         } H5E_END_TRY;
         if(status >= 0)
             TEST_ERROR
 
         /* Freeing a temporary address value should fail */
         H5E_BEGIN_TRY {
-            status = H5MF_xfree(f, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, tmp_addr, (hsize_t)TEST_BLOCK_SIZE30);
+            status = H5MF_xfree(f, H5FD_MEM_SUPER, H5AC_ind_read_dxpl_id, tmp_addr, (hsize_t)TEST_BLOCK_SIZE30);
         } H5E_END_TRY;
         if(status >= 0)
             TEST_ERROR
@@ -911,7 +911,7 @@ test_mf_tmp(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate 1/3 of the file as normal address space */
-        if(HADDR_UNDEF == (norm_addr = H5MF_alloc(f, H5FD_MEM_DRAW, H5P_DATASET_XFER_DEFAULT, (hsize_t)(maxaddr / 3))))
+        if(HADDR_UNDEF == (norm_addr = H5MF_alloc(f, H5FD_MEM_DRAW, H5AC_ind_read_dxpl_id, (hsize_t)(maxaddr / 3))))
             FAIL_STACK_ERROR
         if(H5F_IS_TMP_ADDR(f, norm_addr))
             TEST_ERROR
@@ -925,13 +925,13 @@ test_mf_tmp(const char *env_h5_drvr, hid_t fapl)
 
         /* Test that pushing normal space allocation into temporary space fails */
         H5E_BEGIN_TRY {
-            check_addr = H5MF_alloc(f, H5FD_MEM_DRAW, H5P_DATASET_XFER_DEFAULT, (hsize_t)(maxaddr / 3));
+            check_addr = H5MF_alloc(f, H5FD_MEM_DRAW, H5AC_ind_read_dxpl_id, (hsize_t)(maxaddr / 3));
         } H5E_END_TRY;
         if(H5F_addr_defined(check_addr))
             TEST_ERROR
 
         /* Free the normal block (so the file doesn't blow up to a huge size) */
-        if(H5MF_xfree(f, H5FD_MEM_DRAW, H5P_DATASET_XFER_DEFAULT, norm_addr, (hsize_t)(maxaddr / 3)) < 0)
+        if(H5MF_xfree(f, H5FD_MEM_DRAW, H5AC_ind_read_dxpl_id, norm_addr, (hsize_t)(maxaddr / 3)) < 0)
             FAIL_STACK_ERROR
 
         /* Close the file */
@@ -1014,7 +1014,7 @@ test_mf_fs_start(hid_t fapl)
     /* Start up free-space manager */
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1131,7 +1131,7 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1144,13 +1144,13 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1162,7 +1162,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of 30 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
     /* Verify that the allocated block is section A in free-space */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1176,7 +1176,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Free the block to free-space */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
 
     state.tot_space += TEST_BLOCK_SIZE30;
     state.tot_sect_count += 1;
@@ -1185,7 +1185,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Remove section A from free-space */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
             (hsize_t)TEST_BLOCK_SIZE30, (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -1218,7 +1218,7 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1231,13 +1231,13 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1249,7 +1249,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of 20 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE20));
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE20));
 
     /* Verify that the allocated block is section A in free-space manager */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1262,7 +1262,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Free the block to free-space manager */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE20));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE20));
 
     /* Still 1 section in free-space because of merging */
     state.tot_space += TEST_BLOCK_SIZE20;
@@ -1270,7 +1270,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Remove section A from free-space manager */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)TEST_BLOCK_SIZE30, (H5FS_section_info_t **)&node) < 0)
 	FAIL_STACK_ERROR
 
@@ -1303,7 +1303,7 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1316,13 +1316,13 @@ test_mf_fs_alloc_free(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1338,7 +1338,7 @@ test_mf_fs_alloc_free(hid_t fapl)
      * Since free-space manager cannot fulfull the request,
      * the block is obtained from file allocation
      */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE40));
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE40));
 
     /* Verify that the allocated block is not section A in free-space */
     if (addr == TEST_BLOCK_ADDR70)
@@ -1349,7 +1349,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Remove section A from free-space */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)TEST_BLOCK_SIZE30, (H5FS_section_info_t **)&node) < 0)
 	FAIL_STACK_ERROR
 
@@ -1362,7 +1362,7 @@ test_mf_fs_alloc_free(hid_t fapl)
         TEST_ERROR
 
     /* Free the block of size 40 to free-space */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE40));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE40));
 
     /*
      * Free-space info is the same.
@@ -1489,7 +1489,7 @@ test_mf_fs_extend(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1502,13 +1502,13 @@ test_mf_fs_extend(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1520,7 +1520,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of 30 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
     /* Verify that the allocated block is section A in free-space manager */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1537,7 +1537,7 @@ test_mf_fs_extend(hid_t fapl)
     sect_node2 = H5MF_sect_simple_new((haddr_t)TEST_BLOCK_ADDR100, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Add section B to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     state.tot_space += TEST_BLOCK_SIZE50;
@@ -1548,7 +1548,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Try to extend the allocated block */
-    was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)TEST_BLOCK_SIZE50);
+    was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* should succeed */
     if(was_extended <= 0)
@@ -1563,7 +1563,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Free the extended block to free-space manager */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
 
     /* Verify that the extended block is back into free-space */
     state.tot_space += TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50;
@@ -1574,7 +1574,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Remove the extended block */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50), (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -1607,7 +1607,7 @@ test_mf_fs_extend(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1620,13 +1620,13 @@ test_mf_fs_extend(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1638,7 +1638,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of 30 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
     /* Verify that the allocated block is section A in free-space manager */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1655,7 +1655,7 @@ test_mf_fs_extend(hid_t fapl)
     sect_node2 = H5MF_sect_simple_new((haddr_t)TEST_BLOCK_ADDR100, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Add section B to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     state.tot_space += TEST_BLOCK_SIZE50;
@@ -1666,7 +1666,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Try to extend the allocated block */
-    was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)(TEST_BLOCK_SIZE50+10));
+    was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)(TEST_BLOCK_SIZE50+10));
 
     /* Should not be able to extend the allocated block */
     if(was_extended)
@@ -1677,7 +1677,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Free the allocated block A to free-space */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
 
     /* the returned section A is merged with section B in free-space */
     /* rest of the info remains the same */
@@ -1687,7 +1687,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Remove the merged sections A & B from free-space */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50), (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -1720,7 +1720,7 @@ test_mf_fs_extend(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1733,13 +1733,13 @@ test_mf_fs_extend(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1751,7 +1751,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of 30 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
     /* Verify that the allocated block is section A in free-space manager */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1768,7 +1768,7 @@ test_mf_fs_extend(hid_t fapl)
     sect_node2 = H5MF_sect_simple_new((haddr_t)TEST_BLOCK_ADDR100, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Add section B to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     state.tot_space += TEST_BLOCK_SIZE50;
@@ -1779,7 +1779,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Try to extend the allocated block */
-    was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)(TEST_BLOCK_SIZE40));
+    was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)TEST_BLOCK_SIZE30, (hsize_t)(TEST_BLOCK_SIZE40));
 
     /* Should succeed in extending the allocated block */
     if(was_extended <=0)
@@ -1791,7 +1791,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Free the extended block  */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE40));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE40));
 
     /* rest info is same, the extended section returned is merged with the section in free-space */
     state.tot_space += (TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE40);
@@ -1800,7 +1800,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Remove the merged sections A & B from free-space */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50), (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -1833,7 +1833,7 @@ test_mf_fs_extend(hid_t fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -1846,13 +1846,13 @@ test_mf_fs_extend(hid_t fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A of size=20 to free-space */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node1, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -1864,7 +1864,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Allocate a block of size=20 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE30-10));
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE30-10));
 
     /* Verify that the allocated block is section A in free-space manager */
     if (addr != TEST_BLOCK_ADDR70)
@@ -1881,7 +1881,7 @@ test_mf_fs_extend(hid_t fapl)
     sect_node2 = H5MF_sect_simple_new((haddr_t)TEST_BLOCK_ADDR100, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Add section B to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node2, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     state.tot_space += TEST_BLOCK_SIZE50;
@@ -1892,7 +1892,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Try to extend the allocated block */
-    was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)(TEST_BLOCK_SIZE30-10), (hsize_t)TEST_BLOCK_SIZE50);
+    was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)TEST_BLOCK_ADDR70, (hsize_t)(TEST_BLOCK_SIZE30-10), (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Should not succeed in extending the allocated block */
     if(was_extended)
@@ -1903,7 +1903,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Free the allocated block */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE30-10));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE30-10));
 
     state.tot_space += (TEST_BLOCK_SIZE30-10);
     state.tot_sect_count += 1;
@@ -1913,7 +1913,7 @@ test_mf_fs_extend(hid_t fapl)
         TEST_ERROR
 
     /* Remove section A from free-space manger */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)(TEST_BLOCK_SIZE30-10), (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -1922,7 +1922,7 @@ test_mf_fs_extend(hid_t fapl)
 	TEST_ERROR
 
     /* Remove section B from free-space manager */
-    if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+    if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		    (hsize_t)TEST_BLOCK_SIZE50, (H5FS_section_info_t **)&node) < 0)
 	TEST_ERROR
 
@@ -2025,7 +2025,7 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
 
         type = H5FD_MEM_SUPER;
 
-        if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+        if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
             TEST_ERROR
 
         if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -2034,7 +2034,7 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate a section from meta_aggr */
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
@@ -2043,17 +2043,17 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
 
         /* Construct user data for callbacks */
         udata.f = f;
-        udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+        udata.dxpl_id = H5AC_ind_read_dxpl_id;
         udata.alloc_type = type;
         udata.allow_sect_absorb = TRUE;
 	udata.allow_eoa_shrink_only = FALSE;
 
         /* When adding, meta_aggr is absorbed onto the beginning of the section */
-        if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+        if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
                 FAIL_STACK_ERROR
 
         /* Verify that the section did absorb the aggregator */
-        if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+        if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
                         (hsize_t)TEST_BLOCK_SIZE2048, (H5FS_section_info_t **)&node) < 0)
             TEST_ERROR
 
@@ -2069,7 +2069,7 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
         f->shared->meta_aggr.size = ma_size;
 
         /* Remove section from meta_aggr */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2095,7 +2095,7 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
 
         type = H5FD_MEM_SUPER;
 
-        if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+        if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
             TEST_ERROR
 
         if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -2104,29 +2104,29 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate a section from meta_aggr */
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         /* Allocate a section from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Add a section to free-space that adjoins the beginning of meta_aggr */
         sect_node = H5MF_sect_simple_new((haddr_t)addr, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Construct user data for callbacks */
         udata.f = f;
-        udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+        udata.dxpl_id = H5AC_ind_read_dxpl_id;
         udata.alloc_type = type;
         udata.allow_sect_absorb = TRUE;
         udata.allow_eoa_shrink_only = FALSE;
 
         /* When adding, meta_aggr is absorbed onto the end of the section */
-        if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+        if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
                 FAIL_STACK_ERROR
 
         /* Verify that the section did absorb the aggregator */
-        if(H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+        if(H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
                         (hsize_t)(ma_size+TEST_BLOCK_SIZE30), (H5FS_section_info_t **)&node) < 0)
             TEST_ERROR
 
@@ -2142,9 +2142,9 @@ test_mf_fs_absorb(const char *env_h5_drvr, hid_t fapl)
         f->shared->meta_aggr.size = ma_size;
 
         /* Remove section from meta_aggr */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
         /* Remove section from sdata_aggr */
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2224,14 +2224,14 @@ test_mf_aggr_alloc1(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate second block from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr2+TEST_BLOCK_SIZE50) != ma_addr)
@@ -2259,8 +2259,8 @@ test_mf_aggr_alloc1(const char *env_h5_drvr, hid_t fapl)
             FAIL_STACK_ERROR
 
         /* Free the two blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2354,13 +2354,13 @@ test_mf_aggr_alloc2(const char *env_h5_drvr, hid_t fapl)
             FAIL_STACK_ERROR
 
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr2+TEST_BLOCK_SIZE50) != ma_addr)
@@ -2369,7 +2369,7 @@ test_mf_aggr_alloc2(const char *env_h5_drvr, hid_t fapl)
         if (ma_size != (TEST_BLOCK_SIZE2048 - (TEST_BLOCK_SIZE30 + TEST_BLOCK_SIZE50)))
             TEST_ERROR
 
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2058);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2058);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
@@ -2399,7 +2399,7 @@ test_mf_aggr_alloc2(const char *env_h5_drvr, hid_t fapl)
         if(NULL == (f = (H5F_t *)H5I_object(file)))
             FAIL_STACK_ERROR
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50+TEST_BLOCK_SIZE2058);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50+TEST_BLOCK_SIZE2058);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2509,14 +2509,14 @@ test_mf_aggr_alloc3(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate second block from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
@@ -2527,14 +2527,14 @@ test_mf_aggr_alloc3(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr1+TEST_BLOCK_SIZE30) != sdata_addr)
             TEST_ERROR
         if (sdata_size != (TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30)) TEST_ERROR
 
         /* Allocate third block, which is from  file allocation not from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE2058));
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE2058));
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
 
@@ -2544,7 +2544,7 @@ test_mf_aggr_alloc3(const char *env_h5_drvr, hid_t fapl)
         if ((new_ma_addr != ma_addr) || (new_ma_size != ma_size)) TEST_ERROR
 
         /* Allocate fourth block, which should be from meta_aggr */
-        addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if ((addr4+TEST_BLOCK_SIZE50) != ma_addr)
@@ -2553,11 +2553,11 @@ test_mf_aggr_alloc3(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Free all the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE2058);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr4, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE2058);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr4, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2670,7 +2670,7 @@ test_mf_aggr_alloc4(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
@@ -2681,19 +2681,19 @@ test_mf_aggr_alloc4(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr1+TEST_BLOCK_SIZE30) != sdata_addr)
             TEST_ERROR
 
         /* Allocate second block from sdata_aggr */
-        saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30));
+        saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30));
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if (saddr2+(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30) != sdata_addr)
             TEST_ERROR
 
         /* Allocate third block from sdata_aggr */
-        saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
 
         if ((saddr3+TEST_BLOCK_SIZE50) != sdata_addr)
@@ -2702,7 +2702,7 @@ test_mf_aggr_alloc4(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate second block of 2058, which is from file allocation, not from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2058);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2058);
 
         if (addr2 != sdata_addr)
             TEST_ERROR
@@ -2718,11 +2718,11 @@ test_mf_aggr_alloc4(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Free all the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE2058);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr2, (hsize_t)TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr3, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE2058);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr2, (hsize_t)TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr3, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2816,14 +2816,14 @@ test_mf_aggr_alloc5(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate second block from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if (addr2+TEST_BLOCK_SIZE50 != ma_addr)
@@ -2832,7 +2832,7 @@ test_mf_aggr_alloc5(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate third block from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1970);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1970);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
 
         if (addr3 != ma_addr) TEST_ERROR
@@ -2841,9 +2841,9 @@ test_mf_aggr_alloc5(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Free all the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -2949,14 +2949,14 @@ test_mf_aggr_alloc6(const char *env_h5_drvr, hid_t fapl)
         type = H5FD_MEM_SUPER;
 
         /* Allocate first block from meta_aggr */
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate second block from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if (addr2+TEST_BLOCK_SIZE50 != ma_addr)
@@ -2966,14 +2966,14 @@ test_mf_aggr_alloc6(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr1+TEST_BLOCK_SIZE30) != sdata_addr) TEST_ERROR
         if (sdata_size != (TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30)) TEST_ERROR
 
         /* Allocate third block from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1970);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1970);
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
 
@@ -2994,10 +2994,10 @@ test_mf_aggr_alloc6(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Free all the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3113,13 +3113,13 @@ test_mf_aggr_alloc7(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate the first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate the second block from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if (addr2+TEST_BLOCK_SIZE50 != ma_addr)
@@ -3129,13 +3129,13 @@ test_mf_aggr_alloc7(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate the first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr1+TEST_BLOCK_SIZE30) != sdata_addr)
             TEST_ERROR
 
         /* Allocate the second block from sdata_aggr */
-        saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30);
+        saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30);
 
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr2+(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30)) != sdata_addr)
@@ -3143,7 +3143,7 @@ test_mf_aggr_alloc7(const char *env_h5_drvr, hid_t fapl)
         if (sdata_size != 0) TEST_ERROR
 
         /* Allocate the third block from sdata_aggr */
-        saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr3+TEST_BLOCK_SIZE50) != sdata_addr)
@@ -3152,7 +3152,7 @@ test_mf_aggr_alloc7(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Allocate the third block from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1970);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1970);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if (addr3 != sdata_addr) TEST_ERROR
@@ -3174,12 +3174,12 @@ test_mf_aggr_alloc7(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* Free all the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr2, (hsize_t)(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30));
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr3, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr2, (hsize_t)(TEST_BLOCK_SIZE2048 - TEST_BLOCK_SIZE30));
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr3, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3274,7 +3274,7 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate the first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
@@ -3286,7 +3286,7 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         new_addr = addr - 10;
 
         /* Try to extend the block by an amount < (% * aggr->alloc_size) */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
 
         /* should succeed */
         if(!was_extended)
@@ -3299,10 +3299,10 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         if (new_ma_size != (f->shared->meta_aggr.alloc_size - TEST_BLOCK_SIZE50)) TEST_ERROR
 
         /* Free the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Try to extend the block by an amount > (% * aggr->alloc_size) but amount < aggr->alloc_size */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE700));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE700));
 
         /* should succeed */
         if(!was_extended)
@@ -3315,10 +3315,10 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         if (new_ma_size != (f->shared->meta_aggr.alloc_size * 2 - TEST_BLOCK_SIZE700)) TEST_ERROR
 
         /* Free the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE700);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE700);
 
         /* Try to extend the block by an amount > (% * aggr->alloc_size) but amount > aggr->alloc_size */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE2058));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE2058));
 
         /* should succeed */
         if(!was_extended)
@@ -3331,7 +3331,7 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         if (new_ma_size != f->shared->meta_aggr.size) TEST_ERROR
 
         /* Free the allocated blocks */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE2058);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE2058);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3365,14 +3365,14 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate the first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate the first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr+TEST_BLOCK_SIZE50) != sdata_addr)
             TEST_ERROR
@@ -3384,7 +3384,7 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         new_addr = addr - 10;
 
         /* should be able to fulfill request from the aggreqator itself */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
 
         if(!was_extended)
             TEST_ERROR
@@ -3400,8 +3400,8 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         f->shared->meta_aggr.addr = ma_addr;
         f->shared->meta_aggr.size = ma_size;
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3435,14 +3435,14 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate first block from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate first block from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &sdata_addr, &sdata_size);
         if ((saddr+TEST_BLOCK_SIZE50) != sdata_addr)
             TEST_ERROR
@@ -3454,7 +3454,7 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         new_addr = addr - 10;
 
         /* unable to fulfill request from the aggreqator itself */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)new_addr, (hsize_t)10, (hsize_t)(TEST_BLOCK_SIZE50));
 
         if(was_extended)
             TEST_ERROR
@@ -3468,8 +3468,8 @@ test_mf_aggr_extend(const char *env_h5_drvr, hid_t fapl)
         f->shared->meta_aggr.addr = ma_addr;
         f->shared->meta_aggr.size = ma_size;
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3567,7 +3567,7 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate block A from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
         ma_addr = new_ma_addr - TEST_BLOCK_SIZE30;
 
@@ -3575,7 +3575,7 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
             TEST_ERROR
 
         /* should succeed */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30) <= 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30) <= 0)
             TEST_ERROR
 
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
@@ -3614,7 +3614,7 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate block A from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr) TEST_ERROR
@@ -3622,12 +3622,12 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate block B from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), NULL, &sdata_size);
 
         /* should succeed */
-        if(H5MF_try_shrink(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE50) <= 0)
+        if(H5MF_try_shrink(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE50) <= 0)
             TEST_ERROR
 
         H5MF_aggr_query(f, &(f->shared->sdata_aggr), &new_sdata_addr, &new_sdata_size);
@@ -3639,7 +3639,7 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
         if (new_ma_addr != ma_addr) TEST_ERROR
         if (new_ma_size != (ma_size)) TEST_ERROR
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3673,35 +3673,35 @@ test_mf_aggr_absorb(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate block A from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
 
         if ((addr1+TEST_BLOCK_SIZE30) != ma_addr)
             TEST_ERROR
 
         /* Allocate block B from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr2+TEST_BLOCK_SIZE50) != ma_addr)
             TEST_ERROR
 
         /* Allocate block C from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &ma_addr, &ma_size);
         if ((addr3+TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50) != ma_addr)
             TEST_ERROR
 
         /* should not succeed */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50) > 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50) > 0)
             TEST_ERROR
 
         /* aggregator info should be the same as before */
         H5MF_aggr_query(f, &(f->shared->meta_aggr), &new_ma_addr, &new_ma_size);
         if (new_ma_addr != ma_addr) TEST_ERROR
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)(TEST_BLOCK_SIZE30+TEST_BLOCK_SIZE50));
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3826,7 +3826,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from file allocation */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -3850,7 +3850,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
              mis_align = alignment - tmp;
         accum += (mis_align + TEST_BLOCK_SIZE50);
 
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -3867,8 +3867,8 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
                 TEST_ERROR
         }
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -3902,7 +3902,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* allocate a block of 50 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* address should be aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -3923,7 +3923,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             FAIL_STACK_ERROR
 
         /* shrink the block */
-        if(H5MF_try_shrink(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE50) <= 0)
+        if(H5MF_try_shrink(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE50) <= 0)
             TEST_ERROR
 
         if(H5Fclose(file) < 0)
@@ -3957,7 +3957,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* allocate a block of 50 */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* address should be aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -3978,7 +3978,7 @@ test_mf_align_eoa(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             FAIL_STACK_ERROR
 
         /* try to extend the block */
-        was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)addr1, (hsize_t)TEST_BLOCK_SIZE50, (hsize_t)TEST_BLOCK_SIZE30);
+        was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)addr1, (hsize_t)TEST_BLOCK_SIZE50, (hsize_t)TEST_BLOCK_SIZE30);
 
         if (was_extended <=0) TEST_ERROR
 
@@ -4083,7 +4083,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -4095,13 +4095,13 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -4113,7 +4113,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         TEST_ERROR
 
     /* Allocate a block of 50 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
     /* Verify that the allocated block is section A in free-space */
     if (addr != (haddr_t)alignment) TEST_ERROR
@@ -4127,7 +4127,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         TEST_ERROR
 
     /* Free the block to free-space */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)TEST_BLOCK_SIZE50);
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)TEST_BLOCK_SIZE50);
 
     state.tot_space += TEST_BLOCK_SIZE50;
     state.tot_sect_count += 1;
@@ -4153,7 +4153,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
     type = H5FD_MEM_SUPER;
 
-    if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
         TEST_ERROR
 
     if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -4165,13 +4165,13 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
     /* Construct user data for callbacks */
     udata.f = f;
-    udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    udata.dxpl_id = H5AC_ind_read_dxpl_id;
     udata.alloc_type = type;
     udata.allow_sect_absorb = TRUE;
     udata.allow_eoa_shrink_only = FALSE;
 
     /* Add section A to free-space manager */
-    if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+    if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
 	    FAIL_STACK_ERROR
 
     HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -4183,7 +4183,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         TEST_ERROR
 
     /* Allocate a block of 600 */
-    addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE600);
+    addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE600);
 
     /* Verify that the allocated block is aligned */
     if (addr % alignment) TEST_ERROR
@@ -4197,7 +4197,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         TEST_ERROR
 
     /* try to extend the block */
-    was_extended = H5MF_try_extend(f, H5P_DATASET_XFER_DEFAULT, type, (haddr_t)addr, (hsize_t)TEST_BLOCK_SIZE600, (hsize_t)TEST_BLOCK_SIZE200);
+    was_extended = H5MF_try_extend(f, H5AC_ind_read_dxpl_id, type, (haddr_t)addr, (hsize_t)TEST_BLOCK_SIZE600, (hsize_t)TEST_BLOCK_SIZE200);
 
     if (was_extended <=0) TEST_ERROR
 
@@ -4208,7 +4208,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         TEST_ERROR
 
     /* Free the block to free-space manager */
-    H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr, (hsize_t)(TEST_BLOCK_SIZE600+TEST_BLOCK_SIZE200));
+    H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr, (hsize_t)(TEST_BLOCK_SIZE600+TEST_BLOCK_SIZE200));
 
     /* only 1 section in free-space because of merging */
     state.tot_space += (TEST_BLOCK_SIZE600+TEST_BLOCK_SIZE200);
@@ -4243,7 +4243,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         type = H5FD_MEM_SUPER;
 
-        if(H5MF_alloc_start(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+        if(H5MF_alloc_start(f, H5AC_ind_read_dxpl_id, type) < 0)
             TEST_ERROR
 
         if (f->shared->fs_state[type] != H5F_FS_STATE_OPEN)
@@ -4255,13 +4255,13 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Construct user data for callbacks */
         udata.f = f;
-        udata.dxpl_id = H5P_DATASET_XFER_DEFAULT;
+        udata.dxpl_id = H5AC_ind_read_dxpl_id;
         udata.alloc_type = type;
         udata.allow_sect_absorb = TRUE;
 	udata.allow_eoa_shrink_only = FALSE;
 
         /* Add section A to free-space manager */
-        if (H5FS_sect_add(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
+        if (H5FS_sect_add(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type], (H5FS_section_info_t *)sect_node, H5FS_ADD_RETURNED_SPACE, &udata))
                 FAIL_STACK_ERROR
 
         HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -4276,7 +4276,7 @@ test_mf_align_fs(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
          * Since free-space manager cannot fulfull the request because of alignment,
          * the block is obtained from file allocation
          */
-        addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)(TEST_BLOCK_SIZE40));
+        addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)(TEST_BLOCK_SIZE40));
 
         /* Verify that the allocated block is aligned */
         if (addr % alignment)
@@ -4472,7 +4472,7 @@ test_mf_align_alloc1(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -4496,7 +4496,7 @@ test_mf_align_alloc1(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 50 from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -4518,7 +4518,7 @@ test_mf_align_alloc1(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         if ((tmp = ma_addr % alignment))
             mis_align = alignment - tmp;
 
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE80);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE80);
 
         /* Verify that the allocated block is aligned */
         if (addr3 % alignment) TEST_ERROR
@@ -4541,7 +4541,7 @@ test_mf_align_alloc1(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 1970 from meta_aggr */
-        addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1970);
+        addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1970);
 
         /* Verify that the allocated block is aligned */
         if (addr4 % alignment) TEST_ERROR
@@ -4562,10 +4562,10 @@ test_mf_align_alloc1(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         if(check_stats(f, f->shared->fs_man[type], &state))
             TEST_ERROR
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE80);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE80);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE1970);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -4730,7 +4730,7 @@ test_mf_align_alloc2(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -4753,7 +4753,7 @@ test_mf_align_alloc2(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
         if ((tmp = ma_addr % alignment))
             mis_align = alignment - tmp;
 
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -4789,7 +4789,7 @@ test_mf_align_alloc2(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* fragment for alignment of block 30 for sdata_aggr is freed to free-space */
         if (mis_align) {
@@ -4822,7 +4822,7 @@ test_mf_align_alloc2(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 80 from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE80);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE80);
 
         /* Verify that the allocated block is aligned */
         if (addr3 % alignment) TEST_ERROR
@@ -4850,10 +4850,10 @@ test_mf_align_alloc2(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 		TEST_ERROR
 	}
 
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE50);
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE80);
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE80);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         if(H5Fclose(file) < 0)
             FAIL_STACK_ERROR
@@ -5072,7 +5072,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -5095,7 +5095,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 50 from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -5130,7 +5130,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (saddr1 % alignment) TEST_ERROR
@@ -5151,7 +5151,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 50 from sdata_aggr */
-        saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (saddr2 % alignment) TEST_ERROR
@@ -5172,7 +5172,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 80 from sdata_aggr */
-        saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE80);
+        saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE80);
 
         /* Verify that the allocated block is aligned */
         if (saddr3 % alignment) TEST_ERROR
@@ -5194,7 +5194,7 @@ test_mf_align_alloc3(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 1034 for meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1034);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1034);
 
         /* Verify that the allocated block is aligned */
         if (addr3 % alignment) TEST_ERROR
@@ -5375,7 +5375,7 @@ test_mf_align_alloc4(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -5398,7 +5398,7 @@ test_mf_align_alloc4(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 2058 from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2058);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2058);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -5423,7 +5423,7 @@ test_mf_align_alloc4(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 5 from meta_aggr */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5);
 
         /* fragment for alignment of block 5 is freed to free-space */
         if (mis_align) {
@@ -5588,7 +5588,7 @@ test_mf_align_alloc5(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -5612,7 +5612,7 @@ test_mf_align_alloc5(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (saddr1 % alignment) TEST_ERROR
@@ -5633,7 +5633,7 @@ test_mf_align_alloc5(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 2058 from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2058);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2058);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -5854,7 +5854,7 @@ test_mf_align_alloc6(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from meta_aggr */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (addr1 % alignment) TEST_ERROR
@@ -5878,7 +5878,7 @@ test_mf_align_alloc6(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
 
         /* Allocate a block of 30 from sdata_aggr */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Verify that the allocated block is aligned */
         if (saddr1 % alignment) TEST_ERROR
@@ -5899,7 +5899,7 @@ test_mf_align_alloc6(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 50 from sdata_aggr */
-        saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Verify that the allocated block is aligned */
         if (saddr2 % alignment) TEST_ERROR
@@ -5920,7 +5920,7 @@ test_mf_align_alloc6(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 80 from sdata_aggr */
-        saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE80);
+        saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE80);
 
         /* Verify that the allocated block is aligned */
         if (saddr3 % alignment) TEST_ERROR
@@ -5942,7 +5942,7 @@ test_mf_align_alloc6(const char *env_h5_drvr, hid_t fapl, hid_t new_fapl)
             mis_align = alignment - tmp;
 
         /* Allocate a block of 2058 from meta_aggr */
-        addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2058);
+        addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2058);
 
         /* Verify that the allocated block is aligned */
         if (addr2 % alignment) TEST_ERROR
@@ -6023,25 +6023,25 @@ test_mf_fs_persist(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 6 blocks */
     type = H5FD_MEM_SUPER;
-    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+    if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE6)))
+    if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE6)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3, #5 to H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6060,7 +6060,7 @@ test_mf_fs_persist(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get info for free-space manager */
@@ -6075,13 +6075,13 @@ test_mf_fs_persist(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve block #3 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr3)
 	TEST_ERROR
 
     /* Retrieve block #1 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr1)
 	TEST_ERROR
@@ -6102,7 +6102,7 @@ test_mf_fs_persist(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Retrieve block #5 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr5)
         TEST_ERROR
@@ -6149,25 +6149,25 @@ test_mf_fs_gone(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 4 blocks */
     type = H5FD_MEM_SUPER;
-    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3 to H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     /* Retrieve block #1, #3 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6186,7 +6186,7 @@ test_mf_fs_gone(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Put block #3 to H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
         FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6205,7 +6205,7 @@ test_mf_fs_gone(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get info for H5FD_MEM_SUPER free-space manager */
@@ -6219,7 +6219,7 @@ test_mf_fs_gone(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Put block #4 to H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr4, (hsize_t)TEST_BLOCK_SIZE4) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr4, (hsize_t)TEST_BLOCK_SIZE4) < 0)
         FAIL_STACK_ERROR
 
     /* The H5FD_MEM_SUPER free-space manager will go away at H5MF_close() */
@@ -6284,36 +6284,36 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 4 blocks of type H5FD_MEM_SUPER */
     type = H5FD_MEM_SUPER;
-    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3 into H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     /* Allocate 4 blocks of type H5FD_MEM_DRAW */
     stype = H5FD_MEM_DRAW;
-    if(HADDR_UNDEF == (saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr4 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (saddr4 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3 into H5FD_MEM_DRAW free-space manager */
-    if(H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6332,7 +6332,7 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6346,7 +6346,7 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve block #1 from H5FD_MEM_SUPER free-space manager; block #2 still in free-space */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr1)
 	TEST_ERROR
@@ -6356,7 +6356,7 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_DRAW free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, stype) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, stype) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6370,13 +6370,13 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve blocks #1 from H5FD_MEM_DRAW free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
     if(tmp_addr != saddr1)
 	TEST_ERROR
 
     /* Retrieve blocks #3 from H5FD_MEM_DRAW free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
     if(tmp_addr != saddr3)
 	TEST_ERROR
@@ -6385,19 +6385,19 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 4 blocks of type H5FD_MEM_BTREE */
     btype = H5FD_MEM_BTREE;
-    if(HADDR_UNDEF == (baddr5 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+    if(HADDR_UNDEF == (baddr5 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr6 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE6)))
+    if(HADDR_UNDEF == (baddr6 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE6)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr7 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE7)))
+    if(HADDR_UNDEF == (baddr7 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE7)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr8 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE8)))
+    if(HADDR_UNDEF == (baddr8 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE8)))
 	FAIL_STACK_ERROR
 
     /* Put block #5 & #7 into H5FD_MEM_BTREE free-space manager */
-    if(H5MF_xfree(f, btype, H5P_DATASET_XFER_DEFAULT, baddr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
+    if(H5MF_xfree(f, btype, H5AC_ind_read_dxpl_id, baddr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, btype, H5P_DATASET_XFER_DEFAULT, baddr7, (hsize_t)TEST_BLOCK_SIZE7) < 0)
+    if(H5MF_xfree(f, btype, H5AC_ind_read_dxpl_id, baddr7, (hsize_t)TEST_BLOCK_SIZE7) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6420,7 +6420,7 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6432,13 +6432,13 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve block #3 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr3)
 	TEST_ERROR
 
     /* Retrieve block #7 from H5FD_MEM_BTREE free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE7)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE7)))
 	FAIL_STACK_ERROR
     if(tmp_addr != baddr7)
 	TEST_ERROR
@@ -6460,7 +6460,7 @@ test_mf_fs_split(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6519,36 +6519,36 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 4 blocks of type H5FD_MEM_SUPER */
     type = H5FD_MEM_SUPER;
-    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3 into H5FD_MEM_SUPER free-space manager */
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     /* Allocate 4 blocks of type H5FD_MEM_DRAW */
     stype = H5FD_MEM_DRAW;
-    if(HADDR_UNDEF == (saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr3 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (saddr3 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (saddr4 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (saddr4 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1, #3 into H5FD_MEM_DRAW free-space manager */
-    if(H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6567,7 +6567,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6581,7 +6581,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve block #1 from H5FD_MEM_SUPER free-space manager; block #2 still in free-space */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr1)
 	TEST_ERROR
@@ -6591,7 +6591,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_DRAW free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, stype) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, stype) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6605,32 +6605,32 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve blocks #1 from H5FD_MEM_DRAW free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
     if(tmp_addr != saddr1)
 	TEST_ERROR
 
     /* Retrieve blocks #3 from H5FD_MEM_DRAW free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
     if(tmp_addr != saddr3)
 	TEST_ERROR
 
     /* Allocate 4 blocks of type H5FD_MEM_BTREE */
     btype = H5FD_MEM_BTREE;
-    if(HADDR_UNDEF == (baddr1 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (baddr1 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr2 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (baddr2 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr3 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (baddr3 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (baddr4 = H5MF_alloc(f, btype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+    if(HADDR_UNDEF == (baddr4 = H5MF_alloc(f, btype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	FAIL_STACK_ERROR
 
     /* Put block #1 & #3 into H5FD_MEM_BTREE free-space manager */
-    if(H5MF_xfree(f, btype, H5P_DATASET_XFER_DEFAULT, baddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+    if(H5MF_xfree(f, btype, H5AC_ind_read_dxpl_id, baddr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	FAIL_STACK_ERROR
-    if(H5MF_xfree(f, btype, H5P_DATASET_XFER_DEFAULT, baddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+    if(H5MF_xfree(f, btype, H5AC_ind_read_dxpl_id, baddr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6649,7 +6649,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_SUPER free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6661,7 +6661,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Retrieve block #3 from H5FD_MEM_SUPER free-space manager */
-    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+    if(HADDR_UNDEF == (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	FAIL_STACK_ERROR
     if(tmp_addr != addr3)
 	TEST_ERROR
@@ -6675,7 +6675,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
         TEST_ERROR
 
     /* Start up H5FD_MEM_BTREE free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, btype) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, btype) < 0)
         FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6690,13 +6690,13 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 
     /* Allocate 2 blocks of type H5FD_MEM_GHEAP */
     gtype = H5FD_MEM_GHEAP;
-    if(HADDR_UNDEF == (gaddr2 = H5MF_alloc(f, gtype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+    if(HADDR_UNDEF == (gaddr2 = H5MF_alloc(f, gtype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	FAIL_STACK_ERROR
-    if(HADDR_UNDEF == (gaddr1 = H5MF_alloc(f, gtype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+    if(HADDR_UNDEF == (gaddr1 = H5MF_alloc(f, gtype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	FAIL_STACK_ERROR
 
     /* Put block #2 into H5FD_MEM_GHEAP free-space manager */
-    if(H5MF_xfree(f, gtype, H5P_DATASET_XFER_DEFAULT, gaddr2, (hsize_t)TEST_BLOCK_SIZE2) < 0)
+    if(H5MF_xfree(f, gtype, H5AC_ind_read_dxpl_id, gaddr2, (hsize_t)TEST_BLOCK_SIZE2) < 0)
 	FAIL_STACK_ERROR
 
     if(H5Fclose(file) < 0)
@@ -6713,15 +6713,15 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
     /* If H5FD_MEM_SUPER is there, should not find block #1 & #3 */
     if(H5F_addr_defined(f->shared->fs_addr[type])) {
 	/* Start up H5FD_MEM_SUPER free-space manager */
-	if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+	if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
 	    FAIL_STACK_ERROR
 
-	if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+	if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		(hsize_t)TEST_BLOCK_SIZE1, (H5FS_section_info_t **)&node)) < 0)
 	    FAIL_STACK_ERROR
 	if(node_found) TEST_ERROR
 
-	if((node_found = H5FS_sect_find(f, H5P_DATASET_XFER_DEFAULT, f->shared->fs_man[type],
+	if((node_found = H5FS_sect_find(f, H5AC_ind_read_dxpl_id, f->shared->fs_man[type],
 		(hsize_t)TEST_BLOCK_SIZE3, (H5FS_section_info_t **)&node)) < 0)
 	    FAIL_STACK_ERROR
 	if(node_found) TEST_ERROR
@@ -6732,7 +6732,7 @@ test_mf_fs_multi(hid_t fapl_new, hid_t fcpl)
 	TEST_ERROR
 
     /* Start up H5FD_MEM_GHEAP free-space manager */
-    if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, gtype) < 0)
+    if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, gtype) < 0)
 	FAIL_STACK_ERROR
 
     /* Get free-space info */
@@ -6977,25 +6977,25 @@ test_filespace_strategy_threshold(hid_t fapl_new)
 
 	    /* Allocate 6 blocks */
 	    type = H5FD_MEM_SUPER;
-	    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+	    if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 		FAIL_STACK_ERROR
-	    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+	    if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 		FAIL_STACK_ERROR
-	    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+	    if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 		FAIL_STACK_ERROR
-	    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+	    if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 		FAIL_STACK_ERROR
-	    if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+	    if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 		FAIL_STACK_ERROR
-	    if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE6)))
+	    if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE6)))
 		FAIL_STACK_ERROR
 
 	    /* Put block #1, #3, #5 to H5FD_MEM_SUPER free-space manager */
-	    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+	    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 		FAIL_STACK_ERROR
-	    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+	    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 		FAIL_STACK_ERROR
-	    if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
+	    if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
 		FAIL_STACK_ERROR
 
 	    /* Retrieve the total amount of free space and # of free-space sections */
@@ -7026,7 +7026,7 @@ test_filespace_strategy_threshold(hid_t fapl_new)
 			    TEST_ERROR
 
 			/* Open the free-space manager */
-			if(H5MF_alloc_open(f, H5P_DATASET_XFER_DEFAULT, type) < 0)
+			if(H5MF_alloc_open(f, H5AC_ind_read_dxpl_id, type) < 0)
 			    FAIL_STACK_ERROR
 
 			/* Retrieve the total amount of free space and # of free-space sections */
@@ -7040,7 +7040,7 @@ test_filespace_strategy_threshold(hid_t fapl_new)
 
 			/* Retrieve block #5 from H5FD_MEM_SUPER free-space manager */
 			if(HADDR_UNDEF ==
-			        (tmp_addr = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+			        (tmp_addr = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 			    FAIL_STACK_ERROR
 
 			/* Should be the same as before */
@@ -7129,23 +7129,23 @@ test_filespace_gone(hid_t fapl_new)
 
 	/* Allocate 6 blocks */
 	type = H5FD_MEM_SUPER;
-	if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE1)))
+	if(HADDR_UNDEF == (addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE1)))
 	    FAIL_STACK_ERROR
-	if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE2)))
+	if(HADDR_UNDEF == (addr2 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE2)))
 	    FAIL_STACK_ERROR
-	if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE3)))
+	if(HADDR_UNDEF == (addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE3)))
 	    FAIL_STACK_ERROR
-	if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE4)))
+	if(HADDR_UNDEF == (addr4 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE4)))
 	    FAIL_STACK_ERROR
-	if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE5)))
+	if(HADDR_UNDEF == (addr5 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE5)))
 	    FAIL_STACK_ERROR
-	if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE6)))
+	if(HADDR_UNDEF == (addr6 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE6)))
 	    FAIL_STACK_ERROR
 
 	/* Put block #3, #5 to H5FD_MEM_SUPER free-space manager */
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr3, (hsize_t)TEST_BLOCK_SIZE3) < 0)
 	    FAIL_STACK_ERROR
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr5, (hsize_t)TEST_BLOCK_SIZE5) < 0)
 	    FAIL_STACK_ERROR
 
 	HDmemset(&state, 0, sizeof(frspace_state_t));
@@ -7157,17 +7157,17 @@ test_filespace_gone(hid_t fapl_new)
 	    TEST_ERROR
 
 	/* section #2 is less than threshold but is merged into section #3 */
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr2, (hsize_t)TEST_BLOCK_SIZE2) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr2, (hsize_t)TEST_BLOCK_SIZE2) < 0)
 	    FAIL_STACK_ERROR
 
 	state.tot_space += TEST_BLOCK_SIZE2;
 	if(check_stats(f, f->shared->fs_man[type], &state))
 	    TEST_ERROR
 
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr4, (hsize_t)TEST_BLOCK_SIZE4) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr4, (hsize_t)TEST_BLOCK_SIZE4) < 0)
 	    FAIL_STACK_ERROR
 
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr6, (hsize_t)TEST_BLOCK_SIZE6) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr6, (hsize_t)TEST_BLOCK_SIZE6) < 0)
 	    FAIL_STACK_ERROR
 
 	/* all sections should be shrunk away except section #1 */
@@ -7176,7 +7176,7 @@ test_filespace_gone(hid_t fapl_new)
 	    TEST_ERROR
 
 	/* section #1 is less than threshold but is shrunk away */
-	if(H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
+	if(H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE1) < 0)
 	    FAIL_STACK_ERROR
 
 	/* free-space manager should be empty */
@@ -7396,29 +7396,29 @@ test_dichotomy(const char *env_h5_drvr, hid_t fapl)
 
         /* Allocate the first block of type H5FD_MEM_SUPER */
         type = H5FD_MEM_SUPER;
-        addr1 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr1 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Allocate the second block of type H5FD_MEM_SUPER */
-        H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE50);
+        H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE50);
 
         /* Allocate the first block of type H5FD_MEM_DRAW */
         stype = H5FD_MEM_DRAW;
-        saddr1 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr1 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
 	/* Free the first block of type H5FD_MEM_SUPER */
-        H5MF_xfree(f, type, H5P_DATASET_XFER_DEFAULT, addr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, type, H5AC_ind_read_dxpl_id, addr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Allocate the second block of type H5FD_MEM_DRAW */
-        saddr2 = H5MF_alloc(f, stype, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        saddr2 = H5MF_alloc(f, stype, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
 	/* Verify that saddr1 is not addr1 */
 	if(saddr2 == addr1) TEST_ERROR
 
 	/* Free the first block of type H5FD_MEM_DRAW */
-        H5MF_xfree(f, stype, H5P_DATASET_XFER_DEFAULT, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
+        H5MF_xfree(f, stype, H5AC_ind_read_dxpl_id, saddr1, (hsize_t)TEST_BLOCK_SIZE30);
 
         /* Allocate the third block of type H5FD_MEM_SUPER */
-        addr3 = H5MF_alloc(f, type, H5P_DATASET_XFER_DEFAULT, (hsize_t)TEST_BLOCK_SIZE30);
+        addr3 = H5MF_alloc(f, type, H5AC_ind_read_dxpl_id, (hsize_t)TEST_BLOCK_SIZE30);
 
 	/* Verify that addr3 is not saddr1 */
 	if(addr3 == saddr1) TEST_ERROR
diff --git a/test/objcopy.c b/test/objcopy.c
index 4c10602..f4b6a3e 100644
--- a/test/objcopy.c
+++ b/test/objcopy.c
@@ -218,7 +218,7 @@ addr_insert(H5O_info_t *oi)
  *
  *-------------------------------------------------------------------------
  */
-static hbool_t
+static H5_ATTR_PURE hbool_t
 addr_lookup(H5O_info_t *oi)
 {
     size_t  n;
@@ -533,8 +533,12 @@ test_copy_attach_attribute_vl(hid_t loc_id)
     ret_value = 0;
 
 done:
-    if(tid >0 && sid > 0)
-        H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    if(tid >0 && sid > 0) {
+        hid_t dxpl_id = H5Pcreate(H5P_DATASET_XFER);
+        H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL);
+        H5Dvlen_reclaim(tid, sid, dxpl_id, buf);
+        H5Pclose(dxpl_id);
+    }
     if(sid > 0)
         H5Sclose(sid);
     if(tid > 0)
@@ -2386,9 +2390,7 @@ test_copy_dataset_compound(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t
 
     TESTING("H5Ocopy(): compound dataset");
 
-#ifdef H5_CLEAR_MEMORY
     HDmemset(buf, 0, sizeof(buf));
-#endif /* H5_CLEAR_MEMORY */
     for(i = 0; i < DIM_SIZE_1; i++) {
         buf[i].a = i;
         buf[i].d = (double)1.0F / (double)(i + 1);
@@ -5030,6 +5032,7 @@ test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_
     hid_t tid = -1;                             /* Datatype ID */
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -5113,7 +5116,12 @@ test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -5129,6 +5137,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Sclose(sid);
     	H5Fclose(fid_dst);
@@ -5160,6 +5169,7 @@ test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hsize_t chunk_dim1d[1] = {CHUNK_SIZE_1};    /* Chunk dimensions */
@@ -5289,7 +5299,12 @@ test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -5305,6 +5320,8 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
+    	H5Pclose(pid);
     	H5Tclose(tid);
     	H5Sclose(sid);
     	H5Fclose(fid_dst);
@@ -5336,6 +5353,7 @@ test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -5426,7 +5444,12 @@ test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -5442,6 +5465,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Sclose(sid);
     	H5Fclose(fid_dst);
@@ -5589,6 +5613,7 @@ test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     hid_t tid = -1;                             /* Datatype ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     hsize_t dim2d[2];                           /* Dataset dimensions */
     hsize_t chunk_dim2d[2] ={CHUNK_SIZE_1, CHUNK_SIZE_2};             /* Chunk dimensions */
     hvl_t buf[DIM_SIZE_1][DIM_SIZE_2];          /* Buffer for writing data */
@@ -5688,7 +5713,12 @@ test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     if(H5Fclose(fid_dst) < 0) TEST_ERROR
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -5707,6 +5737,7 @@ error:
     	H5Dclose(did);
     	H5Pclose(pid);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Sclose(sid);
     	H5Fclose(fid_dst);
@@ -7396,6 +7427,7 @@ test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -7495,7 +7527,12 @@ test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid_copy, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid_copy, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid_copy) < 0) TEST_ERROR
@@ -7512,6 +7549,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid_copy);
     	H5Sclose(sid);
@@ -7543,6 +7581,7 @@ test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
     hid_t tid = -1, tid_copy=-1;                /* Datatype ID */
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -7635,7 +7674,12 @@ test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid_copy, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid_copy, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid_copy) < 0) TEST_ERROR
@@ -7651,6 +7695,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid_copy);
     	H5Sclose(sid);
@@ -7683,6 +7728,7 @@ test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -7783,7 +7829,12 @@ test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid_copy, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid_copy, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid_copy) < 0) TEST_ERROR
@@ -7800,6 +7851,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid_copy);
     	H5Sclose(sid);
@@ -7832,6 +7884,7 @@ test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -7933,7 +7986,12 @@ test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid_copy, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid_copy, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid_copy) < 0) TEST_ERROR
@@ -7950,6 +8008,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid_copy, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid_copy);
     	H5Sclose(sid);
@@ -7982,6 +8041,7 @@ test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j, k;                       /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -8088,7 +8148,12 @@ test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     if(H5Fclose(fid_dst) < 0) TEST_ERROR
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid2, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid2, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -8105,6 +8170,8 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
+    	H5Pclose(pid);
     	H5Tclose(tid);
     	H5Tclose(tid2);
     	H5Sclose(sid);
@@ -8137,6 +8204,7 @@ test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, h
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j, k;                       /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -8242,7 +8310,12 @@ test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, h
     if(H5Fclose(fid_dst) < 0) TEST_ERROR
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid2, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid2, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -8259,6 +8332,8 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
+    	H5Pclose(pid);
     	H5Tclose(tid);
     	H5Tclose(tid2);
     	H5Sclose(sid);
@@ -8291,6 +8366,7 @@ test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j, k;                       /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -8435,7 +8511,12 @@ test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid2, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid2, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -8453,6 +8534,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid2);
     	H5Sclose(sid);
@@ -8485,6 +8567,7 @@ test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j, k;                       /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hvl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -8592,7 +8675,12 @@ test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fap
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid2, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid2, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid) < 0) TEST_ERROR
@@ -8610,6 +8698,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid2, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
     	H5Tclose(tid);
     	H5Tclose(tid2);
     	H5Sclose(sid);
@@ -8652,6 +8741,7 @@ test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t did = -1;                             /* Dataset ID */
     hid_t did2 = -1;                            /* Dataset ID */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     cmpd_vl_t buf[DIM_SIZE_1];                  /* Buffer for writing data */
@@ -8741,7 +8831,12 @@ test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl,
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid2) < 0) TEST_ERROR
@@ -8758,6 +8853,7 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+        H5Pclose(dxpl_id);
         H5Tclose(tid2);
     	H5Tclose(tid);
     	H5Sclose(sid);
@@ -8790,6 +8886,7 @@ test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     hsize_t chunk_dim1d[1] = {CHUNK_SIZE_1};    /* Chunk dimensions */
@@ -8887,7 +8984,12 @@ test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid2) < 0) TEST_ERROR
@@ -8904,6 +9006,8 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+        H5Pclose(dxpl_id);
+        H5Pclose(pid);
         H5Tclose(tid2);
     	H5Tclose(tid);
     	H5Sclose(sid);
@@ -8936,6 +9040,7 @@ test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
     hid_t sid = -1;                             /* Dataspace ID */
     hid_t pid = -1;                             /* Dataset creation property list ID */
     hid_t did = -1, did2 = -1;                  /* Dataset IDs */
+    hid_t dxpl_id = -1;                         /* Dataset transfer property list ID */
     unsigned int i, j;                          /* Local index variables */
     hsize_t dim1d[1];                           /* Dataset dimensions */
     cmpd_vl_t buf[DIM_SIZE_1];                      /* Buffer for writing data */
@@ -9032,7 +9137,12 @@ test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl
 
 
     /* Reclaim vlen buffer */
-    if(H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf) < 0) TEST_ERROR
+    if(H5Tdetect_class(tid, H5T_VLEN) == TRUE) {
+        if((dxpl_id = H5Pcreate(H5P_DATASET_XFER)) < 0) TEST_ERROR
+        if(H5Pset_vlen_mem_manager(dxpl_id, NULL, NULL, NULL, NULL) < 0) TEST_ERROR
+        if(H5Dvlen_reclaim(tid, sid, dxpl_id, buf) < 0) TEST_ERROR
+        if(H5Pclose(dxpl_id) < 0) TEST_ERROR
+    } /* end if */
 
     /* close datatype */
     if(H5Tclose(tid2) < 0) TEST_ERROR
@@ -9049,6 +9159,8 @@ error:
     	H5Dclose(did2);
     	H5Dclose(did);
         H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, buf);
+    	H5Pclose(dxpl_id);
+    	H5Pclose(pid);
         H5Tclose(tid2);
     	H5Tclose(tid);
     	H5Sclose(sid);
@@ -13483,6 +13595,16 @@ main(void)
 
     puts ("All object copying tests passed.");
 
+    /* call H5Pclose(fapl2) to mask property list management bug.
+     *
+     * Needless to say, this bug must be fixed properly, but we 
+     * will sweep it under the rug for now.
+     *
+     * To expose the bug, delete this call, and run with either split
+     * or multi file driver.
+     */
+    H5Pclose(fapl2);
+
     h5_cleanup(FILENAME, fapl);
 
     return 0;
diff --git a/test/ohdr.c b/test/ohdr.c
index 295d149..0da6181 100644
--- a/test/ohdr.c
+++ b/test/ohdr.c
@@ -19,7 +19,6 @@
 #include "h5test.h"
 #include "H5srcdir.h"
 #include "H5Iprivate.h"
-
 /*
  * This file needs to access private datatypes from the H5O package.
  * This file also needs to access the object header testing code.
@@ -77,75 +76,77 @@ test_cont(char *filename, hid_t fapl)
     HDmemset(&oh_locB, 0, sizeof(oh_locB));
 
     /* Create the file to operate on */
-    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
-    if(NULL == (f = (H5F_t *)H5I_object(file))) FAIL_STACK_ERROR
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        FAIL_STACK_ERROR
+    if(NULL == (f = (H5F_t *)H5I_object(file)))
+        FAIL_STACK_ERROR
     if (H5AC_ignore_tags(f) < 0) {
-	H5_FAILED();
-	H5Eprint2(H5E_DEFAULT, stdout);
-	goto error;
-    }
+        H5_FAILED();
+        H5Eprint2(H5E_DEFAULT, stdout);
+        goto error;
+    } /* end if */
 
-    if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)H5O_MIN_SIZE, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_locA/*out*/) < 0)
+    if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)H5O_MIN_SIZE, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_locA/*out*/) < 0)
             FAIL_STACK_ERROR
 
-    if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)H5O_MIN_SIZE, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_locB/*out*/) < 0)
+    if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)H5O_MIN_SIZE, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_locB/*out*/) < 0)
             FAIL_STACK_ERROR
 
     time_new = 11111111;
 
-    if(H5O_msg_create(&oh_locA, H5O_NAME_ID, 0, 0, &long_name, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locA, H5O_NAME_ID, 0, 0, &long_name, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
-    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
-    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5O_msg_create(&oh_locA, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locA, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+    if(H5O_msg_create(&oh_locB, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
 
-    if(H5O_msg_create(&oh_locA, H5O_NAME_ID, 0, 0, &short_name, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_msg_create(&oh_locA, H5O_NAME_ID, 0, 0, &short_name, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
 
-    if(1 != H5O_link(&oh_locA, 1, H5P_DATASET_XFER_DEFAULT))
+    if(1 != H5O_link(&oh_locA, 1, H5AC_ind_read_dxpl_id))
         FAIL_STACK_ERROR
-    if(1 != H5O_link(&oh_locB, 1, H5P_DATASET_XFER_DEFAULT))
+    if(1 != H5O_link(&oh_locB, 1, H5AC_ind_read_dxpl_id))
+        FAIL_STACK_ERROR
+    if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
+    if(H5O_expunge_chunks_test(&oh_locA, H5AC_ind_read_dxpl_id) < 0)
         FAIL_STACK_ERROR
-    if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
-    if(H5O_expunge_chunks_test(&oh_locA, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
 
-    if(H5O_get_hdr_info(&oh_locA, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_get_hdr_info(&oh_locA, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
+        FAIL_STACK_ERROR
     nchunks = hdr_info.nchunks;
 
     /* remove the 1st H5O_NAME_ID message */
-    if(H5O_msg_remove(&oh_locA, H5O_NAME_ID, 0, FALSE, H5P_DATASET_XFER_DEFAULT) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_msg_remove(&oh_locA, H5O_NAME_ID, 0, FALSE, H5AC_ind_read_dxpl_id) < 0)
+        FAIL_STACK_ERROR
 
-    if(H5O_get_hdr_info(&oh_locA, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
-	FAIL_STACK_ERROR
+    if(H5O_get_hdr_info(&oh_locA, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
+        FAIL_STACK_ERROR
 
     if(hdr_info.nchunks >= nchunks)
-	TEST_ERROR
+        TEST_ERROR
 
     if(H5O_close(&oh_locA) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(H5O_close(&oh_locB) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(H5Fclose(file) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     PASSED();
 
 
-    return 0;
+    return SUCCEED;
 
 error:
     H5E_BEGIN_TRY {
@@ -154,8 +155,8 @@ error:
         H5Fclose(file);
     } H5E_END_TRY;
 
-    return -1;
-} /* test_cont() */
+    return FAIL;
+} /* end test_cont() */
 
 /*
  *  Verify that object headers are held in the cache until they are linked
@@ -197,7 +198,7 @@ test_ohdr_cache(char *filename, hid_t fapl)
         FAIL_STACK_ERROR
 
     /* Make a copy of the default DXPL */
-    if((my_dxpl = H5Pcopy(H5P_DATASET_XFER_DEFAULT)) < 0)
+    if((my_dxpl = H5Pcopy(H5AC_ind_read_dxpl_id)) < 0)
         FAIL_STACK_ERROR
 
     /* Create the file to operate on */
@@ -284,20 +285,20 @@ test_ohdr_cache(char *filename, hid_t fapl)
         FAIL_STACK_ERROR
 
     if(H5Pclose(my_dxpl) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     if(H5Fclose(file) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     PASSED();
 
-    return 0;
+    return SUCCEED;
 
 error:
     H5E_BEGIN_TRY {
         H5Fclose(file);
     } H5E_END_TRY;
 
-    return -1;
+    return FAIL;
 } /* test_ohdr_cache() */
 
 /*
@@ -322,14 +323,14 @@ test_ohdr_swmr(hbool_t new_format)
     H5O_info_t obj_info;		/* Information for the object */
 
     if(new_format) {
-	    TESTING("exercise the coding for the re-read of the object header for SWMR access: latest-format");
+        TESTING("exercise the coding for the re-read of the object header for SWMR access: latest-format");
     } else {
-	    TESTING("exercise the coding for the re-read of the object header for SWMR access: non-latest-format");
+        TESTING("exercise the coding for the re-read of the object header for SWMR access: non-latest-format");
     } /* end if */
 
     /* File access property list */
     if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
-	FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Create the file with/without latest format: ensure version 2 object header for SWMR */
     if(new_format)  {
@@ -348,102 +349,394 @@ test_ohdr_swmr(hbool_t new_format)
     wbuf = (int *)HDcalloc(compact_size, sizeof(int));
     n = 0;
     for(u = 0; u < compact_size; u++)
-	    wbuf[u] = n++;
+        wbuf[u] = n++;
 
     /* Create a small data space for compact dataset */
     dims[0] = (hsize_t)compact_size;
     if((sid = H5Screate_simple(1, dims, NULL)) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
     
     /* Create property list for compact dataset creation */
     if((plist = H5Pcreate(H5P_DATASET_CREATE)) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Set the layout for the compact dataset */
     if(H5Pset_layout(plist, H5D_COMPACT) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Create a compact dataset */
     if((did = H5Dcreate2(fid, DSET_NAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, plist, H5P_DEFAULT)) < 0)
-	    FAIL_STACK_ERROR
-	
+        FAIL_STACK_ERROR
+
     /* Write to the compact dataset */
     if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Close the dataset */
     if(H5Dclose(did) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Close the file */
     if(H5Fclose(fid) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Open the file for SWMR write with/without latest format */
     if((fid = H5Fopen(FILE_OHDR_SWMR, H5F_ACC_RDWR|H5F_ACC_SWMR_WRITE, fapl)) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Open the compact dataset */
     if((did = H5Dopen2(fid, DSET_NAME, H5P_DEFAULT)) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Get the object information */
     if(H5Oget_info(did, &obj_info) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     if(obj_info.hdr.version != OBJ_VERSION_LATEST)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* The size of object header should be greater than the speculative read size of 512 */
     /* This will exercise the coding for the re-read of the object header for SWMR access */
     if(obj_info.hdr.space.total < 512)
-	    TEST_ERROR;
+        TEST_ERROR;
 
     /* Close the dataset */
     if(H5Dclose(did) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Close the file */
     if(H5Fclose(fid) < 0)
-	    FAIL_STACK_ERROR
-	
+        FAIL_STACK_ERROR
+
     /* Close the dataspace */
     if(H5Sclose(sid) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Close the dataset creation property list */
     if(H5Pclose(plist) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Close the file access property list */
     if(H5Pclose(fapl) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Remove the test file */
     if(HDremove(FILE_OHDR_SWMR) < 0)
-	    FAIL_STACK_ERROR
+        FAIL_STACK_ERROR
 
     /* Free the buffer */
     HDfree(wbuf);
 
     PASSED();
 
-    return 0;
+    return SUCCEED;
 
 error:
     H5E_BEGIN_TRY {
         H5Fclose(fid);
-	    H5Dclose(did);
-	    H5Sclose(sid);
-	    H5Pclose(plist);
-	    H5Pclose(fapl);
-	    HDremove(FILE_OHDR_SWMR);
+        H5Dclose(did);
+        H5Sclose(sid);
+        H5Pclose(plist);
+        H5Pclose(fapl);
+        HDremove(FILE_OHDR_SWMR);
         HDfree(wbuf);
     } H5E_END_TRY;
 
-    return -1;
+    return FAIL;
 } /* test_ohdr_swmr() */
 
+/*
+ *  To test objects with unknown messages in a file with:
+ *  	a) H5O_BOGUS_VALID_ID:
+ *	   --the bogus_id is within the range of H5O_msg_class_g[]
+ *  	b) H5O_BOGUS_INVALID_ID:
+ *  	   --the bogus_id is outside the range of H5O_msg_class_g[]
+ *
+ *   The test file is FILE_BOGUS: "tbogus.h5" generated with gen_bogus.c
+ *   --objects that have unknown header messages with H5O_BOGUS_VALID_ID in "/"
+ *   --objects that have unknown header messages with H5O_BOGUS_INVALID_ID in "/group"
+ *
+ *   The test also uses the test file FILENAME[0] (ohdr.h5): the parameter "filename"
+ */
+static herr_t
+test_unknown(unsigned bogus_id, char *filename, hid_t fapl)
+{
+    hid_t fid = -1;	/* file ID */
+    hid_t gid = -1;	/* group ID */
+    hid_t did = -1;	/* Dataset ID */
+    hid_t sid = -1;     /* Dataspace ID */
+    hid_t aid = -1;     /* Attribute ID */
+    hid_t loc = -1;	/* location: file or group ID */
+    hid_t fid_bogus = -1;	/* bogus file ID */
+    hid_t gid_bogus = -1;	/* bogus group ID */
+    hid_t loc_bogus = -1;	/* location: bogus file or group ID */
+    char testfile[256];
+
+    /* create a different name for a local copy of the data file to be 
+       opened with rd/wr file permissions in case build and test are 
+       done in the source directory. */
+    HDstrncpy(testfile, FILE_BOGUS, strlen(FILE_BOGUS));
+    testfile[strlen(FILE_BOGUS)]='\0';
+    HDstrncat(testfile, ".copy", 5);
+
+    /* Make a copy of the data file from svn. */
+    if(h5_make_local_copy(FILE_BOGUS, testfile) < 0)
+      FAIL_STACK_ERROR
+
+    TESTING("object with unknown header message and no flags set");
+
+    /* Open filename */
+    if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Open FILE_BOGUS */
+    if((fid_bogus = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set up location ID depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID) {
+        /* Open "group" in FILE_BOGUS */
+        if((gid_bogus = H5Gopen2(fid_bogus, "group", H5P_DEFAULT)) < 0) 
+            FAIL_STACK_ERROR
+        loc_bogus = gid_bogus;
+
+        /* Create "group" in filename */
+        if((gid = H5Gcreate2(fid, "group", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+            FAIL_STACK_ERROR
+        loc = gid;
+
+    } else { /* H5O_BOGUS_VALID_ID */
+        loc_bogus = fid_bogus;
+        loc = fid;
+    } /* end else */
+
+   /* Open the dataset with the unknown header message, but no extra flags */
+    if((did = H5Dopen2(loc_bogus, "Dataset1", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Dclose(did) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    TESTING("object in r/o file with unknown header message & 'fail if unknown and open for write' flag set");
+
+    /* Open the dataset with the unknown header message, and "fail if unknown and open for write" flag */
+    if((did = H5Dopen2(loc_bogus, "Dataset2", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Dclose(did) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    TESTING("object in r/o file with unknown header message & 'fail if unknown always' flag set");
+
+    /* Attempt to open the dataset with the unknown header message, and "fail if unknown always" flag */
+    H5E_BEGIN_TRY {
+        did = H5Dopen2(loc_bogus, "Dataset3", H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(did >= 0) {
+        H5Dclose(did);
+        TEST_ERROR
+    } /* end if */
+
+    PASSED();
+
+    TESTING("object with unknown header message & 'mark if unknown' flag set");
+
+    /* Copy object with "mark if unknown" flag on message into file (FILENAME[0]) that can be modified */
+    if(H5Ocopy(loc_bogus, "Dataset4", loc, "Dataset4", H5P_DEFAULT, H5P_DEFAULT) < 0)
+        FAIL_STACK_ERROR
+
+    /* Closing: filename */
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid) < 0)
+            FAIL_STACK_ERROR
+    if(H5Fclose(fid) < 0)
+       FAIL_STACK_ERROR
+
+    /* Re-open filename, with read-only permissions */
+    if((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set up location ID depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID) {
+        /* Open "group" in filename */
+        if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) 
+            FAIL_STACK_ERROR
+        loc = gid;
+    } else
+        loc = fid;
+
+    /* Open the dataset with the "mark if unknown" message */
+    if((did = H5Dopen2(loc, "Dataset4", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check that the "unknown" message was _NOT_ marked */
+    if(H5O_check_msg_marked_test(did, FALSE) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close the dataset */
+    if(H5Dclose(did) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close "group" in filename depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid) < 0)
+            FAIL_STACK_ERROR
+
+    /* Close filename (to flush change to object header) */
+    if(H5Fclose(fid) < 0)
+        FAIL_STACK_ERROR
+
+    /* Re-open filename */
+    if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set up location ID depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID) {
+        /* Open "group" in filename */
+        if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) 
+            FAIL_STACK_ERROR
+        loc = gid;
+    } else
+        loc = fid;
+
+    /* Open the dataset with the "mark if unknown" message */
+    if((did = H5Dopen2(loc, "Dataset4", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create data space */
+    if((sid = H5Screate(H5S_SCALAR)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create an attribute, to get the object header into write access */
+    if((aid = H5Acreate2(did, "Attr", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close dataspace */
+    if(H5Sclose(sid) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close attribute */
+    if(H5Aclose(aid) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close the dataset */
+    if(H5Dclose(did) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close "group" in filename depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid) < 0)
+            FAIL_STACK_ERROR
+
+    /* Close filename (to flush change to object header) */
+    if(H5Fclose(fid) < 0)
+        FAIL_STACK_ERROR
+
+    /* Re-open filename */
+    if((fid = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set up location ID depending on bogus_id */
+    if(bogus_id == H5O_BOGUS_INVALID_ID) {
+        /* Open "group" in filename */
+        if((gid = H5Gopen2(fid, "group", H5P_DEFAULT)) < 0) 
+            FAIL_STACK_ERROR
+        loc = gid;
+    } else
+        loc = fid;
+
+    /* Re-open the dataset with the "mark if unknown" message */
+    if((did = H5Dopen2(loc, "Dataset4", H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check that the "unknown" message was marked */
+    if(H5O_check_msg_marked_test(did, TRUE) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close the dataset */
+    if(H5Dclose(did) < 0)
+        FAIL_STACK_ERROR
+
+    /* Closing: filename */ 
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid) < 0)
+            FAIL_STACK_ERROR
+    if(H5Fclose(fid) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    /* Closing: FILE_BOGUS */
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid_bogus) < 0)
+            FAIL_STACK_ERROR
+    if(H5Fclose(fid_bogus) < 0)
+        FAIL_STACK_ERROR
+
+    TESTING("object in r/w file with unknown header message & 'fail if unknown and open for write' flag set");
+
+    /* Open FILE_BOGUS with RW intent this time */
+    if((fid_bogus = H5Fopen(testfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Set up location ID */
+    if(bogus_id == H5O_BOGUS_INVALID_ID) {
+        /* Open "group" in FILE_BOGUS */
+        if((gid_bogus = H5Gopen2(fid_bogus, "group", H5P_DEFAULT)) < 0) 
+            FAIL_STACK_ERROR
+        loc_bogus = gid_bogus;
+    } else
+        loc_bogus = fid_bogus;
+
+    /* Attempt to open the dataset with the unknown header message, and "fail if unknown and open for write" flag */
+    H5E_BEGIN_TRY {
+        did = H5Dopen2(loc_bogus, "Dataset2", H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(did >= 0) {
+        H5Dclose(did);
+        TEST_ERROR
+    } /* end if */
+
+    PASSED();
+
+    TESTING("object in r/w file with unknown header message & 'fail if unknown always' flag set");
+
+    /* Attempt to open the dataset with the unknown header message, and "fail if unknown always" flag */
+    H5E_BEGIN_TRY {
+        did = H5Dopen2(loc_bogus, "Dataset3", H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(did >= 0) {
+        H5Dclose(did);
+        TEST_ERROR
+    } /* end if */
+
+    /* Closing: FILE_BOGUS */
+    if(bogus_id == H5O_BOGUS_INVALID_ID)
+        if(H5Gclose(gid_bogus) < 0)
+	        FAIL_STACK_ERROR
+    if(H5Fclose(fid_bogus) < 0)
+        FAIL_STACK_ERROR
+
+    PASSED();
+
+    return SUCCEED;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Fclose(fid);
+        H5Gclose(gid);
+        H5Fclose(fid_bogus);
+        H5Gclose(gid_bogus);
+        H5Dclose(did);
+        H5Sclose(sid);
+        H5Aclose(aid);
+    } H5E_END_TRY;
+
+    return FAIL;
+} /* test_unknown() */
+
 

 /*-------------------------------------------------------------------------
  * Function:	main
@@ -490,21 +783,20 @@ main(void)
         if(H5Pset_libver_bounds(fapl, (b ? H5F_LIBVER_LATEST : H5F_LIBVER_EARLIEST), H5F_LIBVER_LATEST) < 0)
             FAIL_STACK_ERROR
 
-	/* test on object continuation block */
-	if(test_cont(filename, fapl) < 0)
-            FAIL_STACK_ERROR
+        /* test on object continuation block */
+        if(test_cont(filename, fapl) < 0)
+            TEST_ERROR
 
         /* Create the file to operate on */
         if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
-            TEST_ERROR
+            FAIL_STACK_ERROR
         if(NULL == (f = (H5F_t *)H5I_object(file)))
             FAIL_STACK_ERROR
-        if (H5AC_ignore_tags(f) < 0) {
-	    H5_FAILED();
-	    H5Eprint2(H5E_DEFAULT, stdout);
-	    goto error;
-        }
-
+        if(H5AC_ignore_tags(f) < 0) {
+            H5_FAILED();
+            H5Eprint2(H5E_DEFAULT, stdout);
+            goto error;
+        } /* end if */
 
         /*
          * Test object header creation
@@ -512,47 +804,45 @@ main(void)
          */
         TESTING("object header creation");
         HDmemset(&oh_loc, 0, sizeof(oh_loc));
-        if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
+        if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
             FAIL_STACK_ERROR
         PASSED();
 
-
         /* create a new message */
         TESTING("message creation");
         time_new = 11111111;
-        if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(1 != H5O_link(&oh_loc, 1, H5P_DATASET_XFER_DEFAULT))
+        if(1 != H5O_link(&oh_loc, 1, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
-        if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_expunge_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
+        if(H5AC_expunge_entry(f, H5AC_ind_read_dxpl_id, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
             FAIL_STACK_ERROR
-        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
         if(ro != time_new)
             TEST_ERROR
         PASSED();
 
-
         /*
          * Test modification of an existing message.
          */
         TESTING("message modification");
         time_new = 33333333;
-        if(H5O_msg_write(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_write(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_expunge_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
+        if(H5AC_expunge_entry(f, H5AC_ind_read_dxpl_id, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
             FAIL_STACK_ERROR
-        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
         if(ro != time_new)
             TEST_ERROR
 
         /* Make certain that chunk #0 in the object header can be encoded with a 1-byte size */
-        if(H5O_get_hdr_info(&oh_loc, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
+        if(H5O_get_hdr_info(&oh_loc, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
             FAIL_STACK_ERROR
         if(hdr_info.space.total >=256)
             TEST_ERROR
@@ -570,16 +860,16 @@ main(void)
         TESTING("object header overflow in memory");
         for(i = 0; i < 40; i++) {
             time_new = (i + 1) * 1000 + 1000000;
-            if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+            if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
                 FAIL_STACK_ERROR
         } /* end for */
-        if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_expunge_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
+        if(H5AC_expunge_entry(f, H5AC_ind_read_dxpl_id, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
             FAIL_STACK_ERROR
 
         /* Make certain that chunk #0 in the object header will be encoded with a 2-byte size */
-        if(H5O_get_hdr_info(&oh_loc, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
+        if(H5O_get_hdr_info(&oh_loc, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
             FAIL_STACK_ERROR
         if(hdr_info.space.total < 256)
             TEST_ERROR
@@ -614,11 +904,11 @@ main(void)
         TESTING("object header overflow on disk");
         for(i = 0; i < 10; i++) {
             time_new = (i + 1) * 1000 + 10;
-            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
                 FAIL_STACK_ERROR
-            if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
+            if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
                 FAIL_STACK_ERROR
-            if(H5AC_expunge_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
+            if(H5AC_expunge_entry(f, H5AC_ind_read_dxpl_id, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
                 FAIL_STACK_ERROR
         } /* end for */
         PASSED();
@@ -627,13 +917,13 @@ main(void)
          * Delete all time messages.
          */
         TESTING("message deletion");
-        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5O_msg_remove(&oh_loc, H5O_MTIME_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_remove(&oh_loc, H5O_MTIME_ID, H5O_ALL, TRUE, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+        if(H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
-        if(H5O_msg_read(&oh_loc, H5O_MTIME_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+        if(H5O_msg_read(&oh_loc, H5O_MTIME_ID, &ro, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
         PASSED();
 
@@ -644,23 +934,23 @@ main(void)
          */
         TESTING("constant message handling");
         time_new = 22222222;
-        if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, H5O_MSG_FLAG_CONSTANT, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, H5O_MSG_FLAG_CONSTANT, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5AC_flush(f, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
-        if(H5AC_expunge_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
+        if(H5AC_expunge_entry(f, H5AC_ind_read_dxpl_id, H5AC_OHDR, oh_loc.addr, H5AC__NO_FLAGS_SET) < 0)
             FAIL_STACK_ERROR
-        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+        if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
         if(ro != time_new)
             TEST_ERROR
         time_new = 33333333;
         H5E_BEGIN_TRY {
-            ret = H5O_msg_write(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT);
+            ret = H5O_msg_write(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id);
         } H5E_END_TRY;
         if(ret >= 0)
             TEST_ERROR
-        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
         PASSED();
 
@@ -676,49 +966,49 @@ main(void)
          */
         TESTING("locking messages");
         HDmemset(&oh_loc, 0, sizeof(oh_loc));
-        if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
+        if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
             FAIL_STACK_ERROR
-        if(1 != H5O_link(&oh_loc, 1, H5P_DATASET_XFER_DEFAULT))
+        if(1 != H5O_link(&oh_loc, 1, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
 
         /* Create second object header, to guarantee that first object header uses multiple chunks */
         HDmemset(&oh_loc2, 0, sizeof(oh_loc2));
-        if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc2/*out*/) < 0)
+        if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc2/*out*/) < 0)
             FAIL_STACK_ERROR
-        if(1 != H5O_link(&oh_loc2, 1, H5P_DATASET_XFER_DEFAULT))
+        if(1 != H5O_link(&oh_loc2, 1, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
 
         /* Fill object header with messages, creating multiple chunks */
         for(i = 0; i < 10; i++) {
             time_new = (i + 1) * 1000 + 10;
-            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
                 FAIL_STACK_ERROR
         } /* end for */
 
         /* Get # of object header chunks */
-        if(H5O_get_hdr_info(&oh_loc, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
+        if(H5O_get_hdr_info(&oh_loc, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
             FAIL_STACK_ERROR
         if(hdr_info.nchunks != 2)
             TEST_ERROR
 
         /* Add message to lock to object header */
         time_new = 11111111;
-        if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Verify chunk index for message */
-        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT)) < 0)
+        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id)) < 0)
             FAIL_STACK_ERROR
         if(chunkno != 1)
             TEST_ERROR
 
         /* Lock the message into the chunk */
-        if(H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Attempt to lock the message twice */
         H5E_BEGIN_TRY {
-            ret = H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT);
+            ret = H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id);
         } H5E_END_TRY;
         if(ret >= 0)
             TEST_ERROR
@@ -726,22 +1016,22 @@ main(void)
         /* Delete all the other messages, which would move the message into
          * chunk #0, if it wasn't locked
          */
-        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Verify chunk index for message */
-        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT)) < 0)
+        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id)) < 0)
             FAIL_STACK_ERROR
         if(chunkno != 1)
             TEST_ERROR
 
         /* Unlock the message */
-        if(H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Attempt to unlock the message twice */
         H5E_BEGIN_TRY {
-            ret = H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT);
+            ret = H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id);
         } H5E_END_TRY;
         if(ret >= 0)
             TEST_ERROR
@@ -754,55 +1044,55 @@ main(void)
 
         /* Open first object header */
         HDmemset(&oh_loc, 0, sizeof(oh_loc));
-        if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
+        if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc/*out*/) < 0)
             FAIL_STACK_ERROR
-        if(1 != H5O_link(&oh_loc, 1, H5P_DATASET_XFER_DEFAULT))
+        if(1 != H5O_link(&oh_loc, 1, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
 
         /* Create second object header, to guarantee that first object header uses multiple chunks */
         HDmemset(&oh_loc2, 0, sizeof(oh_loc2));
-        if(H5O_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc2/*out*/) < 0)
+        if(H5O_create(f, H5AC_ind_read_dxpl_id, (size_t)64, (size_t)0, H5P_GROUP_CREATE_DEFAULT, &oh_loc2/*out*/) < 0)
             FAIL_STACK_ERROR
-        if(1 != H5O_link(&oh_loc2, 1, H5P_DATASET_XFER_DEFAULT))
+        if(1 != H5O_link(&oh_loc2, 1, H5AC_ind_read_dxpl_id))
             FAIL_STACK_ERROR
 
         /* Add message to move to object header */
         time_new = 11111111;
-        if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_create(&oh_loc, H5O_MTIME_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Verify chunk index for message */
-        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT)) < 0)
+        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id)) < 0)
             FAIL_STACK_ERROR
         if(chunkno != 0)
             TEST_ERROR
 
         /* Lock the message into the chunk */
-        if(H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_lock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Fill object header with messages, creating multiple chunks */
         /* (would normally move locked message to new chunk) */
         for(i = 0; i < 10; i++) {
             time_new = (i + 1) * 1000 + 10;
-            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+            if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5AC_ind_read_dxpl_id) < 0)
                 FAIL_STACK_ERROR
         } /* end for */
 
         /* Get # of object header chunks */
-        if(H5O_get_hdr_info(&oh_loc, H5P_DATASET_XFER_DEFAULT, &hdr_info) < 0)
+        if(H5O_get_hdr_info(&oh_loc, H5AC_ind_read_dxpl_id, &hdr_info) < 0)
             FAIL_STACK_ERROR
         if(hdr_info.nchunks != 2)
             TEST_ERROR
 
         /* Verify chunk index for message */
-        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT)) < 0)
+        if((chunkno = H5O_msg_get_chunkno(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id)) < 0)
             FAIL_STACK_ERROR
         if(chunkno != 0)
             TEST_ERROR
 
         /* Unlock the message */
-        if(H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5P_DATASET_XFER_DEFAULT) < 0)
+        if(H5O_msg_unlock(&oh_loc, H5O_MTIME_ID, H5AC_ind_read_dxpl_id) < 0)
             FAIL_STACK_ERROR
 
         /* Close object headers */
@@ -813,181 +1103,22 @@ main(void)
 
         PASSED();
 
+        /* Close the file we created */
+        if(H5Fclose(file) < 0)
+            TEST_ERROR
 
         /* Test reading datasets with undefined object header messages
          * and the various "fail/mark if unknown" object header message flags
          */
-        HDputs("Accessing objects with unknown header messages:");
-        {
-            hid_t file2;                    /* File ID for 'bogus' object file */
-            hid_t sid;                      /* Dataspace ID */
-            hid_t aid;                      /* Attribute ID */
-            const char *testfile = H5_get_srcdir_filename(FILE_BOGUS);
-
-            TESTING("object with unknown header message and no flags set");
-
-            /* Open the file with objects that have unknown header messages (generated with gen_bogus.c) */
-            if((file2 = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
-                TEST_ERROR
-
-            /* Open the dataset with the unknown header message, but no extra flags */
-            if((dset = H5Dopen2(file2, "/Dataset1", H5P_DEFAULT)) < 0)
-                TEST_ERROR
-            if(H5Dclose(dset) < 0)
-                TEST_ERROR
-
-            PASSED();
-
-            TESTING("object in r/o file with unknown header message & 'fail if unknown and open for write' flag set");
-
-            /* Open the dataset with the unknown header message, and "fail if unknown and open for write" flag */
-            if((dset = H5Dopen2(file2, "/Dataset2", H5P_DEFAULT)) < 0)
-                TEST_ERROR
-            if(H5Dclose(dset) < 0)
-                TEST_ERROR
-
-            PASSED();
-
-            TESTING("object in r/o file with unknown header message & 'fail if unknown always' flag set");
-
-            /* Attempt to open the dataset with the unknown header message, and "fail if unknown always" flag */
-            H5E_BEGIN_TRY {
-                dset = H5Dopen2(file2, "/Dataset3", H5P_DEFAULT);
-            } H5E_END_TRY;
-            if(dset >= 0) {
-                H5Dclose(dset);
-                TEST_ERROR
-            } /* end if */
-
-            PASSED();
-
-            TESTING("object with unknown header message & 'mark if unknown' flag set");
-
-            /* Copy object with "mark if unknown" flag on message into file that can be modified */
-            if(H5Ocopy(file2, "/Dataset4", file, "/Dataset4", H5P_DEFAULT, H5P_DEFAULT) < 0)
-                TEST_ERROR
-
-            /* Close the file we created (to flush changes to file) */
-            if(H5Fclose(file) < 0)
-                TEST_ERROR
-
-            /* Re-open the file created, with read-only permissions */
-            if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
-                TEST_ERROR
-
-            /* Open the dataset with the "mark if unknown" message */
-            if((dset = H5Dopen2(file, "/Dataset4", H5P_DEFAULT)) < 0)
-                TEST_ERROR
-
-            /* Check that the "unknown" message was _NOT_ marked */
-            if(H5O_check_msg_marked_test(dset, FALSE) < 0)
-                FAIL_STACK_ERROR
-
-            /* Close the dataset */
-            if(H5Dclose(dset) < 0)
-                TEST_ERROR
-
-            /* Close the file we created (to flush change to object header) */
-            if(H5Fclose(file) < 0)
-                TEST_ERROR
-
-            /* Re-open the file created */
-            if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
-                TEST_ERROR
-
-            /* Open the dataset with the "mark if unknown" message */
-            if((dset = H5Dopen2(file, "/Dataset4", H5P_DEFAULT)) < 0)
-                TEST_ERROR
-
-            /* Create data space */
-            if((sid = H5Screate(H5S_SCALAR)) < 0)
-                FAIL_STACK_ERROR
-
-            /* Create an attribute, to get the object header into write access */
-            if((aid = H5Acreate2(dset, "Attr", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-                FAIL_STACK_ERROR
-
-            /* Close dataspace */
-            if(H5Sclose(sid) < 0)
-                FAIL_STACK_ERROR
-
-            /* Close attribute */
-            if(H5Aclose(aid) < 0)
-                FAIL_STACK_ERROR
-
-            /* Close the dataset */
-            if(H5Dclose(dset) < 0)
-                TEST_ERROR
-
-            /* Close the file we created (to flush change to object header) */
-            if(H5Fclose(file) < 0)
-                TEST_ERROR
-
-            /* Re-open the file created */
-            if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0)
-                TEST_ERROR
-
-            /* Re-open the dataset with the "mark if unknown" message */
-            if((dset = H5Dopen2(file, "/Dataset4", H5P_DEFAULT)) < 0)
-                TEST_ERROR
-
-            /* Check that the "unknown" message was marked */
-            if(H5O_check_msg_marked_test(dset, TRUE) < 0)
-                FAIL_STACK_ERROR
-
-            /* Close the dataset */
-            if(H5Dclose(dset) < 0)
-                TEST_ERROR
-
-            /* Close the file with the bogus objects */
-            if(H5Fclose(file2) < 0)
-                TEST_ERROR
-
-            PASSED();
-
-            TESTING("object with unknown header message & 'fail if unknown and open for write' flag set");
-
-            /* Open the file with objects that have unknown header messages (generated with gen_bogus.c) with RW intent this time */
-            if((file2 = H5Fopen(testfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0)
-                TEST_ERROR
-
-            TESTING("object in r/w file with unknown header message & 'fail if unknown and open for write' flag set");
-
-            /* Attempt to open the dataset with the unknown header message, and "fail if unknown and open for write" flag */
-            H5E_BEGIN_TRY {
-                dset = H5Dopen2(file2, "/Dataset2", H5P_DEFAULT);
-            } H5E_END_TRY;
-            if(dset >= 0) {
-                H5Dclose(dset);
-                TEST_ERROR
-            } /* end if */
-
-            PASSED();
-
-            TESTING("object in r/w file with unknown header message & 'fail if unknown always' flag set");
-
-            /* Attempt to open the dataset with the unknown header message, and "fail if unknown always" flag */
-            H5E_BEGIN_TRY {
-                dset = H5Dopen2(file2, "/Dataset3", H5P_DEFAULT);
-            } H5E_END_TRY;
-            if(dset >= 0) {
-                H5Dclose(dset);
-                TEST_ERROR
-            } /* end if */
-
-            /* Close the file with the bogus objects */
-            if(H5Fclose(file2) < 0)
-                TEST_ERROR
-
-            PASSED();
-        }
-
-        /* Close the file we created */
-        if(H5Fclose(file) < 0)
+        HDputs("Accessing objects with unknown header messages: H5O_BOGUS_VALID_ID");
+        if(test_unknown(H5O_BOGUS_VALID_ID, filename, fapl) < 0)
+            TEST_ERROR
+        HDputs("Accessing objects with unknown header messages: H5O_BOGUS_INVALID_ID");
+        if(test_unknown(H5O_BOGUS_INVALID_ID, filename, fapl) < 0)
             TEST_ERROR
 
-	    /* Test object header creation metadata cache issues */
-	    if(test_ohdr_cache(filename, fapl) < 0)
+        /* Test object header creation metadata cache issues */
+        if(test_ohdr_cache(filename, fapl) < 0)
             TEST_ERROR
     } /* end for */
 
@@ -998,7 +1129,7 @@ main(void)
     if(test_ohdr_swmr(TRUE) < 0) TEST_ERROR
     if(test_ohdr_swmr(FALSE) < 0) TEST_ERROR
 
-    puts("All object header tests passed.");
+    HDputs("All object header tests passed.");
     h5_cleanup(FILENAME, fapl);
     return 0;
 
diff --git a/test/set_extent.c b/test/set_extent.c
index 8942f3f..999a8ef 100644
--- a/test/set_extent.c
+++ b/test/set_extent.c
@@ -20,9 +20,6 @@
  * Purpose:     Tests the H5Dset_extent call
  */
 
-#include <time.h>
-#include <stdlib.h>
-#include "hdf5.h"
 #include "h5test.h"
 
 /*-------------------------------------------------------------------------
@@ -470,471 +467,302 @@ static int test_rank1( hid_t fapl,
     int     comp_value;
     char    filename[NAME_BUF_SIZE];
 
-    if ( do_fill_value )
-    {
+    if(do_fill_value)
         comp_value = FILL_VALUE;
-    }
     else
-    {
         comp_value = 0;
-    }
-
 
-    for( i = 0; i < DIM0; i++ )
-    {
 
+    for(i = 0; i < DIM0; i++ )
         buf_o[i] = 2;
-    }
 
     /* create a file creation property list */
-    if ((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
-    {
+    if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
         TEST_ERROR
-    }
 
-    if  ( set_istore_k )
-    {
-        /* set non-default indexed storage B-tree internal 'K' value */
-        if (H5Pset_istore_k(fcpl,ISTORE_IK) < 0)
-        {
+    /* set non-default indexed storage B-tree internal 'K' value */
+    if(set_istore_k)
+        if(H5Pset_istore_k(fcpl,ISTORE_IK) < 0)
             TEST_ERROR
-        }
 
-    }
     /* create a new file */
     h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
-    if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
-    {
+    if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
         TEST_ERROR
-    }
 
     /* close property list */
     if(H5Pclose(fcpl) < 0)
-    {
         TEST_ERROR
-    }
 
     /* create the data space with unlimited dimensions. */
     if ((sid = H5Screate_simple(RANK1, dims_o, maxdims)) < 0)
-    {
         TEST_ERROR
-    }
 
     /* modify dataset creation properties, i.e. enable chunking. */
     if ((my_dcpl = H5Pcopy (dcpl)) < 0)
-    {
         TEST_ERROR
-    }
     if (H5Pset_chunk(my_dcpl, RANK1, dims_c) < 0)
-    {
         TEST_ERROR
-    }
     if(disable_edge_filters)
         if(H5Pset_chunk_opts(my_dcpl, H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS) < 0)
             TEST_ERROR
 
     /*-------------------------------------------------------------------------
-    * create, write dataset
-    *-------------------------------------------------------------------------
-    */
+     * create, write dataset
+     *-------------------------------------------------------------------------
+     */
 
     /* create a dataset */
-    if ((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, my_dcpl, H5P_DEFAULT)) < 0)
-    {
+    if((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, my_dcpl, H5P_DEFAULT)) < 0)
         TEST_ERROR
-    }
 
     /* write */
-    if (H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_o) < 0)
-    {
+    if(H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_o) < 0)
         TEST_ERROR
-    }
-
 
 #if defined (H5_SET_EXTENT_DEBUG)
-    printf("\n");
+    printf("\n buf_o: ");
     for (i = 0; i < (int)dims_o[0]; i++ )
-    {
-
         printf("%d ", buf_o[i]);
-
-    }
     printf("\n");
 #endif
 
-
-
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
 
     /*-------------------------------------------------------------------------
-    * set new dimensions for the array; expand it
-    *-------------------------------------------------------------------------
-    */
+     * set new dimensions for the array; expand it
+     *-------------------------------------------------------------------------
+     */
 
     /* set new dimensions for the array. */
     if (H5Dset_extent(did , dims_e) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get the space */
     if ((sid = H5Dget_space(did)) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get dimensions */
     if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0)
-    {
         TEST_ERROR
-    }
 
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
-
 
     /* check dimensions */
     for( i = 0; i < RANK1; i++ )
-    {
         if (dims_r[i] != dims_e[i])
             TEST_ERROR
-    }
 
     /* read */
     if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_e) < 0)
         TEST_ERROR
 
 
-
 #if defined (H5_SET_EXTENT_DEBUG)
-    printf("\n");
+    printf("\n buf_e: ");
     for (i = 0; i < (int)dims_r[0]; i++ )
-    {
-
         printf("%d ", buf_e[i]);
-
-    }
     printf("\n");
 #endif
 
-
-
-
     /* compare the read array with the expanded array */
     for (i = 0; i < (int)dims_r[0]; i++ )
-    {
-
-        if ( i >= DIM0  )
-        {
-            if(buf_e[i] != comp_value)
-            {
+        if(i >= DIM0) {
+            if(buf_e[i] != comp_value) {
                 printf("buf_e[%d] = %d\n", i, buf_e[i]);
-                printf("value = %d\n", comp_value);
+                printf("expected = %d\n", comp_value);
                 TEST_ERROR
-            }
-        }
-        else
-        {
+            } /* end if */
+        } /* end if */
+        else {
             if(buf_e[i] != buf_o[i])
                 TEST_ERROR
-        }
-    }
-
+        } /* end else */
 
 
 
     /*-------------------------------------------------------------------------
-    * shrink
-    *
-    *-------------------------------------------------------------------------
-    */
+     * shrink
+     *-------------------------------------------------------------------------
+     */
 
     /* set new dimensions for the array. */
     if (H5Dset_extent(did , dims_s) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get the space */
     if ((sid = H5Dget_space(did)) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get dimensions */
     if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0)
-    {
         TEST_ERROR
-    }
 
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
 
     /* check dimensions */
     for( i = 0; i < RANK1; i++ )
-    {
         if (dims_r[i] != dims_s[i])
             TEST_ERROR
-    }
-
-
 
     /* for this case we close and reopen file */
-    if ( set_istore_k )
-    {
-
+    if ( set_istore_k ) {
         if (H5Dclose(did) < 0)
-        {
             TEST_ERROR
-        }
         if (H5Fclose(fid) < 0)
-        {
             TEST_ERROR
-        }
 
         if ((fid = H5Fopen( filename, H5F_ACC_RDWR, fapl ))<0)
-        {
             TEST_ERROR
-        }
 
         if ((did = H5Dopen2( fid , "dset1", H5P_DEFAULT ))<0)
-        {
             TEST_ERROR
-        }
-
-
-
-    }
+    } /* end if */
 
 
     /*-------------------------------------------------------------------------
-    * read
-    *-------------------------------------------------------------------------
-    */
+     * read
+     *-------------------------------------------------------------------------
+     */
 
     /* read */
     if (H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_s ) < 0)
-    {
         TEST_ERROR
-    }
 
 #if defined (H5_SET_EXTENT_DEBUG)
-    printf("\n");
+    printf("\n dims_r: ");
     for (i = 0; i < (int)dims_r[0]; i++ )
-    {
-
         printf("%d ", buf_s[i]);
-    }
     printf("\n");
-
 #endif
 
-
-
-
     /* compare the read array with the shrinked array */
     for( i = 0; i < (int)dims_r[0]; i++ )
-    {
-
-        if (  buf_s[i] != buf_o[i] )
-        {
+        if (  buf_s[i] != buf_o[i] ) {
             printf("buf_s[%d] = %d\n", i, buf_s[i]);
             printf("buf_o[%d] = %d\n", i, buf_o[i]);
             TEST_ERROR
-        }
-    }
-
+        } /* end if */
 
     /*-------------------------------------------------------------------------
-    * expand it back to original size
-    *-------------------------------------------------------------------------
-    */
+     * expand it back to original size
+     *-------------------------------------------------------------------------
+     */
 
     /* set new dimensions for the array */
     if (H5Dset_extent(did, dims_o) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get the space */
     if ((sid = H5Dget_space(did)) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get dimensions. */
     if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0)
-    {
         TEST_ERROR
-    }
 
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
-
 
     /* check dimensions */
     for( i = 0; i < RANK1; i++ )
-    {
         if (dims_r[i] != dims_o[i])
             TEST_ERROR
-    }
-
 
     /* read */
     if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0)
         TEST_ERROR
 
 #if defined (H5_SET_EXTENT_DEBUG)
-    printf("\n");
+    printf("\n dims_r: ");
     for (i = 0; i < (int)dims_r[0]; i++ )
-    {
-
         printf("%d ", buf_r[i]);
-
-    }
     printf("\n");
 #endif
 
-
-
     /* compare the read array with the original array */
     for (i = 0; i < (int)dims_r[0]; i++ )
-    {
-
-        if (i >= DIMS0 )
-        {
-            if(buf_r[i] != comp_value)
-            {
+        if (i >= DIMS0 ) {
+            if(buf_r[i] != comp_value) {
                 printf("buf_r[%d] = %d\n", i, buf_r[i] );
-                printf("value = %d\n", comp_value);
+                printf("expected = %d\n", comp_value);
                 TEST_ERROR
-            }
-        }
-        else
-        {
+            } /* end if */
+        } /* end if */
+        else {
             if(buf_r[i] != buf_o[i])
                 TEST_ERROR
-        }
-    }
+        } /* end else */
 
 
     /*-------------------------------------------------------------------------
-    * shrink to 0
-    *
-    *-------------------------------------------------------------------------
-    */
+     * shrink to 0
+     *-------------------------------------------------------------------------
+     */
 
     dims_s[0] = 0;
 
     /* set new dimensions for the array. */
     if (H5Dset_extent(did , dims_s) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get the space */
     if ((sid = H5Dget_space(did)) < 0)
-    {
         TEST_ERROR
-    }
 
     /* get dimensions */
     if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0)
-    {
         TEST_ERROR
-    }
-
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
 
     /* check dimensions */
     for( i = 0; i < RANK1; i++ )
-    {
         if (dims_r[i] != dims_s[i])
             TEST_ERROR
-    }
 
     /*-------------------------------------------------------------------------
-    * close dataset
-    *-------------------------------------------------------------------------
-    */
+     * close dataset
+     *-------------------------------------------------------------------------
+     */
 
     if (H5Dclose(did) < 0)
-    {
         TEST_ERROR
-    }
-
-
-
 
-
-     /*-------------------------------------------------------------------------
-    * test a dataset with non initialized chunks
-    *-------------------------------------------------------------------------
-    */
+    /*-------------------------------------------------------------------------
+     * test a dataset with non initialized chunks
+     *-------------------------------------------------------------------------
+     */
 
 
     if ((sid = H5Screate_simple(RANK1, dims_o, maxdims)) < 0)
-    {
         TEST_ERROR
-    }
     if ((did = H5Dcreate2(fid , "dset3", H5T_NATIVE_INT, sid, H5P_DEFAULT, my_dcpl, H5P_DEFAULT)) < 0)
-    {
         TEST_ERROR
-    }
     /* set new dimensions for the array */
     dims_o[ 0 ] = 0;
     if (H5Dset_extent( did , dims_o ) < 0)
-    {
         TEST_ERROR
-    }
-
-
 
     if (H5Dclose(did) < 0)
-    {
         TEST_ERROR
-    }
     if (H5Sclose(sid) < 0)
-    {
         TEST_ERROR
-    }
-
-
-
 
     /*-------------------------------------------------------------------------
-    * close property list
-    *-------------------------------------------------------------------------
-    */
-
-
+     * close property list
+     *-------------------------------------------------------------------------
+     */
     if (H5Pclose(my_dcpl) < 0)
-    {
         TEST_ERROR
-    }
-
     if (H5Fclose( fid ) < 0)
-    {
         TEST_ERROR
-    }
-
 
     return 0;
 
-
-
 error:
 
     H5E_BEGIN_TRY
@@ -947,7 +775,7 @@ error:
     } H5E_END_TRY;
     return -1;
 
-}
+} /* end test_rank1() */
 
 /*-------------------------------------------------------------------------
  * test usage with a 2D rank
diff --git a/test/swmr_addrem_writer.c b/test/swmr_addrem_writer.c
index 8ce3f6c..fb5cb8e 100644
--- a/test/swmr_addrem_writer.c
+++ b/test/swmr_addrem_writer.c
@@ -33,9 +33,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /****************/
@@ -82,7 +80,7 @@ open_skeleton(const char *filename, unsigned verbose)
     hsize_t dim[2];     /* Dataspace dimension */
     unsigned u, v;      /* Local index variable */
 
-    assert(filename);
+    HDassert(filename);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -99,8 +97,8 @@ open_skeleton(const char *filename, unsigned verbose)
 
         mdc_config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
         H5Pget_mdc_config(fapl, &mdc_config);
-        fprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
-        fprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
+        HDfprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
+        HDfprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
         mdc_config.set_initial_size = 1;
         mdc_config.initial_size = 16 * 1024 * 1024;
         /* mdc_config.epoch_length = 5000; */
@@ -122,7 +120,7 @@ open_skeleton(const char *filename, unsigned verbose)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening datasets\n");
+        HDfprintf(stderr, "Opening datasets\n");
 
     /* Open the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -178,10 +176,10 @@ addrem_records(hid_t fid, unsigned verbose, unsigned long nops, unsigned long fl
     unsigned long op_to_flush;          /* # of operations before flush */
     unsigned long u, v;                 /* Local index variables */
 
-    assert(fid > 0);
+    HDassert(fid > 0);
 
     /* Reset the buffer */
-    memset(&buf, 0, sizeof(buf));
+    HDmemset(&buf, 0, sizeof(buf));
 
     /* Create a dataspace for the record to add */
     if((mem_sid = H5Screate_simple(2, count, NULL)) < 0)
@@ -196,7 +194,7 @@ addrem_records(hid_t fid, unsigned verbose, unsigned long nops, unsigned long fl
     mdc_config_orig.version = H5AC__CURR_CACHE_CONFIG_VERSION;
     if(H5Fget_mdc_config(fid, &mdc_config_orig) < 0)
         return -1;
-    memcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
+    HDmemcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
     mdc_config_cork.evictions_enabled = FALSE;
     mdc_config_cork.incr_mode = H5C_incr__off;
     mdc_config_cork.flash_incr_mode = H5C_flash_incr__off;
@@ -213,7 +211,7 @@ addrem_records(hid_t fid, unsigned verbose, unsigned long nops, unsigned long fl
         symbol = choose_dataset();
 
         /* Decide whether to shrink or expand, and by how much */
-        count[1] = (hsize_t)random() % (MAX_SIZE_CHANGE * 2) + 1;
+        count[1] = (hsize_t)HDrandom() % (MAX_SIZE_CHANGE * 2) + 1;
 
         if(count[1] > MAX_SIZE_CHANGE) {
             /* Add records */
@@ -291,7 +289,7 @@ addrem_records(hid_t fid, unsigned verbose, unsigned long nops, unsigned long fl
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -319,7 +317,7 @@ usage(void)
     printf("Defaults to verbose (no '-q' given), flushing every 1000 operations\n");
     printf("('-f 1000'), and will generate a random seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 }
 
 int main(int argc, const char *argv[])
@@ -343,7 +341,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of records to write between flushing file */
                     case 'f':
-                        flush_count = atol(argv[u + 1]);
+                        flush_count = HDatol(argv[u + 1]);
                         if(flush_count < 0)
                             usage();
                         u += 2;
@@ -358,7 +356,7 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         if(temp < 0)
                             usage();
                         else
@@ -373,7 +371,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nops = atol(argv[u]);
+                nops = HDatol(argv[u]);
                 if(nops <= 0)
                     usage();
 
@@ -388,24 +386,24 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of operations between flushes = %ld\n", flush_count);
-        fprintf(stderr, "\t# of operations = %ld\n", nops);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of operations between flushes = %ld\n", flush_count);
+        HDfprintf(stderr, "\t# of operations = %ld\n", nops);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using writer random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using writer random seed: %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -413,12 +411,12 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
+        HDfprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
 
     /* Open file skeleton */
     if((fid = open_skeleton(FILENAME, verbose)) < 0) {
-        fprintf(stderr, "Error opening skeleton file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening skeleton file!\n");
+        HDexit(1);
     } /* end if */
 
     /* Send a message to indicate "H5Fopen" is complete--releasing the file lock */
@@ -426,32 +424,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Adding and removing records\n");
+        HDfprintf(stderr, "Adding and removing records\n");
 
     /* Grow and shrink datasets */
     if(addrem_records(fid, verbose, (unsigned long)nops, (unsigned long)flush_count) < 0) {
-        fprintf(stderr, "Error adding and removing records from datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error adding and removing records from datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects opened */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_check_compat_vfd.c b/test/swmr_check_compat_vfd.c
index 87b87c4..1bbfda3 100644
--- a/test/swmr_check_compat_vfd.c
+++ b/test/swmr_check_compat_vfd.c
@@ -19,14 +19,12 @@
  *              It is intended for use in shell scripts.
  */
 
-#include <stdlib.h>
-
-#include "H5private.h"
+#include "h5test.h"
 
 /* This file needs to access the file driver testing code */
-#define H5FD_FRIEND		/*suppress error about including H5FDpkg	  */
+#define H5FD_FRIEND     /*suppress error about including H5FDpkg            */
 #define H5FD_TESTING
-#include "H5FDpkg.h"	/* File drivers	 			*/
+#include "H5FDpkg.h"    /* File drivers                                     */
 
 

 /*-------------------------------------------------------------------------
@@ -56,4 +54,3 @@ main(void)
         return EXIT_FAILURE;
 
 } /* end main() */
-
diff --git a/test/swmr_common.c b/test/swmr_common.c
index 30e1b3e..8bd98b6 100644
--- a/test/swmr_common.c
+++ b/test/swmr_common.c
@@ -26,8 +26,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /*******************/
@@ -96,10 +95,10 @@ choose_dataset(void)
     unsigned offset;            /* The "offset" of the dataset at that level */
 
     /* Determine level of dataset */
-    level = symbol_mapping[random() % NMAPPING];
+    level = symbol_mapping[HDrandom() % NMAPPING];
 
     /* Determine the offset of the level */
-    offset = random() % symbol_count[level];
+    offset = HDrandom() % symbol_count[level];
 
     return &symbol_info[level][offset];
 } /* end choose_dataset() */
@@ -172,7 +171,7 @@ create_symbol_datatype(void)
 int
 generate_name(char *name_buf, unsigned level, unsigned count)
 {
-    assert(name_buf);
+    HDassert(name_buf);
     
     sprintf(name_buf, "%u-%04u", level, count);
 
@@ -198,13 +197,13 @@ generate_symbols(void)
     unsigned u, v;      /* Local index variables */
 
     for(u = 0; u < NLEVELS; u++) {
-        symbol_info[u] = (symbol_info_t *)malloc(symbol_count[u] * sizeof(symbol_info_t));
+        symbol_info[u] = (symbol_info_t *)HDmalloc(symbol_count[u] * sizeof(symbol_info_t));
         for(v = 0; v < symbol_count[u]; v++) {
             char name_buf[64];
 
             generate_name(name_buf, u, v);
-            symbol_info[u][v].name = (char *)malloc(strlen(name_buf) + 1);
-            strcpy(symbol_info[u][v].name, name_buf);
+            symbol_info[u][v].name = (char *)HDmalloc(HDstrlen(name_buf) + 1);
+            HDstrcpy(symbol_info[u][v].name, name_buf);
             symbol_info[u][v].dsid = -1;
             symbol_info[u][v].nrecords = 0;
         } /* end for */
@@ -234,8 +233,8 @@ shutdown_symbols(void)
     /* Clean up the symbols */
     for(u = 0; u < NLEVELS; u++) {
         for(v = 0; v < symbol_count[u]; v++)
-            free(symbol_info[u][v].name);
-        free(symbol_info[u]);
+            HDfree(symbol_info[u][v].name);
+        HDfree(symbol_info[u]);
     } /* end for */
 
     return 0;
@@ -262,31 +261,30 @@ print_metadata_retries_info(hid_t fid)
 
     /* Retrieve the collection of retries */
     if(H5Fget_metadata_read_retry_info(fid, &info) < 0)
-	return (-1);
+        return (-1);
 
     /* Print information for each non-NULL retries[i] */
     for(i = 0; i < H5F_NUM_METADATA_READ_RETRY_TYPES; i++) {
         unsigned power;
         unsigned j;
 
-	if(NULL == info.retries[i])
-	    continue;
-
-	fprintf(stderr, "Metadata read retries for item %u:\n", i);
-	power = 1;
-	for(j = 0; j < info.nbins; j++) {
-	    if(info.retries[i][j])
-		fprintf(stderr, "\t# of retries for %u - %u retries: %u\n", 
-		       power, (power * 10) - 1, info.retries[i][j]);
-	    power *= 10;
-	} /* end for */
+        if(NULL == info.retries[i])
+            continue;
+
+        HDfprintf(stderr, "Metadata read retries for item %u:\n", i);
+        power = 1;
+        for(j = 0; j < info.nbins; j++) {
+            if(info.retries[i][j])
+            HDfprintf(stderr, "\t# of retries for %u - %u retries: %u\n", 
+                power, (power * 10) - 1, info.retries[i][j]);
+            power *= 10;
+        } /* end for */
     } /* end for */
 
     /* Free memory for each non-NULL retries[i] */
     for(i = 0; i < H5F_NUM_METADATA_READ_RETRY_TYPES; i++)
         if(info.retries[i] != NULL)
-            free(info.retries[i]);
+            HDfree(info.retries[i]);
 
     return 0;
 } /* print_metadata_retries_info() */
-
diff --git a/test/swmr_common.h b/test/swmr_common.h
index 1778f8e..31b5fa6 100644
--- a/test/swmr_common.h
+++ b/test/swmr_common.h
@@ -16,15 +16,10 @@
 #ifndef _SWMR_COMMON_H
 #define _SWMR_COMMON_H
 
-/* Headers needed */
+/***********/
+/* Headers */
+/***********/
 
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-#include "hdf5.h"
 #include "h5test.h"
 
 /**********/
@@ -75,4 +70,3 @@ int shutdown_symbols(void);
 int print_metadata_retries_info(hid_t fid);
 
 #endif /* _SWMR_COMMON_H */
-
diff --git a/test/swmr_generator.c b/test/swmr_generator.c
index bbc1e18..3b782da 100644
--- a/test/swmr_generator.c
+++ b/test/swmr_generator.c
@@ -27,9 +27,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /****************/
@@ -95,8 +93,8 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 #endif /* FILLVAL_WORKS */
     unsigned u, v;      /* Local index variable */
 
-    assert(filename);
-    assert(index_type);
+    HDassert(filename);
+    HDassert(index_type);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -104,15 +102,15 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 
     /* Can create a file for SWMR support with: (a) (write+latest-format) or (b) (SWMR write+non-latest-format) */
     if(!swmr_write) {
-	if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
-	    return -1;
+        if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+            return -1;
     }
 
     /* There are two chunk indexes tested here.
      * With one unlimited dimension, we get the extensible array index
      * type, with two unlimited dimensions, we get a v-2 B-tree.
      */
-    if(!strcmp(index_type, "b2"))
+    if(!HDstrcmp(index_type, "b2"))
         max_dims[0] = H5S_UNLIMITED;
 
 #ifdef QAK
@@ -122,8 +120,8 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 
         mdc_config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
         H5Pget_mdc_config(fapl, &mdc_config);
-        fprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
-        fprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
+        HDfprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
+        HDfprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
         mdc_config.set_initial_size = 1;
         mdc_config.initial_size = 16 * 1024 * 1024;
         /* mdc_config.epoch_length = 5000; */
@@ -149,7 +147,7 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating file\n");
+        HDfprintf(stderr, "Creating file\n");
 
     /* Create the file */
     if((fid = H5Fcreate(filename, H5F_ACC_TRUNC | (swmr_write ? H5F_ACC_SWMR_WRITE : 0), fcpl, fapl)) < 0)
@@ -194,7 +192,7 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
     /* Currently fill values do not work because they can bump the dataspace
      * message to the second object header chunk.  We should enable the fillval
      * here when this is fixed.  -NAF 8/11/11 */
-    memset(&fillval, 0, sizeof(fillval));
+    HDmemset(&fillval, 0, sizeof(fillval));
     fillval.rec_id = (uint64_t)ULLONG_MAX;
     if(H5Pset_fill_value(dcpl, tid, &fillval) < 0)
         return -1;
@@ -202,7 +200,7 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating datasets\n");
+        HDfprintf(stderr, "Creating datasets\n");
 
     /* Create the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -220,7 +218,7 @@ gen_skeleton(const char *filename, unsigned verbose, unsigned swmr_write,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close everythign */
     if(H5Pclose(dcpl) < 0)
@@ -255,7 +253,7 @@ usage(void)
     printf("compression ('-c -1'), v1 b-tree indexing (-i b1), and will generate a random\n");
     printf("seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 } /* end usage() */
 
 int main(int argc, const char *argv[])
@@ -277,7 +275,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* Compress dataset chunks */
                     case 'c':
-                        comp_level = atoi(argv[u + 1]);
+                        comp_level = HDatoi(argv[u + 1]);
                         if(comp_level < -1 || comp_level > 9)
                             usage();
                         u += 2;
@@ -286,8 +284,8 @@ int main(int argc, const char *argv[])
                     /* Chunk index type */
                     case 'i':
                         index_type = argv[u + 1];
-                        if(strcmp(index_type, "ea")
-                                && strcmp(index_type, "b2"))
+                        if(HDstrcmp(index_type, "ea")
+                                && HDstrcmp(index_type, "b2"))
                             usage();
                         u += 2;
                         break;
@@ -295,7 +293,7 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         if(temp < 0)
                             usage();
                         else
@@ -325,30 +323,30 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\tswmr writes %s\n", swmr_write ? "on" : "off");
-        fprintf(stderr, "\tcompression level = %d\n", comp_level);
-        fprintf(stderr, "\tindex type = %s\n", index_type);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\tswmr writes %s\n", swmr_write ? "on" : "off");
+        HDfprintf(stderr, "\tcompression level = %d\n", comp_level);
+        HDfprintf(stderr, "\tindex type = %s\n", index_type);
     } /* end if */
     
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using generator random seed (used in sparse test only): %u\n", random_seed);
+    HDfprintf(stderr, "Using generator random seed (used in sparse test only): %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating skeleton file: %s\n", FILENAME);
+        HDfprintf(stderr, "Generating skeleton file: %s\n", FILENAME);
 
     /* Generate file skeleton */
     if(gen_skeleton(FILENAME, verbose, swmr_write, comp_level, index_type, random_seed) < 0) {
-        fprintf(stderr, "Error generating skeleton file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error generating skeleton file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_reader.c b/test/swmr_reader.c
index f7b7e96..24b5366 100644
--- a/test/swmr_reader.c
+++ b/test/swmr_reader.c
@@ -30,10 +30,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <unistd.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /********************/
@@ -90,10 +87,10 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
     hssize_t snpoints;          /* Number of elements in dataset */
     hsize_t start[2] = {0, 0}, count[2] = {1, 1};   /* Hyperslab selection values */
 
-    assert(fid >= 0);
-    assert(sym_name);
-    assert(record);
-    assert(rec_sid >= 0);
+    HDassert(fid >= 0);
+    HDassert(sym_name);
+    HDassert(record);
+    HDassert(rec_sid >= 0);
 
     /* Open dataset for symbol */
     if((dsid = H5Dopen2(fid, sym_name, H5P_DEFAULT)) < 0)
@@ -109,7 +106,7 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Symbol = '%s', # of records = %lld\n", sym_name, (long long)snpoints);
+        HDfprintf(stderr, "Symbol = '%s', # of records = %lld\n", sym_name, (long long)snpoints);
 
     /* Check if there are records for symbol */
     if(snpoints > 0) {
@@ -125,9 +122,9 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
 
         /* Verify record value */
         if(record->rec_id != start[1]) {
-            fprintf(stderr, "*** ERROR ***\n");
-            fprintf(stderr, "Incorrect record value!\n");
-            fprintf(stderr, "Symbol = '%s', # of records = %lld, record->rec_id = %llu\n", sym_name, (long long)snpoints, (unsigned long long)record->rec_id);
+            HDfprintf(stderr, "*** ERROR ***\n");
+            HDfprintf(stderr, "Incorrect record value!\n");
+            HDfprintf(stderr, "Symbol = '%s', # of records = %lld, record->rec_id = %llu\n", sym_name, (long long)snpoints, (unsigned long long)record->rec_id);
             return -1;
         } /* end if */
     } /* end if */
@@ -193,22 +190,22 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
     symbol_t record;            /* The record to read from the dataset */
     unsigned v;                 /* Local index variable */
 
-    assert(filename);
-    assert(nseconds != 0);
-    assert(poll_time != 0);
+    HDassert(filename);
+    HDassert(nseconds != 0);
+    HDassert(poll_time != 0);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record read, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Choosing datasets\n");
+        HDfprintf(stderr, "Choosing datasets\n");
 
     /* Allocate space for 'common' datasets, if any */
     if(ncommon > 0) {
         /* Allocate array to hold pointers to symbols for common datasets */
-        if(NULL == (sym_com = (symbol_info_t **)malloc(sizeof(symbol_info_t *) * ncommon)))
+        if(NULL == (sym_com = (symbol_info_t **)HDmalloc(sizeof(symbol_info_t *) * ncommon)))
             return -1;
 
         /* Open the common datasets */
@@ -217,19 +214,19 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
             /* Determine the offset of the symbol, within level 0 symbols */
             /* (level 0 symbols are the most common symbols) */
-            offset = (unsigned)(random() % symbol_count[0]);
+            offset = (unsigned)(HDrandom() % symbol_count[0]);
             sym_com[v] = &symbol_info[0][offset];
 
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Common symbol #%u = '%s'\n", v, symbol_info[0][offset].name);
+                HDfprintf(stderr, "Common symbol #%u = '%s'\n", v, symbol_info[0][offset].name);
         } /* end for */
     } /* end if */
 
     /* Allocate space for 'random' datasets, if any */
     if(nrandom > 0) {
         /* Allocate array to hold pointers to symbols for random datasets */
-        if(NULL == (sym_rand = (symbol_info_t **)malloc(sizeof(symbol_info_t *) * nrandom)))
+        if(NULL == (sym_rand = (symbol_info_t **)HDmalloc(sizeof(symbol_info_t *) * nrandom)))
             return -1;
 
         /* Determine the random datasets */
@@ -243,7 +240,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Random symbol #%u = '%s'\n", v, sym->name);
+                HDfprintf(stderr, "Random symbol #%u = '%s'\n", v, sym->name);
         } /* end for */
     } /* end if */
 
@@ -253,10 +250,10 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Reading records\n");
+        HDfprintf(stderr, "Reading records\n");
 
     /* Get the starting time */
-    start_time = time(NULL);
+    start_time = HDtime(NULL);
     curr_time = start_time;
 
     /* Create file access property list */
@@ -268,7 +265,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
         /* Emit informational message */
         if(verbose)
-            fprintf(stderr, "Opening file: %s\n", filename);
+            HDfprintf(stderr, "Opening file: %s\n", filename);
 
         /* Open the file */
         if((fid = H5Fopen(filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, fapl)) < 0)
@@ -278,14 +275,14 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
         if(ncommon > 0) {
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Checking common symbols\n");
+                HDfprintf(stderr, "Checking common symbols\n");
 
             /* Iterate over common datasets */
             for(v = 0; v < ncommon; v++) {
                 /* Check common dataset */
                 if(check_dataset(fid, verbose, sym_com[v]->name, &record, mem_sid) < 0)
                     return -1;
-                memset(&record, 0, sizeof(record));
+                HDmemset(&record, 0, sizeof(record));
             } /* end for */
         } /* end if */
 
@@ -293,30 +290,30 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
         if(nrandom > 0) {
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Checking random symbols\n");
+                HDfprintf(stderr, "Checking random symbols\n");
 
             /* Iterate over random datasets */
             for(v = 0; v < nrandom; v++) {
                 /* Check random dataset */
                 if(check_dataset(fid, verbose, sym_rand[v]->name, &record, mem_sid) < 0)
                     return -1;
-                memset(&record, 0, sizeof(record));
+                HDmemset(&record, 0, sizeof(record));
             } /* end for */
         } /* end if */
 
         /* Emit informational message */
         if(verbose)
-            fprintf(stderr, "Closing file\n");
+            HDfprintf(stderr, "Closing file\n");
             
         /* Close the file */
         if(H5Fclose(fid) < 0)
             return -1;
 
         /* Sleep for the appropriate # of seconds */
-        sleep(poll_time);
+        HDsleep(poll_time);
 
         /* Retrieve the current time */
-        curr_time = time(NULL);
+        curr_time = HDtime(NULL);
     } /* end while */
 
     /* Close the memory dataspace */
@@ -329,18 +326,18 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close 'random' datasets, if any */
     if(nrandom > 0) {
         /* Release array holding dataset ID's for random datasets */
-        free(sym_rand);
+        HDfree(sym_rand);
     } /* end if */
 
     /* Close 'common' datasets, if any */
     if(ncommon > 0) {
         /* Release array holding dataset ID's for common datasets */
-        free(sym_com);
+        HDfree(sym_com);
     } /* end if */
 
     return 0;
@@ -362,7 +359,7 @@ usage(void)
     printf("5 common symbols to poll ('-h 5'), 10 random symbols to poll ('-l 10'),\n");
     printf("and will generate a random seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 }
 
 int main(int argc, const char *argv[])
@@ -387,7 +384,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of common symbols to poll */
                     case 'h':
-                        ncommon = atoi(argv[u + 1]);
+                        ncommon = HDatoi(argv[u + 1]);
                         if(ncommon < 0)
                             usage();
                         u += 2;
@@ -395,7 +392,7 @@ int main(int argc, const char *argv[])
 
                     /* # of random symbols to poll */
                     case 'l':
-                        nrandom = atoi(argv[u + 1]);
+                        nrandom = HDatoi(argv[u + 1]);
                         if(nrandom < 0)
                             usage();
                         u += 2;
@@ -410,7 +407,7 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         if(temp < 0)
                             usage();
                         else
@@ -420,7 +417,7 @@ int main(int argc, const char *argv[])
 
                     /* # of seconds between polling */
                     case 's':
-                        poll_time = atoi(argv[u + 1]);
+                        poll_time = HDatoi(argv[u + 1]);
                         if(poll_time < 0)
                             usage();
                         u += 2;
@@ -433,7 +430,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nseconds = atol(argv[u]);
+                nseconds = HDatol(argv[u]);
                 if(nseconds <= 0)
                     usage();
 
@@ -448,31 +445,31 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
-        fprintf(stderr, "\t# of common symbols to poll = %d\n", ncommon);
-        fprintf(stderr, "\t# of random symbols to poll = %d\n", nrandom);
-        fprintf(stderr, "\t# of seconds to test = %ld\n", nseconds);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
+        HDfprintf(stderr, "\t# of common symbols to poll = %d\n", ncommon);
+        HDfprintf(stderr, "\t# of random symbols to poll = %d\n", nrandom);
+        HDfprintf(stderr, "\t# of seconds to test = %ld\n", nseconds);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using reader random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using reader random seed: %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0) {
-        fprintf(stderr, "Error generating symbol names!\n");
-        exit(1);
+        HDfprintf(stderr, "Error generating symbol names!\n");
+        HDexit(1);
     } /* end if */
 
     /* Create datatype for creating datasets */
@@ -481,28 +478,28 @@ int main(int argc, const char *argv[])
 
     /* Reading records from datasets */
     if(read_records(FILENAME, verbose, (unsigned long)nseconds, (unsigned)poll_time, (unsigned)ncommon, (unsigned)nrandom) < 0) {
-        fprintf(stderr, "Error reading records from datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error reading records from datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects created */
     if(H5Tclose(symbol_tid) < 0) {
-        fprintf(stderr, "Error closing symbol datatype!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing symbol datatype!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_remove_reader.c b/test/swmr_remove_reader.c
index 76c44fa..689b010 100644
--- a/test/swmr_remove_reader.c
+++ b/test/swmr_remove_reader.c
@@ -31,10 +31,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <unistd.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /*******************/
@@ -92,10 +89,10 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
     hssize_t snpoints;          /* Number of elements in dataset */
     hsize_t start[2] = {0, 0}, count[2] = {1, 1}; /* Hyperslab selection values */
 
-    assert(fid >= 0);
-    assert(sym_name);
-    assert(record);
-    assert(rec_sid >= 0);
+    HDassert(fid >= 0);
+    HDassert(sym_name);
+    HDassert(record);
+    HDassert(rec_sid >= 0);
 
     /* Open dataset for symbol */
     if((dsid = H5Dopen2(fid, sym_name, H5P_DEFAULT)) < 0)
@@ -111,13 +108,13 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Symbol = '%s', # of records = %lld\n", sym_name, (long long)snpoints);
+        HDfprintf(stderr, "Symbol = '%s', # of records = %lld\n", sym_name, (long long)snpoints);
 
     /* Check if there are records for symbol */
     if(snpoints > 0) {
         /* Choose a random record in the dataset, choosing the last record half
          * the time */
-        start[1] = (hsize_t)(random() % (snpoints * 2));
+        start[1] = (hsize_t)(HDrandom() % (snpoints * 2));
         if(start[1] > (hsize_t)(snpoints - 1))
             start[1] = (hsize_t)(snpoints - 1);
         if(H5Sselect_hyperslab(file_sid, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
@@ -140,9 +137,9 @@ check_dataset(hid_t fid, unsigned verbose, const char *sym_name, symbol_t *recor
          * chunk may be deleted before the object header has the updated
          * dimensions */
         if(record->rec_id != start[1] && record->rec_id != (uint64_t)0) {
-            fprintf(stderr, "*** ERROR ***\n");
-            fprintf(stderr, "Incorrect record value!\n");
-            fprintf(stderr, "Symbol = '%s', # of records = %lld, record->rec_id = %llx\n", sym_name, (long long)snpoints, (unsigned long long)record->rec_id);
+            HDfprintf(stderr, "*** ERROR ***\n");
+            HDfprintf(stderr, "Incorrect record value!\n");
+            HDfprintf(stderr, "Symbol = '%s', # of records = %lld, record->rec_id = %llx\n", sym_name, (long long)snpoints, (unsigned long long)record->rec_id);
             return -1;
         } /* end if */
     } /* end if */
@@ -208,22 +205,22 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
     symbol_t record;            /* The record to add to the dataset */
     unsigned v;                 /* Local index variable */
 
-    assert(filename);
-    assert(nseconds != 0);
-    assert(poll_time != 0);
+    HDassert(filename);
+    HDassert(nseconds != 0);
+    HDassert(poll_time != 0);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record written, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Choosing datasets\n");
+        HDfprintf(stderr, "Choosing datasets\n");
 
     /* Allocate space for 'common' datasets, if any */
     if(ncommon > 0) {
         /* Allocate array to hold pointers to symbols for common datasets */
-        if(NULL == (sym_com = (symbol_info_t **)malloc(sizeof(symbol_info_t *) * ncommon)))
+        if(NULL == (sym_com = (symbol_info_t **)HDmalloc(sizeof(symbol_info_t *) * ncommon)))
             return -1;
 
         /* Open the common datasets */
@@ -232,19 +229,19 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
             /* Determine the offset of the symbol, within level 0 symbols */
             /* (level 0 symbols are the most common symbols) */
-            offset = (unsigned)(random() % symbol_count[0]);
+            offset = (unsigned)(HDrandom() % symbol_count[0]);
             sym_com[v] = &symbol_info[0][offset];
 
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Common symbol #%u = '%s'\n", v, symbol_info[0][offset].name);
+                HDfprintf(stderr, "Common symbol #%u = '%s'\n", v, symbol_info[0][offset].name);
         } /* end for */
     } /* end if */
 
     /* Allocate space for 'random' datasets, if any */
     if(nrandom > 0) {
         /* Allocate array to hold pointers to symbols for random datasets */
-        if(NULL == (sym_rand = (symbol_info_t **)malloc(sizeof(symbol_info_t *) * nrandom)))
+        if(NULL == (sym_rand = (symbol_info_t **)HDmalloc(sizeof(symbol_info_t *) * nrandom)))
             return -1;
 
         /* Determine the random datasets */
@@ -258,7 +255,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Random symbol #%u = '%s'\n", v, sym->name);
+                HDfprintf(stderr, "Random symbol #%u = '%s'\n", v, sym->name);
         } /* end for */
     } /* end if */
 
@@ -268,10 +265,10 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Reading records\n");
+        HDfprintf(stderr, "Reading records\n");
 
     /* Get the starting time */
-    start_time = time(NULL);
+    start_time = HDtime(NULL);
     curr_time = start_time;
 
     /* Create file access property list */
@@ -283,7 +280,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
         /* Emit informational message */
         if(verbose)
-             fprintf(stderr, "Opening file: %s\n", filename);
+             HDfprintf(stderr, "Opening file: %s\n", filename);
 
         /* Open the file */
         if((fid = H5Fopen(filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, fapl)) < 0)
@@ -293,14 +290,14 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
         if(ncommon > 0) {
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Checking common symbols\n");
+                HDfprintf(stderr, "Checking common symbols\n");
 
             /* Iterate over common datasets */
             for(v = 0; v < ncommon; v++) {
                 /* Check common dataset */
                 if(check_dataset(fid, verbose, sym_com[v]->name, &record, mem_sid) < 0)
                     return -1;
-                memset(&record, 0, sizeof(record));
+                HDmemset(&record, 0, sizeof(record));
             } /* end for */
         } /* end if */
 
@@ -308,30 +305,30 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
         if(nrandom > 0) {
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Checking random symbols\n");
+                HDfprintf(stderr, "Checking random symbols\n");
 
             /* Iterate over random datasets */
             for(v = 0; v < nrandom; v++) {
                 /* Check random dataset */
                 if(check_dataset(fid, verbose, sym_rand[v]->name, &record, mem_sid) < 0)
                     return -1;
-                memset(&record, 0, sizeof(record));
+                HDmemset(&record, 0, sizeof(record));
             } /* end for */
         } /* end if */
 
         /* Emit informational message */
         if(verbose)
-            fprintf(stderr, "Closing file\n");
+            HDfprintf(stderr, "Closing file\n");
 
         /* Close the file */
         if(H5Fclose(fid) < 0)
             return -1;
 
         /* Sleep for the appropriate # of seconds */
-        sleep(poll_time);
+        HDsleep(poll_time);
 
         /* Retrieve the current time */
-        curr_time = time(NULL);
+        curr_time = HDtime(NULL);
     } /* end while */
 
     /* Close the fapl */
@@ -344,18 +341,18 @@ read_records(const char *filename, unsigned verbose, unsigned long nseconds,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close 'random' datasets, if any */
     if(nrandom > 0) {
         /* Release array holding dataset ID's for random datasets */
-        free(sym_rand);
+        HDfree(sym_rand);
     } /* end if */
 
     /* Close 'common' datasets, if any */
     if(ncommon > 0) {
         /* Release array holding dataset ID's for common datasets */
-        free(sym_com);
+        HDfree(sym_com);
     } /* end if */
 
     return 0;
@@ -375,7 +372,7 @@ usage(void)
     printf("5 common symbols to poll ('-h 5'), 10 random symbols to poll ('-l 10'),\n");
     printf("and will generate a random seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 } 
 
 int main(int argc, const char *argv[])
@@ -400,7 +397,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of common symbols to poll */
                     case 'h':
-                        ncommon = atoi(argv[u + 1]);
+                        ncommon = HDatoi(argv[u + 1]);
                         if(ncommon < 0)
                             usage();
                         u += 2;
@@ -408,7 +405,7 @@ int main(int argc, const char *argv[])
 
                     /* # of random symbols to poll */
                     case 'l':
-                        nrandom = atoi(argv[u + 1]);
+                        nrandom = HDatoi(argv[u + 1]);
                         if(nrandom < 0)
                             usage();
                         u += 2;
@@ -423,7 +420,7 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         if(temp < 0)
                             usage();
                         else
@@ -433,7 +430,7 @@ int main(int argc, const char *argv[])
 
                     /* # of seconds between polling */
                     case 's':
-                        poll_time = atoi(argv[u + 1]);
+                        poll_time = HDatoi(argv[u + 1]);
                         if(poll_time < 0)
                             usage();
                         u += 2;
@@ -446,7 +443,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nseconds = atol(argv[u]);
+                nseconds = HDatol(argv[u]);
                 if(nseconds <= 0)
                     usage();
 
@@ -461,31 +458,31 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
-        fprintf(stderr, "\t# of common symbols to poll = %d\n", ncommon);
-        fprintf(stderr, "\t# of random symbols to poll = %d\n", nrandom);
-        fprintf(stderr, "\t# of seconds to test = %ld\n", nseconds);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
+        HDfprintf(stderr, "\t# of common symbols to poll = %d\n", ncommon);
+        HDfprintf(stderr, "\t# of random symbols to poll = %d\n", nrandom);
+        HDfprintf(stderr, "\t# of seconds to test = %ld\n", nseconds);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using reader random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using reader random seed: %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0) {
-        fprintf(stderr, "Error generating symbol names!\n");
-        exit(1);
+        HDfprintf(stderr, "Error generating symbol names!\n");
+        HDexit(1);
     } /* end if */
 
     /* Create datatype for creating datasets */
@@ -494,28 +491,28 @@ int main(int argc, const char *argv[])
 
     /* Reading records from datasets */
     if(read_records(FILENAME, verbose, (unsigned long)nseconds, (unsigned)poll_time, (unsigned)ncommon, (unsigned)nrandom) < 0) {
-        fprintf(stderr, "Error reading records from datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error reading records from datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects created */
     if(H5Tclose(symbol_tid) < 0) {
-        fprintf(stderr, "Error closing symbol datatype!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing symbol datatype!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_remove_writer.c b/test/swmr_remove_writer.c
index a4f030c..8f111a2 100644
--- a/test/swmr_remove_writer.c
+++ b/test/swmr_remove_writer.c
@@ -33,9 +33,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /****************/
@@ -82,16 +80,16 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
     hsize_t dim[2];     /* Dataspace dimensions */
     unsigned u, v;      /* Local index variable */
 
-    assert(filename);
+    HDassert(filename);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
         return -1;
 
     if(!old) {
-	/* Set to use the latest library format */
-	if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
-	    return -1;
+        /* Set to use the latest library format */
+        if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+            return -1;
     }
 
 #ifdef QAK
@@ -101,8 +99,8 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
 
         mdc_config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
         H5Pget_mdc_config(fapl, &mdc_config);
-        fprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
-        fprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
+        HDfprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
+        HDfprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
         mdc_config.set_initial_size = 1;
         mdc_config.initial_size = 16 * 1024 * 1024;
         /* mdc_config.epoch_length = 5000; */
@@ -124,7 +122,7 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening datasets\n");
+        HDfprintf(stderr, "Opening datasets\n");
 
     /* Open the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -174,7 +172,7 @@ remove_records(hid_t fid, unsigned verbose, unsigned long nshrinks, unsigned lon
     hsize_t dim[2] = {1,0};             /* Dataspace dimensions */
     unsigned long u, v;                 /* Local index variables */
 
-    assert(fid >= 0);
+    HDassert(fid >= 0);
 
     /* Remove records from random datasets, according to frequency distribution */
     shrink_to_flush = flush_count;
@@ -186,7 +184,7 @@ remove_records(hid_t fid, unsigned verbose, unsigned long nshrinks, unsigned lon
         symbol = choose_dataset();
 
         /* Shrink the dataset's dataspace */
-        remove_size = (hsize_t)random() % MAX_REMOVE_SIZE + 1;
+        remove_size = (hsize_t)HDrandom() % MAX_REMOVE_SIZE + 1;
         if(remove_size > symbol->nrecords)
             symbol->nrecords = 0;
         else
@@ -214,7 +212,7 @@ remove_records(hid_t fid, unsigned verbose, unsigned long nshrinks, unsigned lon
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -240,7 +238,7 @@ usage(void)
     printf("Defaults to verbose (no '-q' given), latest format when opening file (no '-o' given),\n");
     printf("flushing every 1000 shrinks ('-f 1000'), and will generate a random seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 }
 
 int main(int argc, const char *argv[])
@@ -249,7 +247,7 @@ int main(int argc, const char *argv[])
     long nshrinks = 0;          /* # of times to shrink the dataset */
     long flush_count = 1000;    /* # of records to write between flushing file */
     unsigned verbose = 1;       /* Whether to emit some informational messages */
-    unsigned old = 0;       	/* Whether to use non-latest-format when opening file */
+    unsigned old = 0;           /* Whether to use non-latest-format when opening file */
     unsigned use_seed = 0;      /* Set to 1 if a seed was set on the command line */
     unsigned random_seed = 0;   /* Random # seed */
     unsigned u;                 /* Local index variable */
@@ -265,7 +263,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of records to write between flushing file */
                     case 'f':
-                        flush_count = atol(argv[u + 1]);
+                        flush_count = HDatol(argv[u + 1]);
                         if(flush_count < 0)
                             usage();
                         u += 2;
@@ -280,16 +278,16 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         random_seed = (unsigned)temp;
                         u += 2;
                         break;
 
-		    /* Use non-latest-format when opening file */
+                    /* Use non-latest-format when opening file */
                     case 'o':
-			old = 1;
-			u++;
-			break;
+                        old = 1;
+                        u++;
+                        break;
 
                     default:
                         usage();
@@ -298,7 +296,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nshrinks = atol(argv[u]);
+                nshrinks = HDatol(argv[u]);
                 if(nshrinks <= 0)
                     usage();
 
@@ -313,24 +311,24 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of shrinks between flushes = %ld\n", flush_count);
-        fprintf(stderr, "\t# of shrinks = %ld\n", nshrinks);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of shrinks between flushes = %ld\n", flush_count);
+        HDfprintf(stderr, "\t# of shrinks = %ld\n", nshrinks);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using writer random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using writer random seed: %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -338,12 +336,12 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
+        HDfprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
 
     /* Open file skeleton */
     if((fid = open_skeleton(FILENAME, verbose, old)) < 0) {
-        fprintf(stderr, "Error opening skeleton file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening skeleton file!\n");
+        HDexit(1);
     } /* end if */
 
     /* Send a message to indicate "H5Fopen" is complete--releasing the file lock */
@@ -351,32 +349,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Removing records\n");
+        HDfprintf(stderr, "Removing records\n");
 
     /* Remove records from datasets */
     if(remove_records(fid, verbose, (unsigned long)nshrinks, (unsigned long)flush_count) < 0) {
-        fprintf(stderr, "Error removing records from datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error removing records from datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects opened */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_sparse_reader.c b/test/swmr_sparse_reader.c
index c7841a9..f755cd2 100644
--- a/test/swmr_sparse_reader.c
+++ b/test/swmr_sparse_reader.c
@@ -31,11 +31,9 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
+#include "h5test.h"
 #include "swmr_common.h"
 
-#include <unistd.h>
-
 /****************/
 /* Local Macros */
 /****************/
@@ -98,10 +96,10 @@ check_dataset(hid_t fid, unsigned verbose, const symbol_info_t *symbol, symbol_t
     hsize_t start[2] = {0, 0};  /* Hyperslab selection values */
     hsize_t count[2] = {1, 1};  /* Hyperslab selection values */
 
-    assert(fid >= 0);
-    assert(symbol);
-    assert(record);
-    assert(rec_sid >= 0);
+    HDassert(fid >= 0);
+    HDassert(symbol);
+    HDassert(record);
+    HDassert(rec_sid >= 0);
 
     /* Open dataset for symbol */
     if((dsid = H5Dopen2(fid, symbol->name, H5P_DEFAULT)) < 0)
@@ -113,13 +111,13 @@ check_dataset(hid_t fid, unsigned verbose, const symbol_info_t *symbol, symbol_t
 
     /* Choose the random record in the dataset (will be the same as chosen by
      * the writer) */
-    start[1] = (hsize_t)random() % symbol->nrecords;
+    start[1] = (hsize_t)HDrandom() % symbol->nrecords;
     if(H5Sselect_hyperslab(file_sid, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
         return -1;
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Symbol = '%s', location = %lld\n", symbol->name, (long long)start);
+        HDfprintf(stderr, "Symbol = '%s', location = %lld\n", symbol->name, (long long)start);
 
     /* Read record from dataset */
     record->rec_id = (uint64_t)ULLONG_MAX;
@@ -128,10 +126,10 @@ check_dataset(hid_t fid, unsigned verbose, const symbol_info_t *symbol, symbol_t
 
     /* Verify record value */
     if(record->rec_id != start[1]) {
-        fprintf(stderr, "*** ERROR ***\n");
-        fprintf(stderr, "Incorrect record value!\n");
-        fprintf(stderr, "Symbol = '%s', location = %lld, record->rec_id = %llu\n", symbol->name, (long long)start, (unsigned long long)record->rec_id);
-        return(-1);
+        HDfprintf(stderr, "*** ERROR ***\n");
+        HDfprintf(stderr, "Incorrect record value!\n");
+        HDfprintf(stderr, "Symbol = '%s', location = %lld, record->rec_id = %llu\n", symbol->name, (long long)start, (unsigned long long)record->rec_id);
+        return -1;
     } /* end if */
 
     /* Close the dataset's dataspace */
@@ -187,8 +185,8 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
     unsigned long u;            /* Local index variable */
     hid_t fapl;
 
-    assert(filename);
-    assert(poll_time != 0);
+    HDassert(filename);
+    HDassert(poll_time != 0);
     
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -198,7 +196,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening file: %s\n", filename);
+        HDfprintf(stderr, "Opening file: %s\n", filename);
 
     /* Open the file */
     if((fid = H5Fopen(filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, fapl)) < 0)
@@ -211,11 +209,11 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
         return -1;
     if(H5Aclose(aid) < 0)
         return -1;
-    srandom(seed);
+    HDsrandom(seed);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record written, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Create a dataspace for the record to read */
     if((mem_sid = H5Screate(H5S_SCALAR)) < 0)
@@ -223,10 +221,10 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Reading records\n");
+        HDfprintf(stderr, "Reading records\n");
 
     /* Get the starting time */
-    start_time = time(NULL);
+    start_time = HDtime(NULL);
 
     /* Read records */
     for(u = 0; u < nrecords; u++) {
@@ -263,17 +261,17 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
             } /* end if */
 
             /* Check for timeout */
-            if(time(NULL) >= (time_t)(start_time + (time_t)TIMEOUT)) {
-                fprintf(stderr, "Reader timed out\n");
+            if(HDtime(NULL) >= (time_t)(start_time + (time_t)TIMEOUT)) {
+                HDfprintf(stderr, "Reader timed out\n");
                 return -1;
             } /* end if */
 
             /* Pause */
-            sleep(poll_time);
+            HDsleep(poll_time);
 
-	    /* Retrieve and print the collection of metadata read retries */
-	    if(print_metadata_retries_info(fid) < 0)
-		fprintf(stderr, "Warning: could not obtain metadata retries info\n");
+            /* Retrieve and print the collection of metadata read retries */
+            if(print_metadata_retries_info(fid) < 0)
+                HDfprintf(stderr, "Warning: could not obtain metadata retries info\n");
 
             /* Reopen the file */
             if(H5Fclose(fid) < 0)
@@ -285,23 +283,23 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
 
         /* Emit informational message */
         if(verbose)
-            fprintf(stderr, "Checking dataset %lu\n", u);
+            HDfprintf(stderr, "Checking dataset %lu\n", u);
 
         /* Check dataset */
         if(check_dataset(fid, verbose, symbol, &record, mem_sid) < 0)
             return -1;
-        memset(&record, 0, sizeof(record));
+        HDmemset(&record, 0, sizeof(record));
 
         /* Check for reopen */
         iter_to_reopen--;
         if(iter_to_reopen == 0) {
             /* Emit informational message */
             if(verbose)
-                fprintf(stderr, "Reopening file: %s\n", filename);
+                HDfprintf(stderr, "Reopening file: %s\n", filename);
 
-	    /* Retrieve and print the collection of metadata read retries */
-	    if(print_metadata_retries_info(fid) < 0)
-		fprintf(stderr, "Warning: could not obtain metadata retries info\n");
+            /* Retrieve and print the collection of metadata read retries */
+            if(print_metadata_retries_info(fid) < 0)
+                HDfprintf(stderr, "Warning: could not obtain metadata retries info\n");
 
             /* Reopen the file */
             if(H5Fclose(fid) < 0)
@@ -314,7 +312,7 @@ read_records(const char *filename, unsigned verbose, unsigned long nrecords,
 
     /* Retrieve and print the collection of metadata read retries */
     if(print_metadata_retries_info(fid) < 0)
-	fprintf(stderr, "Warning: could not obtain metadata retries info\n");
+        HDfprintf(stderr, "Warning: could not obtain metadata retries info\n");
 
     /* Close file */
     if(H5Fclose(fid) < 0)
@@ -342,7 +340,7 @@ usage(void)
     printf("Note that the # of records *must* be the same as that supplied to\n");
     printf("swmr_sparse_writer\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 } /* end usage() */
 
 int main(int argc, const char *argv[])
@@ -363,7 +361,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of reads between reopens */
                     case 'n':
-                        reopen_count = atoi(argv[u + 1]);
+                        reopen_count = HDatoi(argv[u + 1]);
                         if(reopen_count < 0)
                             usage();
                         u += 2;
@@ -377,7 +375,7 @@ int main(int argc, const char *argv[])
 
                     /* # of seconds between polling */
                     case 's':
-                        poll_time = atoi(argv[u + 1]);
+                        poll_time = HDatoi(argv[u + 1]);
                         if(poll_time < 0)
                             usage();
                         u += 2;
@@ -390,7 +388,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to read */
-                nrecords = atol(argv[u]);
+                nrecords = HDatol(argv[u]);
                 if(nrecords <= 0)
                     usage();
 
@@ -401,20 +399,20 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
-        fprintf(stderr, "\t# of reads between reopens = %d\n", reopen_count);
-        fprintf(stderr, "\t# of records to read = %ld\n", nrecords);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of seconds between polling = %d\n", poll_time);
+        HDfprintf(stderr, "\t# of reads between reopens = %d\n", reopen_count);
+        HDfprintf(stderr, "\t# of records to read = %ld\n", nrecords);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0) {
-        fprintf(stderr, "Error generating symbol names!\n");
-        exit(1);
+        HDfprintf(stderr, "Error generating symbol names!\n");
+        HDexit(1);
     } /* end if */
 
     /* Create datatype for creating datasets */
@@ -423,28 +421,28 @@ int main(int argc, const char *argv[])
 
     /* Reading records from datasets */
     if(read_records(FILENAME, verbose, (unsigned long) nrecords, (unsigned)poll_time, (unsigned)reopen_count) < 0) {
-        fprintf(stderr, "Error reading records from datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error reading records from datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects created */
     if(H5Tclose(symbol_tid) < 0) {
-        fprintf(stderr, "Error closing symbol datatype!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing symbol datatype!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_sparse_writer.c b/test/swmr_sparse_writer.c
index e752cb3..66afb3b 100644
--- a/test/swmr_sparse_writer.c
+++ b/test/swmr_sparse_writer.c
@@ -30,8 +30,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /****************/
@@ -80,7 +79,7 @@ open_skeleton(const char *filename, unsigned verbose)
     unsigned seed;      /* Seed for random number generator */
     unsigned u, v;      /* Local index variable */
 
-    assert(filename);
+    HDassert(filename);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -97,8 +96,8 @@ open_skeleton(const char *filename, unsigned verbose)
 
         mdc_config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
         H5Pget_mdc_config(fapl, &mdc_config);
-        fprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
-        fprintf(stderr,"mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
+        HDfprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
+        HDfprintf(stderr,"mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
         mdc_config.set_initial_size = 1;
         mdc_config.initial_size = 16 * 1024 * 1024;
         /* mdc_config.epoch_length = 5000; */
@@ -129,7 +128,7 @@ open_skeleton(const char *filename, unsigned verbose)
         return -1;
     if(H5Aclose(aid) < 0)
         return -1;
-    srandom(seed);
+    HDsrandom(seed);
 
     /* Open the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -181,11 +180,11 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     hsize_t dim[2] = {1,0};             /* Dataspace dimensions */
     unsigned long u, v;                 /* Local index variables */
 
-    assert(fid >= 0);
+    HDassert(fid >= 0);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record written, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Create a dataspace for the record to add */
     if((mem_sid = H5Screate(H5S_SCALAR)) < 0)
@@ -200,7 +199,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     mdc_config_orig.version = H5AC__CURR_CACHE_CONFIG_VERSION;
     if(H5Fget_mdc_config(fid, &mdc_config_orig) < 0)
         return -1;
-    memcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
+    HDmemcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
     mdc_config_cork.evictions_enabled = FALSE;
     mdc_config_cork.incr_mode = H5C_incr__off;
     mdc_config_cork.flash_incr_mode = H5C_flash_incr__off;
@@ -241,7 +240,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
             return -1;
 
         /* Get the coordinate to write */
-        start[1] = (hsize_t)random() % symbol->nrecords;
+        start[1] = (hsize_t)HDrandom() % symbol->nrecords;
 
         /* Set the record's ID (equal to its position) */
         record.rec_id = start[1];
@@ -345,7 +344,7 @@ usage(void)
     printf("Defaults to verbose (no '-q' given) and flushing every 1000 records\n");
     printf("('-f 1000')\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 }
 
 int main(int argc, const char *argv[])
@@ -366,7 +365,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of records to write between flushing file */
                     case 'f':
-                        flush_count = atol(argv[u + 1]);
+                        flush_count = HDatol(argv[u + 1]);
                         if(flush_count < 0)
                             usage();
                         u += 2;
@@ -385,7 +384,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nrecords = atol(argv[u]);
+                nrecords = HDatol(argv[u]);
                 if(nrecords <= 0)
                     usage();
 
@@ -400,14 +399,14 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
-        fprintf(stderr, "\t# of records to write = %ld\n", nrecords);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
+        HDfprintf(stderr, "\t# of records to write = %ld\n", nrecords);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -415,12 +414,12 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
+        HDfprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
 
     /* Open file skeleton */
     if((fid = open_skeleton(FILENAME, verbose)) < 0) {
-        fprintf(stderr, "Error opening skeleton file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening skeleton file!\n");
+        HDexit(1);
     } /* end if */
 
     /* Send a message to indicate "H5Fopen" is complete--releasing the file lock */
@@ -428,32 +427,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Adding records\n");
+        HDfprintf(stderr, "Adding records\n");
 
     /* Append records to datasets */
     if(add_records(fid, verbose, (unsigned long)nrecords, (unsigned long)flush_count) < 0) {
-        fprintf(stderr, "Error appending records to datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error appending records to datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects opened */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_start_write.c b/test/swmr_start_write.c
index 0069bc7..fe8690f 100644
--- a/test/swmr_start_write.c
+++ b/test/swmr_start_write.c
@@ -18,12 +18,12 @@
  * Created:     swmr_start_write.c
  *
  * Purpose:     This program enables SWMR writing mode via H5Fstart_swmr_write().
- *		It writes data to a randomly selected subset of the datasets
+ *              It writes data to a randomly selected subset of the datasets
  *              in the SWMR test file; and it is intended to run concurrently
  *              with the swmr_reader program.
  *
  * NOTE: The routines in this program are basically copied and modified from
- *	 swmr*.c.
+ *          swmr*.c.
  *-------------------------------------------------------------------------
  */
 
@@ -31,9 +31,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /********************/
@@ -61,12 +59,12 @@ static void usage(void);
  *              which will be used for testing H5Fstart_swmr_write().
  *
  * Parameters:  
- *		filename: The SWMR test file's name.
+ *              filename: The SWMR test file's name.
  *              verbose: whether verbose console output is desired.
  *              index_type: The chunk index type (b1 | b2 | ea | fa)
- *		random_seed: The random seed to store in the file.  
- *			     The sparse tests use this value.
- *	
+ *              random_seed: The random seed to store in the file.  
+ *              The sparse tests use this value.
+ *
  * Return:      Success:    the file ID
  *              Failure:     -1
  *
@@ -86,8 +84,8 @@ create_file(const char *filename, unsigned verbose,
     symbol_t fillval;   /* Dataset fill value */
 #endif /* FILLVAL_WORKS */
 
-    assert(filename);
-    assert(index_type);
+    HDassert(filename);
+    HDassert(index_type);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -101,7 +99,7 @@ create_file(const char *filename, unsigned verbose,
      * With one unlimited dimension, we get the extensible array index
      * type, with two unlimited dimensions, we get a v-2 B-tree.
      */
-    if(!strcmp(index_type, "b2"))
+    if(!HDstrcmp(index_type, "b2"))
         max_dims[0] = H5S_UNLIMITED;
 
     /* Create file creation property list */
@@ -110,7 +108,7 @@ create_file(const char *filename, unsigned verbose,
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating file without SWMR access\n");
+        HDfprintf(stderr, "Creating file without SWMR access\n");
 
     /* Create the file */
     if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
@@ -144,10 +142,10 @@ create_file(const char *filename, unsigned verbose,
  * Function:    create_datasets
  *
  * Purpose:     Create datasets (and keep them opened) which will be used for testing 
- *		H5Fstart_swmr_write().
+ *              H5Fstart_swmr_write().
  *
  * Parameters:  
- *		fid: file ID for the SWMR test file
+ *              fid: file ID for the SWMR test file
  *              comp_level: the compresssion level
  *              verbose: whether verbose console output is desired.
  *
@@ -187,7 +185,7 @@ create_datasets(hid_t fid, int comp_level, unsigned verbose)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating datasets\n");
+        HDfprintf(stderr, "Creating datasets\n");
 
     /* Create the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -207,10 +205,10 @@ create_datasets(hid_t fid, int comp_level, unsigned verbose)
  * Function:    create_close_datasets
  *
  * Purpose:     Create and close datasets which will be used for testing 
- *		H5Fstart_swmr_write().
+ *              H5Fstart_swmr_write().
  *
  * Parameters:  
- *		fid: file ID for the SWMR test file
+ *              fid: file ID for the SWMR test file
  *              comp_level: the compresssion level
  *              verbose: whether verbose console output is desired.
  *
@@ -250,7 +248,7 @@ create_close_datasets(hid_t fid, int comp_level, unsigned verbose)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating datasets\n");
+        HDfprintf(stderr, "Creating datasets\n");
 
     /* Create the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -284,7 +282,7 @@ create_close_datasets(hid_t fid, int comp_level, unsigned verbose)
  * Purpose:     Opens the HDF5 test file without SWMR access.
  *
  * Parameters:  
- *		filename: The filename of the HDF5 file to open
+ *              filename: The filename of the HDF5 file to open
  *              verbose: whether or not to emit verbose console messages
  *
  * Return:      Success: The file ID of the opened SWMR file
@@ -298,7 +296,7 @@ open_file(const char *filename, unsigned verbose)
     hid_t fid;          /* File ID for new HDF5 file */
     hid_t fapl;         /* File access property list */
 
-    assert(filename);
+    HDassert(filename);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
@@ -310,7 +308,7 @@ open_file(const char *filename, unsigned verbose)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening the file without SWMR access: %s\n", filename);
+        HDfprintf(stderr, "Opening the file without SWMR access: %s\n", filename);
 
     /* Open the file */
     if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
@@ -331,7 +329,7 @@ open_file(const char *filename, unsigned verbose)
  * Purpose:     Opens the datasets.
  *
  * Parameters:  
-*		filename: the filename of the SWMR HDF5 file to open
+ *              filename: the filename of the SWMR HDF5 file to open
  *              verbose: whether or not to emit verbose console messages
  *
  * Return:      Success: 0
@@ -346,7 +344,7 @@ open_datasets(hid_t fid, unsigned verbose)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening datasets\n");
+        HDfprintf(stderr, "Opening datasets\n");
 
     /* Open the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -367,7 +365,7 @@ open_datasets(hid_t fid, unsigned verbose)
  *              the SWMR test file.
  *
  * Parameters:  
-*		fid: The file ID of the SWMR HDF5 file
+ *              fid: The file ID of the SWMR HDF5 file
  *              verbose: Whether or not to emit verbose console messages
  *              nrecords: # of records to write to the datasets
  *              flush_count: # of records to write before flushing the file to disk
@@ -390,11 +388,11 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     unsigned long rec_to_flush;             /* # of records left to write before flush */
     unsigned long u, v;                     /* Local index variables */
 
-    assert(fid >= 0);
+    HDassert(fid >= 0);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record written, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Create a dataspace for the record to add */
     if((mem_sid = H5Screate(H5S_SCALAR)) < 0)
@@ -409,7 +407,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     mdc_config_orig.version = H5AC__CURR_CACHE_CONFIG_VERSION;
     if(H5Fget_mdc_config(fid, &mdc_config_orig) < 0)
         return -1;
-    memcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
+    HDmemcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
     mdc_config_cork.evictions_enabled = FALSE;
     mdc_config_cork.incr_mode = H5C_incr__off;
     mdc_config_cork.flash_incr_mode = H5C_flash_incr__off;
@@ -479,7 +477,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -513,7 +511,7 @@ usage(void)
     printf("v1 b-tree indexing (-i b1), compression ('-c -1'),\n");
     printf("will generate a random seed (no -r given), and verbose (no '-q' given)\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 } /* usage() */
 
 /*
@@ -525,16 +523,16 @@ usage(void)
  */
 int main(int argc, const char *argv[])
 {
-    hid_t fid;                  	/* File ID for file opened */
-    long nrecords = 0;          	/* # of records to append */
-    long flush_count = 10000;   	/* # of records to write between flushing file */
-    unsigned verbose = 1;       	/* Whether to emit some informational messages */
-    unsigned use_seed = 0;      	/* Set to 1 if a seed was set on the command line */
-    unsigned random_seed = 0;   	/* Random # seed */
-    int comp_level = -1;		/* Compression level (-1 is no compression) */
-    const char *index_type = "b1";	/* Chunk index type */
-    unsigned u;                 	/* Local index variable */
-    int temp;				/* Temporary variable */
+    hid_t fid;                      /* File ID for file opened */
+    long nrecords = 0;              /* # of records to append */
+    long flush_count = 10000;       /* # of records to write between flushing file */
+    unsigned verbose = 1;           /* Whether to emit some informational messages */
+    unsigned use_seed = 0;          /* Set to 1 if a seed was set on the command line */
+    unsigned random_seed = 0;       /* Random # seed */
+    int comp_level = -1;            /* Compression level (-1 is no compression) */
+    const char *index_type = "b1";  /* Chunk index type */
+    unsigned u;                     /* Local index variable */
+    int temp;                       /* Temporary variable */
 
     /* Parse command line options */
     if(argc < 2)
@@ -544,9 +542,9 @@ int main(int argc, const char *argv[])
         while(u < (unsigned)argc) {
             if(argv[u][0] == '-') {
                 switch(argv[u][1]) {
-		    /* Compress dataset chunks */
+                    /* Compress dataset chunks */
                     case 'c':
-                        comp_level = atoi(argv[u + 1]);
+                        comp_level = HDatoi(argv[u + 1]);
                         if(comp_level < -1 || comp_level > 9)
                             usage();
                         u += 2;
@@ -555,15 +553,15 @@ int main(int argc, const char *argv[])
                     /* Chunk index type */
                     case 'i':
                         index_type = argv[u + 1];
-                        if(strcmp(index_type, "ea")
-                                && strcmp(index_type, "b2"))
+                        if(HDstrcmp(index_type, "ea")
+                                && HDstrcmp(index_type, "b2"))
                             usage();
                         u += 2;
                         break;
 
                     /* # of records to write between flushing file */
                     case 'f':
-                        flush_count = atol(argv[u + 1]);
+                        flush_count = HDatol(argv[u + 1]);
                         if(flush_count < 0)
                             usage();
                         u += 2;
@@ -578,7 +576,7 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         if(temp < 0)
                             usage();
                         else
@@ -593,7 +591,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nrecords = atol(argv[u]);
+                nrecords = HDatol(argv[u]);
                 if(nrecords <= 0)
                     usage();
 
@@ -609,32 +607,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\tindex type = %s\n", index_type);
-        fprintf(stderr, "\tcompression level = %d\n", comp_level);
-        fprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
-        fprintf(stderr, "\t# of records to write = %ld\n", nrecords);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\tindex type = %s\n", index_type);
+        HDfprintf(stderr, "\tcompression level = %d\n", comp_level);
+        HDfprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
+        HDfprintf(stderr, "\t# of records to write = %ld\n", nrecords);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using writer random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using writer random seed: %u\n", random_seed);
 
     /* Create the test file */
     if((fid = create_file(FILENAME, verbose, index_type, random_seed)) < 0) {
-        fprintf(stderr, "Error creating the file...\n");
-        exit(1);
+        HDfprintf(stderr, "Error creating the file...\n");
+        HDexit(1);
     }
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -642,43 +640,43 @@ int main(int argc, const char *argv[])
 
     /* Create the datasets in the file */
     if(create_datasets(fid, comp_level, verbose) < 0) {
-        fprintf(stderr, "Error creating datasets...\n");
-        exit(1);
+        HDfprintf(stderr, "Error creating datasets...\n");
+        HDexit(1);
     }
 
     /* Enable SWMR writing mode */
     if(H5Fstart_swmr_write(fid) < 0) {
-        fprintf(stderr, "Error starting SWMR writing mode...\n");
-        exit(1);
+        HDfprintf(stderr, "Error starting SWMR writing mode...\n");
+        HDexit(1);
     }
 
 #ifdef OUT
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Creating and closing datasets: %s\n", FILENAME);
+        HDfprintf(stderr, "Creating and closing datasets: %s\n", FILENAME);
 
     /* Create and close the datasets in the file */
     if(create_close_datasets(fid, comp_level, verbose) < 0) {
-        fprintf(stderr, "Error creating datasets...\n");
-        exit(1);
+        HDfprintf(stderr, "Error creating datasets...\n");
+        HDexit(1);
     }
 
     /* Close the file */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     /* Open the file */
     if((fid = open_file(FILENAME, verbose)) < 0) {
-        fprintf(stderr, "Error opening the file...\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening the file...\n");
+        HDexit(1);
     }
 
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -686,19 +684,19 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening datasets: %s\n", FILENAME);
+        HDfprintf(stderr, "Opening datasets: %s\n", FILENAME);
 
     /* Open the file's datasets */
     if(open_datasets(fid, verbose) < 0) {
-        fprintf(stderr, "Error opening datasets...\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening datasets...\n");
+        HDexit(1);
     } /* end if */
 
 
     /* Enable SWMR writing mode */
     if(H5Fstart_swmr_write(fid) < 0) {
-        fprintf(stderr, "Error starting SWMR writing mode...\n");
-        exit(1);
+        HDfprintf(stderr, "Error starting SWMR writing mode...\n");
+        HDexit(1);
     }
 #endif
 
@@ -707,32 +705,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Adding records\n");
+        HDfprintf(stderr, "Adding records\n");
 
     /* Append records to datasets */
     if(add_records(fid, verbose, (unsigned long)nrecords, (unsigned long)flush_count) < 0) {
-        fprintf(stderr, "Error appending records to datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error appending records to datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing the file\n");
+        HDfprintf(stderr, "Closing the file\n");
 
     /* Close objects opened */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/swmr_writer.c b/test/swmr_writer.c
index 4ab6287..afeab7e 100644
--- a/test/swmr_writer.c
+++ b/test/swmr_writer.c
@@ -30,9 +30,7 @@
 /* Headers */
 /***********/
 
-#include <assert.h>
-#include <sys/time.h>
-
+#include "h5test.h"
 #include "swmr_common.h"
 
 /********************/
@@ -70,16 +68,16 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
     hid_t fapl;         /* File access property list */
     unsigned u, v;      /* Local index variable */
 
-    assert(filename);
+    HDassert(filename);
 
     /* Create file access property list */
     if((fapl = h5_fileaccess()) < 0)
         return -1;
 
     if(!old) {
-	/* Set to use the latest library format */
-	if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
-	    return -1;
+        /* Set to use the latest library format */
+        if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+            return -1;
     }
 
 #ifdef QAK
@@ -89,8 +87,8 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
 
         mdc_config.version = H5AC__CURR_CACHE_CONFIG_VERSION;
         H5Pget_mdc_config(fapl, &mdc_config);
-        fprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
-        fprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
+        HDfprintf(stderr, "mdc_config.initial_size = %lu\n", (unsigned long)mdc_config.initial_size);
+        HDfprintf(stderr, "mdc_config.epoch_length = %lu\n", (unsigned long)mdc_config.epoch_length);
         mdc_config.set_initial_size = 1;
         mdc_config.initial_size = 16 * 1024 * 1024;
         /* mdc_config.epoch_length = 5000; */
@@ -112,7 +110,7 @@ open_skeleton(const char *filename, unsigned verbose, unsigned old)
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening datasets\n");
+        HDfprintf(stderr, "Opening datasets\n");
 
     /* Open the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -162,11 +160,11 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     unsigned long rec_to_flush;             /* # of records left to write before flush */
     unsigned long u, v;                     /* Local index variables */
 
-    assert(fid >= 0);
+    HDassert(fid >= 0);
 
     /* Reset the record */
     /* (record's 'info' field might need to change for each record written, also) */
-    memset(&record, 0, sizeof(record));
+    HDmemset(&record, 0, sizeof(record));
 
     /* Create a dataspace for the record to add */
     if((mem_sid = H5Screate(H5S_SCALAR)) < 0)
@@ -181,7 +179,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
     mdc_config_orig.version = H5AC__CURR_CACHE_CONFIG_VERSION;
     if(H5Fget_mdc_config(fid, &mdc_config_orig) < 0)
         return -1;
-    memcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
+    HDmemcpy(&mdc_config_cork, &mdc_config_orig, sizeof(mdc_config_cork));
     mdc_config_cork.evictions_enabled = FALSE;
     mdc_config_cork.incr_mode = H5C_incr__off;
     mdc_config_cork.flash_incr_mode = H5C_flash_incr__off;
@@ -260,7 +258,7 @@ add_records(hid_t fid, unsigned verbose, unsigned long nrecords, unsigned long f
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing datasets\n");
+        HDfprintf(stderr, "Closing datasets\n");
 
     /* Close the datasets */
     for(u = 0; u < NLEVELS; u++)
@@ -288,7 +286,7 @@ usage(void)
     printf("Defaults to verbose (no '-q' given), latest format when opening file (no '-o' given),\n");
     printf("flushing every 10000 records ('-f 10000'), and will generate a random seed (no -r given).\n");
     printf("\n");
-    exit(1);
+    HDexit(1);
 }
 
 int main(int argc, const char *argv[])
@@ -297,7 +295,7 @@ int main(int argc, const char *argv[])
     long nrecords = 0;          /* # of records to append */
     long flush_count = 10000;   /* # of records to write between flushing file */
     unsigned verbose = 1;       /* Whether to emit some informational messages */
-    unsigned old = 0;       	/* Whether to use non-latest-format when opening file */
+    unsigned old = 0;           /* Whether to use non-latest-format when opening file */
     unsigned use_seed = 0;      /* Set to 1 if a seed was set on the command line */
     unsigned random_seed = 0;   /* Random # seed */
     unsigned u;                 /* Local index variable */
@@ -313,7 +311,7 @@ int main(int argc, const char *argv[])
                 switch(argv[u][1]) {
                     /* # of records to write between flushing file */
                     case 'f':
-                        flush_count = atol(argv[u + 1]);
+                        flush_count = HDatol(argv[u + 1]);
                         if(flush_count < 0)
                             usage();
                         u += 2;
@@ -328,12 +326,12 @@ int main(int argc, const char *argv[])
                     /* Random # seed */
                     case 'r':
                         use_seed = 1;
-                        temp = atoi(argv[u + 1]);
+                        temp = HDatoi(argv[u + 1]);
                         random_seed = (unsigned)temp;
                         u += 2;
                         break;
 
-		    /* Use non-latest-format when opening file */
+                    /* Use non-latest-format when opening file */
                     case 'o':
                         old = 1;
                         u++;
@@ -346,7 +344,7 @@ int main(int argc, const char *argv[])
             } /* end if */
             else {
                 /* Get the number of records to append */
-                nrecords = atol(argv[u]);
+                nrecords = HDatol(argv[u]);
                 if(nrecords <= 0)
                     usage();
 
@@ -361,24 +359,24 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose) {
-        fprintf(stderr, "Parameters:\n");
-        fprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
-        fprintf(stderr, "\t# of records to write = %ld\n", nrecords);
+        HDfprintf(stderr, "Parameters:\n");
+        HDfprintf(stderr, "\t# of records between flushes = %ld\n", flush_count);
+        HDfprintf(stderr, "\t# of records to write = %ld\n", nrecords);
     } /* end if */
 
     /* Set the random seed */
     if(0 == use_seed) {
         struct timeval t;
-        gettimeofday(&t, NULL);
+        HDgettimeofday(&t, NULL);
         random_seed = (unsigned)(t.tv_usec);
     } /* end if */
-    srandom(random_seed);
+    HDsrandom(random_seed);
     /* ALWAYS emit the random seed for possible debugging */
-    fprintf(stderr, "Using writer random seed: %u\n", random_seed);
+    HDfprintf(stderr, "Using writer random seed: %u\n", random_seed);
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Generating symbol names\n");
+        HDfprintf(stderr, "Generating symbol names\n");
 
     /* Generate dataset names */
     if(generate_symbols() < 0)
@@ -386,12 +384,12 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
+        HDfprintf(stderr, "Opening skeleton file: %s\n", FILENAME);
 
     /* Open file skeleton */
     if((fid = open_skeleton(FILENAME, verbose, old)) < 0) {
-        fprintf(stderr, "Error opening skeleton file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error opening skeleton file!\n");
+        HDexit(1);
     } /* end if */
 
     /* Send a message to indicate "H5Fopen" is complete--releasing the file lock */
@@ -399,32 +397,32 @@ int main(int argc, const char *argv[])
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Adding records\n");
+        HDfprintf(stderr, "Adding records\n");
 
     /* Append records to datasets */
     if(add_records(fid, verbose, (unsigned long)nrecords, (unsigned long)flush_count) < 0) {
-        fprintf(stderr, "Error appending records to datasets!\n");
-        exit(1);
+        HDfprintf(stderr, "Error appending records to datasets!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Releasing symbols\n");
+        HDfprintf(stderr, "Releasing symbols\n");
 
     /* Clean up the symbols */
     if(shutdown_symbols() < 0) {
-        fprintf(stderr, "Error releasing symbols!\n");
-        exit(1);
+        HDfprintf(stderr, "Error releasing symbols!\n");
+        HDexit(1);
     } /* end if */
 
     /* Emit informational message */
     if(verbose)
-        fprintf(stderr, "Closing objects\n");
+        HDfprintf(stderr, "Closing objects\n");
 
     /* Close objects opened */
     if(H5Fclose(fid) < 0) {
-        fprintf(stderr, "Error closing file!\n");
-        exit(1);
+        HDfprintf(stderr, "Error closing file!\n");
+        HDexit(1);
     } /* end if */
 
     return 0;
diff --git a/test/tbogus.h5 b/test/tbogus.h5
index 875fbd8..91ab76f 100644
Binary files a/test/tbogus.h5 and b/test/tbogus.h5 differ
diff --git a/test/testswmr.sh.in b/test/testswmr.sh.in
index 5165fd1..32f80ff 100644
--- a/test/testswmr.sh.in
+++ b/test/testswmr.sh.in
@@ -161,7 +161,7 @@ do
         echo "## Use H5Fstart_swmr_write() to enable SWMR writing mode"
         echo "###############################################################################"
 
-	# Remove any possible writer message file before launching writer
+        # Remove any possible writer message file before launching writer
         rm -f $WRITER_MESSAGE
         #
         # Launch the Writer
@@ -170,7 +170,7 @@ do
         ./swmr_start_write $compress $index_type $Nrecords $seed &
         pid_writer=$!
         $DPRINT pid_writer=$pid_writer
-	#
+
         # Wait for message from writer process before starting reader(s)
         WAIT_MESSAGE $WRITER_MESSAGE
 
@@ -228,7 +228,8 @@ do
             echo generator had error
             nerrors=`expr $nerrors + 1`
         fi
-	# Remove any possible writer message file before launching writer
+
+        # Remove any possible writer message file before launching writer
         rm -f $WRITER_MESSAGE
         #
         # Launch the Writer
@@ -237,7 +238,7 @@ do
         ./swmr_writer -o $Nrecords $seed &
         pid_writer=$!
         $DPRINT pid_writer=$pid_writer
-	#
+
         # Wait for message from writer process before starting reader(s)
         WAIT_MESSAGE $WRITER_MESSAGE
         #
@@ -286,7 +287,7 @@ do
         echo "###############################################################################"
         echo "## Remove test - test shrinking the dataset"
         echo "###############################################################################"
-	#
+
         # Remove any possible writer message file before launching writer
         rm -f $WRITER_MESSAGE
         # Launch the Remove Writer
@@ -295,7 +296,7 @@ do
         ./swmr_remove_writer -o $Nrecs_rem $seed &
         pid_writer=$!
         $DPRINT pid_writer=$pid_writer
-	#
+
         # Wait for message from writer process before starting reader(s)
         WAIT_MESSAGE $WRITER_MESSAGE
         #
@@ -361,7 +362,7 @@ do
             echo writer had error
             nerrors=`expr $nerrors + 1`
         fi
-	#
+
         # Remove any possible writer message file before launching writer
         rm -f $WRITER_MESSAGE
         #
@@ -371,7 +372,7 @@ do
         ./swmr_addrem_writer $Nrecords $seed &
         pid_writer=$!
         $DPRINT pid_writer=$pid_writer
-	#
+
         # Wait for message from writer process before starting reader(s)
         WAIT_MESSAGE $WRITER_MESSAGE
         #
@@ -431,7 +432,7 @@ do
             echo generator had error
             nerrors=`expr $nerrors + 1`
         fi
-	#
+
         # Remove any possible writer message file before launching writer
         rm -f $WRITER_MESSAGE
         # Launch the Sparse writer
@@ -439,7 +440,7 @@ do
         nice -n 20 ./swmr_sparse_writer $Nrecs_spa &
         pid_writer=$!
         $DPRINT pid_writer=$pid_writer
-	#
+
         # Wait for message from writer process before starting reader(s)
         WAIT_MESSAGE $WRITER_MESSAGE
         #
@@ -448,7 +449,7 @@ do
         pid_readers=""
         echo launch $Nrdrs_spa swmr_sparse_readers
         while [ $n -lt $Nrdrs_spa ]; do
-            # The sparse writer spits out a LOT of data so it's set to 'quiet'
+            # The sparse reader spits out a LOT of data so it's set to 'quiet'
             ./swmr_sparse_reader -q $Nrecs_spa &
             pid_readers="$pid_readers $!"
             n=`expr $n + 1`
@@ -495,3 +496,4 @@ else
     echo "SWMR tests failed with $nerrors errors."
     exit 1
 fi
+
diff --git a/test/tfile.c b/test/tfile.c
index 0974416..78ccfd0 100644
--- a/test/tfile.c
+++ b/test/tfile.c
@@ -53,6 +53,9 @@
 #define FILE1	"tfile1.h5"
 #define SFILE1	"sys_file1"
 
+#define REOPEN_FILE "tfile_reopen.h5"
+#define REOPEN_DSET "dset"
+
 #define F2_USERBLOCK_SIZE  (hsize_t)512
 #define F2_OFFSET_SIZE	   8
 #define F2_LENGTH_SIZE	   8
@@ -538,6 +541,59 @@ test_file_open(void)
 
 /****************************************************************
 **
+**  test_file_reopen(): File reopen test routine.
+**
+****************************************************************/
+static void
+test_file_reopen(void)
+{
+    hid_t   fid = -1;           /* file ID from initial open            */
+    hid_t   rfid = -1;          /* file ID from reopen                  */
+    hid_t   did = -1;           /* dataset ID (both opens)              */
+    hid_t   sid = -1;           /* dataspace ID for dataset creation    */
+    hsize_t dims = 6;           /* dataspace size                       */
+    herr_t  ret;                /* Generic return value                 */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing File Re-opening\n"));
+
+    /* Create file via first ID */
+    fid = H5Fcreate(REOPEN_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK_I(fid, "H5Fcreate");
+
+    /* Create a dataset in the file */
+    sid = H5Screate_simple(1, &dims, &dims);
+    CHECK_I(sid, "H5Screate_simple")
+    did = H5Dcreate2(fid, REOPEN_DSET, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK_I(did, "H5Dcreate2");
+
+    /* Close dataset and dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Reopen the file with a different file ID */
+    rfid = H5Freopen(fid);
+    CHECK_I(rfid, "H5Freopen");
+
+    /* Reopen the dataset through the reopen file ID */
+    did = H5Dopen2(rfid, REOPEN_DSET, H5P_DEFAULT);
+    CHECK_I(did, "H5Dopen2");
+
+    /* Close and clean up */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(rfid);
+    CHECK(ret, FAIL, "H5Fclose");
+    HDremove(REOPEN_FILE);
+
+}   /* test_file_reopen() */
+
+/****************************************************************
+**
 **  test_file_close():  low-level file close test routine.
 **                      It mainly tests behavior with close degree.
 **
@@ -3969,8 +4025,9 @@ test_file(void)
     /* Output message about test being performed */
     MESSAGE(5, ("Testing Low-Level File I/O\n"));
 
-    test_file_create();		/* Test file creation(also creation templates)*/
-    test_file_open();		/* Test file opening */
+    test_file_create();         /* Test file creation(also creation templates)*/
+    test_file_open();           /* Test file opening */
+    test_file_reopen();         /* Test file reopening */
     test_file_close();          /* Test file close behavior */
     test_get_file_id();         /* Test H5Iget_file_id */
     test_get_obj_ids();         /* Test H5Fget_obj_ids for Jira Issue 8528 */
diff --git a/test/tgenprop.c b/test/tgenprop.c
index c4f3a3f..b670c0d 100644
--- a/test/tgenprop.c
+++ b/test/tgenprop.c
@@ -1780,7 +1780,7 @@ test_genprop_path(void)
     CHECK_PTR(path, "H5P_get_class_path_test");
     if(HDstrcmp(path,CLASS1_PATH)!=0)
         TestErrPrintf("Class names don't match!, path=%s, CLASS1_PATH=%s\n",path,CLASS1_PATH);
-    HDfree(path);
+    H5free_memory(path);
 
     /* Create another new generic class, derived from first class */
     cid2 = H5Pcreate_class(cid1,CLASS2_NAME, NULL, NULL, NULL, NULL, NULL, NULL);
@@ -1805,7 +1805,7 @@ test_genprop_path(void)
     VERIFY(ret, 1, "H5Pequal");
 
     /* Release the path string */
-    HDfree(path);
+    H5free_memory(path);
 
     /* Close class */
     ret = H5Pclose_class(cid3);
diff --git a/test/tmisc.c b/test/tmisc.c
index 1298f6b..011486a 100644
--- a/test/tmisc.c
+++ b/test/tmisc.c
@@ -462,7 +462,8 @@ static void test_misc2_write_attribute(void)
     ret = H5Aread(att1, type, &data_check);
     CHECK(ret, FAIL, "H5Aread");
 
-    HDfree(data_check.string);
+    ret = H5Dvlen_reclaim(type, dataspace, H5P_DEFAULT, &data_check);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
 
     ret = H5Aclose(att1);
     CHECK(ret, FAIL, "HAclose");
@@ -487,7 +488,8 @@ static void test_misc2_write_attribute(void)
     ret = H5Aread(att2, type, &data_check);
     CHECK(ret, FAIL, "H5Aread");
 
-    HDfree(data_check.string);
+    ret = H5Dvlen_reclaim(type, dataspace, H5P_DEFAULT, &data_check);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
 
     ret = H5Aclose(att2);
     CHECK(ret, FAIL, "HAclose");
@@ -514,6 +516,7 @@ static void test_misc2_read_attribute(const char *filename, const char *att_name
 {
     hid_t file, root, att;
     hid_t type;
+    hid_t space;
     herr_t ret;
     misc2_struct data_check;
 
@@ -528,10 +531,17 @@ static void test_misc2_read_attribute(const char *filename, const char *att_name
     att = H5Aopen(root, att_name, H5P_DEFAULT);
     CHECK(att, FAIL, "H5Aopen");
 
+    space = H5Aget_space(att);
+    CHECK(space, FAIL, "H5Aget_space");
+
     ret = H5Aread(att, type, &data_check);
     CHECK(ret, FAIL, "H5Aread");
 
-    HDfree(data_check.string);
+    ret = H5Dvlen_reclaim(type, space, H5P_DEFAULT, &data_check);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    ret = H5Sclose(space);
+    CHECK(ret, FAIL, "H5Sclose");
 
     ret = H5Aclose(att);
     CHECK(ret, FAIL, "H5Aclose");
diff --git a/test/tvlstr.c b/test/tvlstr.c
index 02bd59d..dbc3083 100644
--- a/test/tvlstr.c
+++ b/test/tvlstr.c
@@ -604,7 +604,7 @@ static void test_write_vl_string_attribute(void)
     if(HDstrcmp(string_att_check,string_att) != 0)
         TestErrPrintf("VL string attributes don't match!, string_att=%s, string_att_check=%s\n",string_att,string_att_check);
 
-    HDfree(string_att_check);
+    H5free_memory(string_att_check);
     string_att_check = NULL;
 
     ret = H5Aclose(att);
@@ -626,7 +626,7 @@ static void test_write_vl_string_attribute(void)
     if(HDstrcmp(string_att_check,string_att_write) != 0)
         TestErrPrintf("VL string attributes don't match!, string_att_write=%s, string_att_check=%s\n",string_att_write,string_att_check);
 
-    HDfree(string_att_check);
+    H5free_memory(string_att_check);
     string_att_check = NULL;
 
     /* The attribute string written is freed below, in the test_read_vl_string_attribute() test */
@@ -687,7 +687,7 @@ static void test_read_vl_string_attribute(void)
     if(HDstrcmp(string_att_check,string_att) != 0)
         TestErrPrintf("VL string attributes don't match!, string_att=%s, string_att_check=%s\n",string_att,string_att_check);
 
-    HDfree(string_att_check);
+    H5free_memory(string_att_check);
     string_att_check = NULL;
 
     ret = H5Aclose(att);
@@ -704,7 +704,7 @@ static void test_read_vl_string_attribute(void)
         if(HDstrcmp(string_att_check,string_att_write) != 0)
             TestErrPrintf("VL string attributes don't match!, string_att_write=%s, string_att_check=%s\n",string_att_write,string_att_check);
 
-        HDfree(string_att_check);
+        H5free_memory(string_att_check);
         string_att_check = NULL;
     }
 
@@ -762,7 +762,8 @@ static void read_scalar_dset(hid_t file, hid_t type, hid_t space, char *name, ch
     if(HDstrcmp(data, data_read))
         TestErrPrintf("Expected %s for dataset %s but read %s\n", data, name, data_read);
 
-    HDfree(data_read);
+    ret = H5Dvlen_reclaim(type, space, H5P_DEFAULT, &data_read);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
 }
 
 /****************************************************************
diff --git a/test/vds.c b/test/vds.c
index eff01c1..1c3dcca 100644
--- a/test/vds.c
+++ b/test/vds.c
@@ -38,6 +38,7 @@ const char *FILENAME[] = {
     "vds_src_0",
     "vds_src_1",
     "vds%%_src",
+    "vds_dapl",
     NULL
 };
 
@@ -447,7 +448,7 @@ test_api_get_ex_dcpl(test_api_config_t config, hid_t fapl, hid_t dcpl,
     } /* end else */
 
     /* Verify examination DCPL is equal to original DCPL.  Do not compare the
-     * plist to itselt, and do not do the comparison if we reopened the file,
+     * plist to itself, and do not do the comparison if we reopened the file,
      * because in that case the extent of the source dset will not be corrent.
      */
     if((*ex_dcpl != dcpl) && (config != TEST_API_REOPEN_FILE)) {
@@ -11093,13 +11094,156 @@ error:
 
 

 /*-------------------------------------------------------------------------
+ * Function:    test_dapl_values
+ *
+ * Purpose:     Ensure that H5Dget_access_plist returns correct values.
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Dana Robinson
+ *              March 2016
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dapl_values(hid_t fapl_id)
+{
+    hid_t	fid = -1;           /* file to write to                     */
+    hid_t	dcpl_id = -1;       /* dataset creation properties          */
+    hid_t	dapl_id1 = -1;      /* dataset access properties            */
+    hid_t	dapl_id2 = -1;      /* dataset access properties            */
+    hid_t	vds_sid = -1;       /* vds data space                       */
+    hid_t	src_sid = -1;       /* source data space                    */
+    hid_t	did1 = -1;          /* dataset                              */
+    hid_t	did2 = -1;          /* dataset                              */
+    hsize_t start;              /* hyperslab start                      */
+    hsize_t stride;             /* hyperslab count                      */
+    hsize_t count;              /* hyperslab count                      */
+    hsize_t block;              /* hyperslab count                      */
+    hsize_t dims;               /* dataset size                         */
+    hsize_t max_dims;           /* dataset max size                     */
+    H5D_vds_view_t view;        /* view from dapl                       */
+    hsize_t gap_size;           /* gap size from dapl                   */
+    char    filename[1024];     /* file names                           */
+
+    TESTING("H5Dget_access_plist() returns dapl w/ correct values");
+
+    /* Create the file */
+    h5_fixname(FILENAME[5], fapl_id, filename, sizeof(filename));
+    if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dcpl and set up VDS mapping */
+    if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+        FAIL_STACK_ERROR
+    /* source */
+    dims = 42;
+    if((src_sid = H5Screate_simple(1, &dims, NULL)) < 0)
+        FAIL_STACK_ERROR
+    /* vds */
+    dims = 0;
+    max_dims = H5S_UNLIMITED;
+    if((vds_sid = H5Screate_simple(1, &dims, &max_dims)) < 0)
+        FAIL_STACK_ERROR
+    start = 0;
+    stride = 42;
+    count = H5S_UNLIMITED;
+    block = 42;
+    if(H5Sselect_hyperslab(vds_sid, H5S_SELECT_SET, &start, &stride, &count, &block) < 0)
+        FAIL_STACK_ERROR
+    /* map */
+    if(H5Pset_virtual(dcpl_id, vds_sid, "f-%b.h5", "/dset1", src_sid) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the dapls and set values
+     * There are two of them. The reason for this is that the only way
+     * to set the printf gap is to use the default view and using the
+     * default isn't the best way to test setting and getting the view.
+     */
+    /* dapl 1 */
+    if((dapl_id1 = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_virtual_view(dapl_id1, H5D_VDS_FIRST_MISSING) < 0)
+        FAIL_STACK_ERROR
+    /* dapl 2 */
+    if((dapl_id2 = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
+        FAIL_STACK_ERROR
+    /* default but we set it explicitly to be sure */
+    if(H5Pset_virtual_view(dapl_id2, H5D_VDS_LAST_AVAILABLE) < 0)
+        FAIL_STACK_ERROR
+    if(H5Pset_virtual_printf_gap(dapl_id2, 123) < 0)
+        FAIL_STACK_ERROR
+
+    /* Create the datasets */
+    if((did1 = H5Dcreate2(fid, "dset1", H5T_NATIVE_INT, vds_sid, H5P_DEFAULT, dcpl_id, dapl_id1)) < 0)
+        FAIL_STACK_ERROR
+    if((did2 = H5Dcreate2(fid, "dset2", H5T_NATIVE_INT, vds_sid, H5P_DEFAULT, dcpl_id, dapl_id2)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Close the dapls */
+    if(H5Pclose(dapl_id1) < 0)
+        FAIL_STACK_ERROR
+    dapl_id1 = -1;
+    if(H5Pclose(dapl_id2) < 0)
+        FAIL_STACK_ERROR
+    dapl_id2 = -1;
+
+    /* Get a data access property lists from the dataset */
+    if((dapl_id1 = H5Dget_access_plist(did1)) < 0)
+        FAIL_STACK_ERROR
+    if((dapl_id2 = H5Dget_access_plist(did2)) < 0)
+        FAIL_STACK_ERROR
+
+    /* Check the values from the dapls */
+    /* dapl 1 */
+    if(H5Pget_virtual_view(dapl_id1, &view) < 0)
+        FAIL_STACK_ERROR
+    if(H5D_VDS_FIRST_MISSING != view)
+        TEST_ERROR
+    /* dapl 2 */
+    if(H5Pget_virtual_view(dapl_id2, &view) < 0)
+        FAIL_STACK_ERROR
+    if(H5D_VDS_LAST_AVAILABLE != view)
+        TEST_ERROR
+    if(H5Pget_virtual_printf_gap(dapl_id2, &gap_size) < 0)
+        FAIL_STACK_ERROR
+    if(gap_size != 123)
+
+    /* Close everything */
+    if(H5Sclose(vds_sid) < 0) FAIL_STACK_ERROR
+    if(H5Sclose(src_sid) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(did1) < 0) FAIL_STACK_ERROR
+    if(H5Dclose(did2) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl_id1) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dapl_id2) < 0) FAIL_STACK_ERROR
+    if(H5Pclose(dcpl_id) < 0) FAIL_STACK_ERROR
+    if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+        H5Dclose(did1);
+        H5Dclose(did2);
+        H5Pclose(dapl_id1);
+        H5Pclose(dapl_id2);
+        H5Pclose(dcpl_id);
+        H5Sclose(vds_sid);
+        H5Sclose(src_sid);
+        H5Fclose(fid);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_dapl_values() */
+
+

+/*-------------------------------------------------------------------------
  * Function:    main
  *
  * Purpose:     Tests datasets with virtual layout
  *
- * Return:      Success:        exit(0)
- *
- *              Failure:        exit(1)
+ * Return:      EXIT_SUCCESS/EXIT_FAILURE
  *
  * Programmer:  Neil Fortner
  *              Tuesday, February 17, 2015
@@ -11119,7 +11263,7 @@ main(void)
     h5_reset();
     fapl = h5_fileaccess();
 
-    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
 
     for(test_api_config = (int)TEST_API_BASIC; test_api_config < (int)TEST_API_NTESTS; test_api_config++)
         nerrors += test_api((test_api_config_t)test_api_config, fapl);
@@ -11131,6 +11275,8 @@ main(void)
         nerrors += test_all(bit_config, fapl);
     } /* end for */
 
+    nerrors += test_dapl_values(fapl);
+
     /* Verify symbol table messages are cached */
     nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0);
 
@@ -11139,12 +11285,12 @@ main(void)
     printf("All virtual dataset tests passed.\n");
     h5_cleanup(FILENAME, fapl);
 
-    return 0;
+    return EXIT_SUCCESS;
 
 error:
     nerrors = MAX(1, nerrors);
     printf("***** %d VIRTUAL DATASET TEST%s FAILED! *****\n",
             nerrors, 1 == nerrors ? "" : "S");
-    return 1;
+    return EXIT_FAILURE;
 } /* end main() */
 
diff --git a/test/vds_swmr_reader.c b/test/vds_swmr_reader.c
index 34cb3eb..7a08c62 100644
--- a/test/vds_swmr_reader.c
+++ b/test/vds_swmr_reader.c
@@ -134,7 +134,7 @@ error:
         if(fsid >= 0)
             (void)H5Sclose(fsid);
         if(buffer != NULL)
-            free(buffer);
+            HDfree(buffer);
     } H5E_END_TRY
 
     HDfprintf(stderr, "ERROR: SWMR reader exited with errors\n");
diff --git a/test/vds_swmr_writer.c b/test/vds_swmr_writer.c
index fa1d1a0..1029192 100644
--- a/test/vds_swmr_writer.c
+++ b/test/vds_swmr_writer.c
@@ -52,7 +52,7 @@ main(int argc, char *argv[])
         return EXIT_FAILURE;
     }
 
-    file_number = atoi(argv[1]);
+    file_number = HDatoi(argv[1]);
     if(file_number < 0 || file_number >= N_SOURCES)
         TEST_ERROR
 
@@ -110,8 +110,8 @@ main(int argc, char *argv[])
             TEST_ERROR
 
         /* Wait one second between writing planes */
-        delay = time(0) + 1;
-        while(time(0) < delay)
+        delay = HDtime(0) + 1;
+        while(HDtime(0) < delay)
             ;
 
         /* Flush */
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index 57e5f17..8a0b8b7 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -109,10 +109,23 @@ TESTS =
 subdir = testpar
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -449,18 +462,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -473,7 +490,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -511,10 +527,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -525,6 +545,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -535,8 +556,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -551,6 +584,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -558,6 +593,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -581,6 +617,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -596,7 +633,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -605,8 +644,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -685,6 +726,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index 5612cbd..602dfef 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -3127,7 +3127,7 @@ insert_entry(H5C_t * cache_ptr,
         (entry_ptr->ver)++;
         entry_ptr->dirty = TRUE;
 
-        result = H5AC_insert_entry(file_ptr, H5P_DATASET_XFER_DEFAULT, &(types[0]),
+        result = H5AC_insert_entry(file_ptr, H5AC_ind_read_dxpl_id, &(types[0]),
                 entry_ptr->base_addr, (void *)(&(entry_ptr->header)), flags);
 
         if ( ( result < 0 ) ||
@@ -3526,7 +3526,7 @@ lock_entry(H5F_t * file_ptr,
 	HDassert( ! (entry_ptr->locked) );
 
         cache_entry_ptr = (H5C_cache_entry_t *)H5AC_protect(file_ptr, 
-                                        H5P_DATASET_XFER_DEFAULT,
+                                        H5AC_ind_read_dxpl_id,
                                         &(types[0]), entry_ptr->base_addr,
                                         &entry_ptr->base_addr, 
                                         H5AC__NO_FLAGS_SET);
@@ -3823,7 +3823,7 @@ move_entry(H5F_t * file_ptr,
 	    new_entry_ptr->local_len = tmp_len;
 	} /* end if */
 
-        result = H5AC_move_entry(file_ptr, &(types[0]), old_addr, new_addr);
+        result = H5AC_move_entry(file_ptr, &(types[0]), old_addr, new_addr, H5AC_ind_read_dxpl_id);
 
         if ( ( result < 0 ) || ( old_entry_ptr->header.addr != new_addr ) ) {
 
@@ -4206,7 +4206,7 @@ setup_cache_for_test(hid_t * fid_ptr,
      */
     if ( success ) { /* allocate space for test entries */
 
-        actual_base_addr = H5MF_alloc(file_ptr, H5FD_MEM_DEFAULT, H5P_DATASET_XFER_DEFAULT,
+        actual_base_addr = H5MF_alloc(file_ptr, H5FD_MEM_DEFAULT, H5AC_ind_read_dxpl_id,
                                       (hsize_t)(max_addr + BASE_ADDR));
 
         if ( actual_base_addr == HADDR_UNDEF ) {
@@ -5031,7 +5031,7 @@ unlock_entry(H5F_t * file_ptr,
             entry_ptr->dirty = TRUE;
         }
 
-        result = H5AC_unprotect(file_ptr, H5P_DATASET_XFER_DEFAULT, &(types[0]),
+        result = H5AC_unprotect(file_ptr, H5AC_ind_read_dxpl_id, &(types[0]),
                 entry_ptr->base_addr, (void *)(&(entry_ptr->header)), flags);
 
         if ( ( result < 0 ) ||
@@ -7208,10 +7208,6 @@ smoke_check_6(int metadata_write_strategy)
     hbool_t success = TRUE;
     int i;
     int max_nerrors;
-    int min_count;
-    int max_count;
-    int min_idx;
-    int max_idx;
     hid_t fid = -1;
     H5F_t * file_ptr = NULL;
     H5C_t * cache_ptr = NULL;
@@ -7270,9 +7266,6 @@ smoke_check_6(int metadata_write_strategy)
             }
         }
 
-        min_count = 100 / ((file_mpi_rank + 1) * (file_mpi_rank + 1));
-        max_count = min_count + 50;
-
         temp = virt_num_data_entries;
         virt_num_data_entries = NUM_DATA_ENTRIES;
 
@@ -7640,11 +7633,11 @@ main(int argc, char **argv)
 #endif
     /* enable the collective metadata read property */
     if ( world_mpi_rank != world_server_mpi_rank ) {
-        if ( H5Pset_coll_metadata_read(fapl, 1) < 0 ) {
+        if ( H5Pset_all_coll_metadata_ops(fapl, TRUE) < 0 ) {
 
             nerrors++;
             if ( verbose ) {
-                HDfprintf(stdout, "%d:%s: H5Pset_coll_metadata_read() failed 1.\n",
+                HDfprintf(stdout, "%d:%s: H5Pset_all_coll_metadata_ops() failed 1.\n",
                           world_mpi_rank, FUNC);
             }
         }
diff --git a/testpar/t_file.c b/testpar/t_file.c
index 70ca60e..0f1e63e 100644
--- a/testpar/t_file.c
+++ b/testpar/t_file.c
@@ -94,4 +94,120 @@ test_split_comm_access(void)
     VRFY((mrc==MPI_SUCCESS), "final MPI_Barrier succeeded");
 }
 
+void
+test_file_properties(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t fapl_id;		/* File access plist */
+    hbool_t is_coll;
+    const char *filename;
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+    int mpi_size, mpi_rank;
+    herr_t ret;                 /* Generic return value */
+
+    filename = (const char *)GetTestParameters();
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    /* setup file access plist */
+    fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+    VRFY((fapl_id >= 0), "H5Pcreate");
+	ret = H5Pset_fapl_mpio(fapl_id, comm, info);
+    VRFY((ret >= 0), "H5Pset_fapl_mpio");
+
+    /* create the file */
+    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* verify settings for file access properties */
+
+    /* Collective metadata writes */
+    ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
+    VRFY((is_coll == FALSE), "Incorrect property setting for coll metadata writes");
+
+    /* Collective metadata read API calling requirement */
+    ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
+    VRFY((is_coll == FALSE), "Incorrect property setting for coll metadata API calls requirement");
+
+    ret = H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Open the file with the MPI-IO driver */
+    ret = H5Pset_fapl_mpio(fapl_id, comm, info);
+    VRFY((ret >= 0), "H5Pset_fapl_mpio failed");
+    fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* verify settings for file access properties */
+
+    /* Collective metadata writes */
+    ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
+    VRFY((is_coll == FALSE), "Incorrect property setting for coll metadata writes");
+
+    /* Collective metadata read API calling requirement */
+    ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
+    VRFY((is_coll == FALSE), "Incorrect property setting for coll metadata API calls requirement");
+
+    ret = H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Open the file with the MPI-IO driver w collective settings */
+    ret = H5Pset_fapl_mpio(fapl_id, comm, info);
+    VRFY((ret >= 0), "H5Pset_fapl_mpio failed");
+    /* Collective metadata writes */
+    ret = H5Pset_coll_metadata_write(fapl_id, TRUE);
+    VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
+    /* Collective metadata read API calling requirement */
+    ret = H5Pset_all_coll_metadata_ops(fapl_id, TRUE);
+    VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
+    fid = H5Fopen(filename, H5F_ACC_RDWR, fapl_id);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* verify settings for file access properties */
+
+    /* Collective metadata writes */
+    ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
+    VRFY((is_coll == TRUE), "Incorrect property setting for coll metadata writes");
+
+    /* Collective metadata read API calling requirement */
+    ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
+    VRFY((is_coll == TRUE), "Incorrect property setting for coll metadata API calls requirement");
+
+    /* close fapl and retrieve it from file */
+    ret = H5Pclose(fapl_id);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+    fapl_id = -1;
+
+    fapl_id = H5Fget_access_plist(fid);
+    VRFY((fapl_id >= 0), "H5P_FILE_ACCESS");
+
+    /* verify settings for file access properties */
+
+    /* Collective metadata writes */
+    ret = H5Pget_coll_metadata_write(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_coll_metadata_write succeeded");
+    VRFY((is_coll == TRUE), "Incorrect property setting for coll metadata writes");
+
+    /* Collective metadata read API calling requirement */
+    ret = H5Pget_all_coll_metadata_ops(fapl_id, &is_coll);
+    VRFY((ret >= 0), "H5Pget_all_coll_metadata_ops succeeded");
+    VRFY((is_coll == TRUE), "Incorrect property setting for coll metadata API calls requirement");
+
+    /* close file */
+    ret = H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Release file-access plist */
+    ret = H5Pclose(fapl_id);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+} /* end test_file_properties() */
 
diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c
index f718f5b..c88cb86 100644
--- a/testpar/t_mdset.c
+++ b/testpar/t_mdset.c
@@ -888,7 +888,8 @@ void independent_group_read(void)
     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
 
     plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type);
-    H5Pset_coll_metadata_read(plist, 0);
+    H5Pset_all_coll_metadata_ops(plist, FALSE);
+
     fid = H5Fopen(filename, H5F_ACC_RDONLY, plist);
     H5Pclose(plist);
 
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index 1b856d0..8be1610 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -4948,9 +4948,9 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type)
 	/* set Parallel access with communicator */
 	ret = H5Pset_fapl_mpio(ret_pl, comm, info);
 	VRFY((ret >= 0), "");
-        ret = H5Pset_coll_metadata_read(ret_pl, true);
+        ret = H5Pset_all_coll_metadata_ops(ret_pl, TRUE);
 	VRFY((ret >= 0), "");
-        ret = H5Pset_coll_metadata_write(ret_pl, true);
+        ret = H5Pset_coll_metadata_write(ret_pl, TRUE);
 	VRFY((ret >= 0), "");
 	return(ret_pl);
     }
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 7ab479d..b7a68d9 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -272,9 +272,9 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type)
 	/* set Parallel access with communicator */
 	ret = H5Pset_fapl_mpio(ret_pl, comm, info);
 	VRFY((ret >= 0), "");
-        ret = H5Pset_coll_metadata_read(ret_pl, true);
+        ret = H5Pset_all_coll_metadata_ops(ret_pl, TRUE);
 	VRFY((ret >= 0), "");
-        ret = H5Pset_coll_metadata_write(ret_pl, true);
+        ret = H5Pset_coll_metadata_write(ret_pl, TRUE);
 	VRFY((ret >= 0), "");
 	return(ret_pl);
     }
@@ -351,6 +351,9 @@ int main(int argc, char **argv)
     AddTest("split", test_split_comm_access, NULL,
 	    "dataset using split communicators", PARATESTFILE);
 
+    AddTest("props", test_file_properties, NULL,
+	    "Coll Metadata file property settings", PARATESTFILE);
+
     AddTest("idsetw", dataset_writeInd, NULL,
 	    "dataset independent write", PARATESTFILE);
     AddTest("idsetr", dataset_readInd, NULL,
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 3597b17..7d6ff22 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -238,6 +238,7 @@ extern int dxfer_coll_type;
 /* Test program prototypes */
 void test_plist_ed(void);
 void zero_dim_dset(void);
+void test_file_properties(void);
 void multiple_dset_write(void);
 void multiple_group_write(void);
 void multiple_group_read(void);
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 1729f1e..5604dbf 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -108,10 +108,23 @@ TESTS =
 subdir = tools
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -417,18 +430,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -441,7 +458,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -479,10 +495,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -493,6 +513,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -503,8 +524,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -519,6 +552,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -526,6 +561,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -549,6 +585,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -564,7 +601,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -573,8 +612,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -653,6 +694,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5copy/Makefile.in b/tools/h5copy/Makefile.in
index e27113e..a462395 100644
--- a/tools/h5copy/Makefile.in
+++ b/tools/h5copy/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5copy
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -425,18 +438,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -449,7 +466,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -487,10 +503,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -501,6 +521,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -511,8 +532,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -527,6 +560,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -534,6 +569,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -557,6 +593,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -572,7 +609,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -581,8 +620,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -661,6 +702,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in
index 4cce3ed..1f9abe3 100644
--- a/tools/h5diff/Makefile.in
+++ b/tools/h5diff/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(am__EXEEXT_2) $(TEST_SCRIPT)
 subdir = tools/h5diff
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -432,18 +445,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -456,7 +473,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -494,10 +510,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -508,6 +528,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -518,8 +539,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -534,6 +567,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -541,6 +576,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -564,6 +600,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -579,7 +616,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -588,8 +627,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -668,6 +709,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5dump/CMakeTests.cmake b/tools/h5dump/CMakeTests.cmake
index c256e11..9f7e2b0 100644
--- a/tools/h5dump/CMakeTests.cmake
+++ b/tools/h5dump/CMakeTests.cmake
@@ -103,6 +103,12 @@
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tindicessub3.ddl
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tindicessub4.ddl
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tindicesyes.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dims.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dimsBlock2.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dimsBlockEq.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dimsCount2.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dimsCountEq.ddl
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dimsStride2.ddl
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tintsattrs.ddl
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tlarge_objname.ddl
       #${HDF5_TOOLS_SRC_DIR}/testfiles/tldouble.ddl
@@ -244,6 +250,7 @@
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tgrp_comments.h5
       ${HDF5_TOOLS_SRC_DIR}/testfiles/thlink.h5
       ${HDF5_TOOLS_SRC_DIR}/testfiles/thyperslab.h5
+      ${HDF5_TOOLS_SRC_DIR}/testfiles/tints4dims.h5
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tintsattrs.h5
       ${HDF5_TOOLS_SRC_DIR}/testfiles/tlarge_objname.h5
       #${HDF5_TOOLS_SRC_DIR}/testfiles/tldouble.h5
@@ -915,6 +922,18 @@
           texceedsubblock.out.err
           tindicesyes.out
           tindicesyes.out.err
+          tints4dims.out
+          tints4dims.out.err
+          tints4dimsBlock2.out
+          tints4dimsBlock2.out.err
+          tints4dimsBlockEq.out
+          tints4dimsBlockEq.out.err
+          tints4dimsCount2.out
+          tints4dimsCount2.out.err
+          tints4dimsCountEq.out
+          tints4dimsCountEq.out.err
+          tints4dimsStride2.out
+          tints4dimsStride2.out.err
           tintsattrs.out
           tintsattrs.out.err
           tlarge_objname.out
@@ -1236,6 +1255,12 @@
   ADD_H5_TEST (tdset-3s 0 --enable-error-stack -d "/dset1[1,1;;;]" tdset.h5)
   ADD_H5_TEST (tno-subset 0 --enable-error-stack --no-compact-subset -d "AHFINDERDIRECT::ah_centroid_t[0] it=0 tl=0" tno-subset.h5)
 
+  ADD_H5_TEST (tints4dimsCount2 0 --enable-error-stack -d FourDimInts -s 0,0,0,0 -c 2,2,2,2 tints4dims.h5)
+  ADD_H5_TEST (tints4dimsBlock2 0 --enable-error-stack -d FourDimInts -s 0,0,0,0 -c 1,1,1,1 -k 2,2,2,2 tints4dims.h5)
+  ADD_H5_TEST (tints4dimsStride2 0 --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,2,2 -c 2,2,2,2 tints4dims.h5)
+  ADD_H5_TEST (tints4dimsCountEq 0 --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,1,1 -k 1,2,1,1 -c 2,2,4,4 tints4dims.h5)
+  ADD_H5_TEST (tints4dimsBlockEq 0 --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,1,1 -c 2,2,1,1 -k 1,2,4,4 tints4dims.h5)
+
   # test printing characters in ASCII instead of decimal
   ADD_H5_TEST (tchar1 0 --enable-error-stack -r tchar.h5)
 
diff --git a/tools/h5dump/CMakeTestsVDS.cmake b/tools/h5dump/CMakeTestsVDS.cmake
index 58287fa..cc68896 100644
--- a/tools/h5dump/CMakeTestsVDS.cmake
+++ b/tools/h5dump/CMakeTestsVDS.cmake
@@ -22,6 +22,11 @@
       tvds_layout-3_2.ddl
       tvds_layout-4.ddl
       tvds_layout-5.ddl
+      vds-first.ddl
+      vds-gap1.ddl
+      vds-gap2.ddl
+      vds_layout-eiger.ddl
+      vds_layout-maxmin.ddl
   )
   set (HDF5_REFERENCE_TEST_VDS
       1_a.h5
@@ -47,6 +52,14 @@
       5_b.h5
       5_c.h5
       5_vds.h5
+      a.h5
+      b.h5
+      c.h5
+      d.h5
+      vds-percival-unlim-maxmin.h5
+      f-0.h5
+      f-3.h5
+      vds-eiger.h5
   )
   set (HDF5_ERROR_REFERENCE_VDS
   )
@@ -184,6 +197,12 @@
           tvds-4.out.err
           tvds-5.out
           tvds-5.out.err
+          vds-first.out
+          vds-first.out.err
+          vds-gap1.out
+          vds-gap1.out.err
+          vds-gap2.out
+          vds-gap2.out.err
           tvds_layout-1.out
           tvds_layout-1.out.err
           tvds_layout-2.out
@@ -196,6 +215,10 @@
           tvds_layout-4.out.err
           tvds_layout-5.out
           tvds_layout-5.out.err
+          vds_layout-eiger.out
+          vds_layout-eiger.out.err
+          vds_layout-maxmin.out
+          vds_layout-maxmin.out.err
     )
     set_tests_properties (H5DUMP_VDS-clearall-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles/vds")
     if (NOT "${last_vds_test}" STREQUAL "")
@@ -225,6 +248,9 @@
     ADD_H5_VDS_TEST (tvds-3_2 0 --enable-error-stack 3_2_vds.h5)
     ADD_H5_VDS_TEST (tvds-4 0 --enable-error-stack 4_vds.h5)
     ADD_H5_VDS_TEST (tvds-5 0 --enable-error-stack 5_vds.h5)
+    ADD_H5_VDS_TEST (vds-first 0 --vds-view-first-missing --enable-error-stack vds-percival-unlim-maxmin.h5)
+    ADD_H5_VDS_TEST (vds-gap1 0 -d /VDS-Eiger --vds-gap-size=1 --enable-error-stack vds-eiger.h5)
+    ADD_H5_VDS_TEST (vds-gap2 0 --vds-gap-size=2 --enable-error-stack vds-eiger.h5)
   endif (USE_FILTER_DEFLATE)
 
   # Layout read
@@ -235,4 +261,6 @@
     ADD_H5_VDS_LAYOUT (tvds_layout-3_2 0 --enable-error-stack 3_2_vds.h5)
     ADD_H5_VDS_LAYOUT (tvds_layout-4 0 --enable-error-stack 4_vds.h5)
     ADD_H5_VDS_LAYOUT (tvds_layout-5 0 --enable-error-stack 5_vds.h5)
+    ADD_H5_VDS_LAYOUT (vds_layout-eiger 0 --enable-error-stack vds-eiger.h5)
+    ADD_H5_VDS_LAYOUT (vds_layout-maxmin 0 --enable-error-stack vds-percival-unlim-maxmin.h5)
   endif (USE_FILTER_DEFLATE)
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index 540af74..6b8866e 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5dump
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -432,18 +445,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -456,7 +473,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -494,10 +510,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -508,6 +528,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -518,8 +539,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -534,6 +567,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -541,6 +576,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -564,6 +600,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -579,7 +616,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -588,8 +627,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -668,6 +709,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5dump/errfiles/tdset-2.err b/tools/h5dump/errfiles/tdset-2.err
index 775351e..e594c1b 100644
--- a/tools/h5dump/errfiles/tdset-2.err
+++ b/tools/h5dump/errfiles/tdset-2.err
@@ -19,7 +19,7 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
     minor: Object not found
 HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
   #000: (file name) line (number) in H5Lget_info(): unable to get link info
-    major: Symbol table
+    major: Links
     minor: Object not found
   #001: (file name) line (number) in H5L_get_info(): name doesn't exist
     major: Symbol table
diff --git a/tools/h5dump/errfiles/tperror.err b/tools/h5dump/errfiles/tperror.err
index 29f9e7f..b469029 100644
--- a/tools/h5dump/errfiles/tperror.err
+++ b/tools/h5dump/errfiles/tperror.err
@@ -19,7 +19,7 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
     minor: Object not found
 HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
   #000: (file name) line (number) in H5Lget_info(): unable to get link info
-    major: Symbol table
+    major: Links
     minor: Object not found
   #001: (file name) line (number) in H5L_get_info(): name doesn't exist
     major: Symbol table
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index ffba581..553db93 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -71,7 +71,7 @@ struct handler_t {
  */
 /* The following initialization makes use of C language cancatenating */
 /* "xxx" "yyy" into "xxxyyy". */
-static const char *s_opts = "hn*peyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o*b*F:s:S:A*q:z:m:RECM:O*N:";
+static const char *s_opts = "hn*peyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o*b*F:s:S:A*q:z:m:RECM:O*N:vG:";
 static struct long_options l_opts[] = {
     { "help", no_arg, 'h' },
     { "hel", no_arg, 'h' },
@@ -190,6 +190,8 @@ static struct long_options l_opts[] = {
     { "no-compact-subset", no_arg, 'C' },
     { "ddl", optional_arg, 'O' },
     { "any_path", require_arg, 'N' },
+    { "vds-view-first-missing", no_arg, 'v' },
+    { "vds-gap-size", require_arg, 'G' },
     { NULL, 0, '\0' }
 };
 
@@ -242,7 +244,7 @@ usage(const char *prog)
     PRINTVALSTREAM(rawoutstream, "     -o F, --output=F     Output raw data into file F\n");
     PRINTVALSTREAM(rawoutstream, "     -b B, --binary=B     Binary file output, of form B\n");
     PRINTVALSTREAM(rawoutstream, "     -O F, --ddl=F        Output ddl text into file F\n");
-    PRINTVALSTREAM(rawoutstream, "                          Do not use filename F to suppress ddl display\n");
+    PRINTVALSTREAM(rawoutstream, "                          Use blank(empty) filename F to suppress ddl display\n");
     PRINTVALSTREAM(rawoutstream, "--------------- Object Options ---------------\n");
     PRINTVALSTREAM(rawoutstream, "     -a P, --attribute=P  Print the specified attribute\n");
     PRINTVALSTREAM(rawoutstream, "                          If an attribute name contains a slash (/), escape the\n");
@@ -256,6 +258,8 @@ usage(const char *prog)
     PRINTVALSTREAM(rawoutstream, "                          P can be the absolute path or just a relative path.\n");
     PRINTVALSTREAM(rawoutstream, "     -A,   --onlyattr     Print the header and value of attributes\n");
     PRINTVALSTREAM(rawoutstream, "                          Optional value 0 suppresses printing attributes.\n");
+    PRINTVALSTREAM(rawoutstream, "     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.\n");
+    PRINTVALSTREAM(rawoutstream, "     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers\n");
     PRINTVALSTREAM(rawoutstream, "--------------- Object Property Options ---------------\n");
     PRINTVALSTREAM(rawoutstream, "     -i,   --object-ids   Print the object ids\n");
     PRINTVALSTREAM(rawoutstream, "     -p,   --properties   Print dataset filters, storage layout and fill value\n");
@@ -1121,6 +1125,16 @@ parse_start:
             }
             display_packed_bits = TRUE;
             break;
+        case 'v':
+            display_vds_first = TRUE;
+            break;
+        case 'G':
+            vds_gap_size = HDatoi(opt_arg);
+            if (vds_gap_size < 0) {
+                usage(h5tools_getprogname());
+                goto error;
+            }
+            break;
 
         /** begin XML parameters **/
         case 'x':
diff --git a/tools/h5dump/h5dump.h b/tools/h5dump/h5dump.h
index 2b1fb04..7cf4efd 100644
--- a/tools/h5dump/h5dump.h
+++ b/tools/h5dump/h5dump.h
@@ -78,6 +78,8 @@ int          enable_error_stack= FALSE; /* re-enable error stack */
 int          disable_compact_subset= FALSE; /* disable compact form of subset notation */
 int          display_packed_bits = FALSE; /*print 1-8 byte numbers as packed bits*/
 int          include_attrs     = TRUE; /* Display attributes */
+int          display_vds_first = FALSE; /* vds display to all by default*/
+int          vds_gap_size       = 0; /* vds skip missing files default is none */
 
 /* sort parameters */
 H5_index_t   sort_by           = H5_INDEX_NAME; /*sort_by [creation_order | name]  */
diff --git a/tools/h5dump/h5dump_ddl.c b/tools/h5dump/h5dump_ddl.c
index fd50710..09751ab 100644
--- a/tools/h5dump/h5dump_ddl.c
+++ b/tools/h5dump/h5dump_ddl.c
@@ -26,12 +26,12 @@
 
 typedef struct {
     hid_t fid;                      /* File ID being traversed */
-    char *op_name;					/* Object name wanted */
+    char *op_name;                    /* Object name wanted */
 } trav_handle_udata_t;
 
 typedef struct {
-	char *path;                     /* Path of object being searched */
-    char *op_name;					/* Object name wanted */
+    char *path;                     /* Path of object being searched */
+    char *op_name;                    /* Object name wanted */
 } trav_attr_udata_t;
 
 /* callback function used by H5Literate() */
@@ -90,7 +90,7 @@ dump_dataspace(hid_t space)
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-   
+
     h5tools_dump_dataspace(rawoutstream, outputformat, &ctx, space);
 }
 
@@ -117,19 +117,19 @@ dump_attr_cb(hid_t oid, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED *
     h5tools_context_t ctx;            /* print context  */
     h5tool_format_t  *outputformat = &h5tools_dataformat;
     h5tool_format_t   string_dataformat;
-    
+
     hid_t       attr_id;
     herr_t      ret = SUCCEED;
 
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-    
+
     attr_id = H5Aopen(oid, attr_name, H5P_DEFAULT);
     oid_output = display_oid;
     data_output = display_data;
     attr_data_output = display_attr_data;
-    
+
     string_dataformat = *outputformat;
 
     if (fp_format) {
@@ -155,7 +155,7 @@ dump_attr_cb(hid_t oid, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED *
         h5tools_setstatus(EXIT_FAILURE);
         ret = FAIL;
     }
-    
+
     return ret;
 }
 
@@ -185,6 +185,7 @@ static herr_t
 dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR_UNUSED *op_data)
 {
     hid_t       obj;
+    hid_t       dapl_id = H5P_DEFAULT;  /* dataset access property list ID */
     herr_t      ret = SUCCEED;
     char       *obj_path = NULL;    /* Full path of object */
     h5tools_str_t buffer;          /* string into which to render   */
@@ -199,7 +200,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-    
+
     string_dataformat = *outputformat;
 
     if (fp_format) {
@@ -222,8 +223,8 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
     if(!obj_path) {
         ret = FAIL;
         goto done;
-    } 
-    
+    }
+
     HDstrcpy(obj_path, prefix);
     HDstrcat(obj_path, "/");
     HDstrcat(obj_path, name);
@@ -269,7 +270,20 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
             break;
 
         case H5O_TYPE_DATASET:
-            if((obj = H5Dopen2(group, name, H5P_DEFAULT)) >= 0) {
+            if(display_data) {
+                if ((dapl_id = H5Pcreate(H5P_DATASET_ACCESS)) < 0) {
+                    error_msg("error in creating default access property list ID\n");
+                }
+                if (display_vds_first) {
+                    if(H5Pset_virtual_view(dapl_id, H5D_VDS_FIRST_MISSING) < 0)
+                        error_msg("error in setting access property list ID, virtual_view\n");
+                }
+                if (vds_gap_size > 0) {
+                    if(H5Pset_virtual_printf_gap(dapl_id, (hsize_t)vds_gap_size) < 0)
+                        error_msg("error in setting access property list ID, virtual_printf_gap\n");
+                }
+            }
+            if((obj = H5Dopen2(group, name, dapl_id)) >= 0) {
                 if(oinfo.rc > 1 || hit_elink) {
                     obj_t  *found_obj;    /* Found object */
 
@@ -308,9 +322,11 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
 
                         h5tools_setstatus(EXIT_FAILURE);
                         ret = FAIL;
+                        if (dapl_id != H5P_DEFAULT)
+                            H5Pclose(dapl_id);
                         H5Dclose(obj);
                         goto done;
-                    } 
+                    }
                     else if(found_obj->displayed) {
                         ctx.need_prefix = TRUE;
                         h5tools_simple_prefix(rawoutstream, outputformat, &ctx, (hsize_t)0, 0);
@@ -347,18 +363,24 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
                             h5tools_str_append(&buffer, "%s", h5tools_dump_header_format->datasetend);
                         h5tools_render_element(rawoutstream, outputformat, &ctx, &buffer, &curr_pos, (size_t)outputformat->line_ncols, (hsize_t)0, (hsize_t)0);
 
+                        if (dapl_id != H5P_DEFAULT)
+                            H5Pclose(dapl_id);
                         H5Dclose(obj);
                         goto done;
-                    } 
+                    }
                     else {
                         found_obj->displayed = TRUE;
                     }
                 } /* end if */
 
                 dump_function_table->dump_dataset_function(obj, name, NULL);
+                if (dapl_id != H5P_DEFAULT)
+                    H5Pclose(dapl_id);
                 H5Dclose(obj);
-            } 
+            }
             else {
+                if (dapl_id)
+                    H5Pclose(dapl_id && dapl_id != H5P_DEFAULT);
                 error_msg("unable to dump dataset \"%s\"\n", name);
                 h5tools_setstatus(EXIT_FAILURE);
                 ret = FAIL;
@@ -370,7 +392,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
                 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);
@@ -408,7 +430,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
                 error_msg("unable to get link value\n");
                 h5tools_setstatus(EXIT_FAILURE);
                 ret = FAIL;
-            } 
+            }
             else {
                 /* print the value of a soft link */
                 /* Standard DDL: no modification */
@@ -558,7 +580,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void H5_ATTR
 done:
 
     h5tools_str_close(&buffer);
-    
+
     if(obj_path)
         HDfree(obj_path);
     return ret;
@@ -650,7 +672,7 @@ dump_named_datatype(hid_t tid, const char *name)
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-    
+
     string_dataformat = *outputformat;
 
     if (fp_format) {
@@ -685,7 +707,7 @@ dump_named_datatype(hid_t tid, const char *name)
     }
 
     ctx.need_prefix = TRUE;
-    
+
     /* Render the element */
     h5tools_str_reset(&buffer);
     h5tools_str_append(&buffer, "%s \"%s\" %s",
@@ -718,7 +740,7 @@ dump_named_datatype(hid_t tid, const char *name)
         else
             found_obj->displayed = TRUE;
     } /* end if */
-    
+
     /* Render the element */
     h5tools_str_reset(&buffer);
     h5tools_print_datatype(rawoutstream, &buffer, outputformat, &ctx, tid, FALSE);
@@ -726,7 +748,7 @@ dump_named_datatype(hid_t tid, const char *name)
     if(H5Tget_class(tid) != H5T_COMPOUND) {
         h5tools_str_append(&buffer, ";");
     }
-    
+
     h5tools_render_element(rawoutstream, outputformat, &ctx, &buffer, &curr_pos, (size_t)outputformat->line_ncols, (hsize_t)0, (hsize_t)0);
 
     /* print attributes */
@@ -813,7 +835,7 @@ dump_group(hid_t gid, const char *name)
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-    
+
     string_dataformat = *outputformat;
 
     if (fp_format) {
@@ -839,7 +861,7 @@ dump_group(hid_t gid, const char *name)
                         h5tools_dump_header_format->groupbegin, name,
                         h5tools_dump_header_format->groupblockbegin);
     h5tools_render_element(rawoutstream, outputformat, &ctx, &buffer, &curr_pos, (size_t)outputformat->line_ncols, (hsize_t)0, (hsize_t)0);
-    
+
     ctx.indent_level++;
     dump_indent += COL;
 
@@ -948,7 +970,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
     HDmemset(&ctx, 0, sizeof(ctx));
     ctx.indent_level = dump_indent/COL;
     ctx.cur_column = dump_indent;
-    
+
     string_dataformat = *outputformat;
 
     if (fp_format) {
@@ -982,7 +1004,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
 
     ctx.need_prefix = TRUE;
     h5tools_simple_prefix(rawoutstream, outputformat, &ctx, (hsize_t)0, 0);
-    
+
      /* Render the element */
     h5tools_str_reset(&buffer);
     h5tools_str_append(&buffer, "%s \"%s\" %s",
@@ -994,7 +1016,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
 
     dump_indent += COL;
     ctx.indent_level++;
-    
+
     type = H5Dget_type(did);
     h5dump_type_table = type_table;
     h5tools_dump_datatype(rawoutstream, outputformat, &ctx, type);
@@ -1018,6 +1040,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
     if(display_data) {
         int  data_loop = 1;
         int  i;
+
         if(display_packed_bits)
             data_loop = packed_bits_num;
         for(i=0; i<data_loop; i++) {
@@ -1042,7 +1065,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
                 h5tools_str_reset(&buffer);
                 h5tools_str_append(&buffer, "DATA{ not yet implemented.}");
                 h5tools_render_element(rawoutstream, outputformat, &ctx, &buffer, &curr_pos, (size_t)outputformat->line_ncols, (hsize_t)0, (hsize_t)0);
-                
+
                 ctx.indent_level--;
                 break;
 
@@ -1079,7 +1102,7 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
 
     ctx.need_prefix = TRUE;
     h5tools_simple_prefix(rawoutstream, outputformat, &ctx, (hsize_t)0, 0);
-    
+
     /* Render the element */
     h5tools_str_reset(&buffer);
     if(HDstrlen(h5tools_dump_header_format->datasetblockend)) {
@@ -1189,7 +1212,7 @@ dump_fcpl(hid_t fid)
     fdriver=H5Pget_driver(fapl);
     H5Pclose(fapl);
 #endif
-    
+
    /*-------------------------------------------------------------------------
     * SUPER_BLOCK
     *-------------------------------------------------------------------------
@@ -1308,54 +1331,54 @@ static herr_t
 attr_search(hid_t oid, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED *ainfo, void *_op_data)
 {
     herr_t              ret = SUCCEED;
-    int 				i;
-    int 				j;
-    int 				k;
-    char			   *obj_op_name;
+    int                 i;
+    int                 j;
+    int                 k;
+    char               *obj_op_name;
     char               *obj_name;
-	trav_attr_udata_t  *attr_data = (trav_attr_udata_t*)_op_data;
+    trav_attr_udata_t  *attr_data = (trav_attr_udata_t*)_op_data;
     char               *buf = attr_data->path;
-    char			   *op_name = attr_data->op_name;
+    char               *op_name = attr_data->op_name;
 
     j = (int)HDstrlen(op_name) - 1;
     /* find the last / */
     while(j >= 0) {
-    	if (op_name[j] == '/' && (j==0 || (j>0 && op_name[j-1]!='\\')))
-    		break;
-    	j--;
+        if (op_name[j] == '/' && (j==0 || (j>0 && op_name[j-1]!='\\')))
+            break;
+        j--;
     }
 
     obj_op_name = h5tools_str_replace(op_name + j + 1, "\\/", "/");
 
     if(obj_op_name == NULL) {
-    	h5tools_setstatus(EXIT_FAILURE);
-    	ret = FAIL;
+        h5tools_setstatus(EXIT_FAILURE);
+        ret = FAIL;
     }
     else {
-    	if(HDstrcmp(attr_name, obj_op_name)==0) {
-    	    /* object name */
-    	    i = (int)HDstrlen(buf);
-    	    j = (int)HDstrlen(op_name);
-    	    k = (size_t)i + 1 + (size_t)j + 1 + 2;
-    	    obj_name = (char *)HDmalloc((size_t)k);
-    	    if(obj_name == NULL) {
-    	    	h5tools_setstatus(EXIT_FAILURE);
-    	    	ret = FAIL;
-    	    }
-    	    else {
-    	    	HDmemset(obj_name, '\0', (size_t)k);
-    	        if(op_name[0] != '/') {
-    	        	HDstrncat(obj_name, buf, (size_t)i + 1);
-    	        	if(buf[i-1] != '/')
-    	            	HDstrncat(obj_name, "/", (size_t)2);
-    	        }
-    	        HDstrncat(obj_name, op_name, (size_t)j + 1);
-
-    	    	handle_attributes(oid, obj_name, NULL, 0, NULL);
-    	    	HDfree(obj_name);
-        	}
-    	}
-    	HDfree(obj_op_name);
+        if(HDstrcmp(attr_name, obj_op_name)==0) {
+            /* object name */
+            i = (int)HDstrlen(buf);
+            j = (int)HDstrlen(op_name);
+            k = (size_t)i + 1 + (size_t)j + 1 + 2;
+            obj_name = (char *)HDmalloc((size_t)k);
+            if(obj_name == NULL) {
+                h5tools_setstatus(EXIT_FAILURE);
+                ret = FAIL;
+            }
+            else {
+                HDmemset(obj_name, '\0', (size_t)k);
+                if(op_name[0] != '/') {
+                    HDstrncat(obj_name, buf, (size_t)i + 1);
+                    if(buf[i-1] != '/')
+                        HDstrncat(obj_name, "/", (size_t)2);
+                }
+                HDstrncat(obj_name, op_name, (size_t)j + 1);
+
+                handle_attributes(oid, obj_name, NULL, 0, NULL);
+                HDfree(obj_name);
+            }
+        }
+        HDfree(obj_op_name);
     }
     return ret;
 } /* end attr_search() */
@@ -1363,7 +1386,7 @@ attr_search(hid_t oid, const char *attr_name, const H5A_info_t H5_ATTR_UNUSED *a
 static herr_t
 obj_search(const char *path, const H5O_info_t *oi, const char H5_ATTR_UNUSED *already_visited, void *_op_data)
 {
-	trav_handle_udata_t  *handle_data = (trav_handle_udata_t*)_op_data;
+    trav_handle_udata_t  *handle_data = (trav_handle_udata_t*)_op_data;
     char *op_name = (char*)handle_data->op_name;
 
     trav_attr_udata_t  attr_data;
@@ -1372,22 +1395,22 @@ obj_search(const char *path, const H5O_info_t *oi, const char H5_ATTR_UNUSED *al
     H5Aiterate_by_name(handle_data->fid, path, H5_INDEX_NAME, H5_ITER_INC, NULL, attr_search, (void*)&attr_data, H5P_DEFAULT);
 
     if(HDstrcmp(path, op_name)==0) {
-    	switch(oi->type) {
-    	case H5O_TYPE_GROUP:
-    		handle_groups(handle_data->fid, path, NULL, 0, NULL);
-    		break;
-    	case H5O_TYPE_DATASET:
-    		handle_datasets(handle_data->fid, path, NULL, 0, NULL);
-    		break;
-    	case H5O_TYPE_NAMED_DATATYPE:
-    		handle_datatypes(handle_data->fid, path, NULL, 0, NULL);
-    		break;
-    	case H5O_TYPE_UNKNOWN:
-    	case H5O_TYPE_NTYPES:
-    	default:
-    		error_msg("unknown object type value\n");
-    		h5tools_setstatus(EXIT_FAILURE);
-    	} /* end switch */
+        switch(oi->type) {
+        case H5O_TYPE_GROUP:
+            handle_groups(handle_data->fid, path, NULL, 0, NULL);
+            break;
+        case H5O_TYPE_DATASET:
+            handle_datasets(handle_data->fid, path, NULL, 0, NULL);
+            break;
+        case H5O_TYPE_NAMED_DATATYPE:
+            handle_datatypes(handle_data->fid, path, NULL, 0, NULL);
+            break;
+        case H5O_TYPE_UNKNOWN:
+        case H5O_TYPE_NTYPES:
+        default:
+            error_msg("unknown object type value\n");
+            h5tools_setstatus(EXIT_FAILURE);
+        } /* end switch */
     }
 
     return 0;
@@ -1397,48 +1420,48 @@ static herr_t
 lnk_search(const char *path, const H5L_info_t *li, void *_op_data)
 {
     int         search_len;
-    int			k;
+    int            k;
     char       *search_name;
-	trav_handle_udata_t  *handle_data = (trav_handle_udata_t*)_op_data;
+    trav_handle_udata_t  *handle_data = (trav_handle_udata_t*)_op_data;
     char *op_name = (char*)handle_data->op_name;
 
     search_len = HDstrlen(op_name);
     if(search_len > 0 && op_name[0] != '/') {
-    	k = 2;
+        k = 2;
     }
     else
         k = 1;
-   	search_name = (char *)HDmalloc((size_t)(search_len + k));
+    search_name = (char *)HDmalloc((size_t)(search_len + k));
     if(search_name == NULL) {
-		error_msg("creating temporary link\n");
-    	h5tools_setstatus(EXIT_FAILURE);
+        error_msg("creating temporary link\n");
+        h5tools_setstatus(EXIT_FAILURE);
     }
     else {
-		if (k == 2) {
-			HDstrcpy(search_name, "/");
-			HDstrncat(search_name, op_name, (size_t)search_len + 1);
-		}
-		else
-			HDstrncpy(search_name, op_name, (size_t)search_len + 1);
-		search_name[search_len + k - 1] = '\0';
-
-		if(HDstrcmp(path, search_name) == 0) {
-			switch(li->type) {
-			case H5L_TYPE_SOFT:
-			case H5L_TYPE_EXTERNAL:
-				handle_links(handle_data->fid, op_name, NULL, 0, NULL);
-				break;
-
-			case H5L_TYPE_HARD:
-			case H5L_TYPE_MAX:
-			case H5L_TYPE_ERROR:
-			default:
-				error_msg("unknown link type value\n");
-				h5tools_setstatus(EXIT_FAILURE);
-				break;
-			} /* end switch() */
-		}
-		HDfree(search_name);
+        if (k == 2) {
+            HDstrcpy(search_name, "/");
+            HDstrncat(search_name, op_name, (size_t)search_len + 1);
+        }
+        else
+            HDstrncpy(search_name, op_name, (size_t)search_len + 1);
+        search_name[search_len + k - 1] = '\0';
+
+        if(HDstrcmp(path, search_name) == 0) {
+            switch(li->type) {
+            case H5L_TYPE_SOFT:
+            case H5L_TYPE_EXTERNAL:
+                handle_links(handle_data->fid, op_name, NULL, 0, NULL);
+                break;
+
+            case H5L_TYPE_HARD:
+            case H5L_TYPE_MAX:
+            case H5L_TYPE_ERROR:
+            default:
+                error_msg("unknown link type value\n");
+                h5tools_setstatus(EXIT_FAILURE);
+                break;
+            } /* end switch() */
+        }
+        HDfree(search_name);
     }
     return 0;
 } /* end lnk_search() */
@@ -1465,7 +1488,7 @@ handle_paths(hid_t fid, const char *path_name, void H5_ATTR_UNUSED * data, int H
         hid_t       gcpl_id;
         unsigned    crt_order_flags;
         unsigned    attr_crt_order_flags;
-		trav_handle_udata_t handle_udata;     /* User data for traversal */
+        trav_handle_udata_t handle_udata;     /* User data for traversal */
 
         if ((gcpl_id = H5Gget_create_plist(gid)) < 0) {
             error_msg("error in getting group creation property list ID\n");
@@ -1489,12 +1512,12 @@ handle_paths(hid_t fid, const char *path_name, void H5_ATTR_UNUSED * data, int H
             h5tools_setstatus(EXIT_FAILURE);
         }
 
-		handle_udata.fid = fid;
-		handle_udata.op_name = (char*)path_name;
-		if(h5trav_visit(fid, "/", TRUE, TRUE, obj_search, lnk_search, &handle_udata) < 0) {
-			error_msg("error traversing information\n");
-			h5tools_setstatus(EXIT_FAILURE);
-		}
+        handle_udata.fid = fid;
+        handle_udata.op_name = (char*)path_name;
+        if(h5trav_visit(fid, "/", TRUE, TRUE, obj_search, lnk_search, &handle_udata) < 0) {
+            error_msg("error traversing information\n");
+            h5tools_setstatus(EXIT_FAILURE);
+        }
     }
 }
 
@@ -1536,7 +1559,7 @@ handle_attributes(hid_t fid, const char *attr, void H5_ATTR_UNUSED * data, int H
 
     /* find the last / */
     while(j >= 0) {
-        if (attr[j] == '/' && (j==0 || (j>0 && attr[j-1]!='\\'))) 
+        if (attr[j] == '/' && (j==0 || (j>0 && attr[j-1]!='\\')))
             break;
         j--;
     }
@@ -1571,7 +1594,7 @@ handle_attributes(hid_t fid, const char *attr, void H5_ATTR_UNUSED * data, int H
     string_dataformat.do_escape = display_escape;
     outputformat = &string_dataformat;
 
-	attr_name = h5tools_str_replace(attr + j + 1, "\\/", "/");
+    attr_name = h5tools_str_replace(attr + j + 1, "\\/", "/");
 
     /* handle error case: cannot open the object with the attribute */
     if((oid = H5Oopen(fid, obj_name, H5P_DEFAULT)) < 0) {
@@ -1627,7 +1650,7 @@ handle_attributes(hid_t fid, const char *attr, void H5_ATTR_UNUSED * data, int H
     } /* end if */
 
     HDfree(obj_name);
-	HDfree(attr_name);
+    HDfree(attr_name);
     dump_indent -= COL;
     return;
 
@@ -1635,9 +1658,9 @@ error:
     h5tools_setstatus(EXIT_FAILURE);
     if(obj_name)
         HDfree(obj_name);
-		
-	if (attr_name)
-		HDfree(attr_name);
+
+    if (attr_name)
+        HDfree(attr_name);
 
     H5E_BEGIN_TRY {
         H5Oclose(oid);
@@ -1672,10 +1695,24 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
 {
     H5O_info_t       oinfo;
     hid_t            dsetid;
+    hid_t            dapl_id = H5P_DEFAULT;  /* dataset access property list ID */
     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(display_data) {
+        if ((dapl_id = H5Pcreate(H5P_DATASET_ACCESS)) < 0) {
+            error_msg("error in creating default access property list ID\n");
+        }
+        if (display_vds_first) {
+            if(H5Pset_virtual_view(dapl_id, H5D_VDS_FIRST_MISSING) < 0)
+                error_msg("error in setting access property list ID, virtual_view\n");
+        }
+        if (vds_gap_size > 0) {
+            if(H5Pset_virtual_printf_gap(dapl_id, (hsize_t)vds_gap_size) < 0)
+                error_msg("error in setting access property list ID, virtual_printf_gap\n");
+        }
+    }
+    if((dsetid = H5Dopen2(fid, dset, dapl_id)) < 0) {
         if (pe) {
             handle_links(fid, dset, data, pe, display_name);
         }
@@ -1752,7 +1789,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
          *-------------------------------------------------------------------------
@@ -1785,7 +1822,7 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
                 PRINTSTREAM(rawoutstream, "%s \"%s\"\n", HARDLINK, found_obj->objname);
                 indentation(dump_indent);
                 end_obj(h5tools_dump_header_format->datasetend, h5tools_dump_header_format->datasetblockend);
-            } 
+            }
             else {
                 found_obj->displayed = TRUE;
                 dump_indent += COL;
@@ -1801,7 +1838,8 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
         dump_dataset(dsetid, real_name, sset);
         dump_indent -= COL;
     }
-
+    if (dapl_id != H5P_DEFAULT)
+        H5Pclose(dapl_id);
     if(H5Dclose(dsetid) < 0)
         h5tools_setstatus(EXIT_FAILURE);
 }
@@ -1884,11 +1922,11 @@ handle_links(hid_t fid, const char *links, void H5_ATTR_UNUSED * data, int H5_AT
     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) {
         error_msg("\"%s\" is a hard link\n", links);
         h5tools_setstatus(EXIT_FAILURE);
-    } 
+    }
     else {
         char *buf = (char *)HDmalloc(linfo.u.val_size);
         PRINTVALSTREAM(rawoutstream, "\n");
@@ -1925,12 +1963,12 @@ handle_links(hid_t fid, const char *links, void H5_ATTR_UNUSED * data, int H5_AT
                     PRINTSTREAM(rawoutstream, "TARGETFILE \"%s\"\n", elink_file);
                     indentation(COL);
                     PRINTSTREAM(rawoutstream, "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);
                 h5tools_setstatus(EXIT_FAILURE);
diff --git a/tools/h5dump/h5dump_extern.h b/tools/h5dump/h5dump_extern.h
index 08f9e36..62477d0 100644
--- a/tools/h5dump/h5dump_extern.h
+++ b/tools/h5dump/h5dump_extern.h
@@ -77,6 +77,8 @@ extern int          enable_error_stack; /* re-enable error stack */
 extern int          disable_compact_subset; /* disable compact form of subset notation */
 extern int          display_packed_bits; /*print 1-8 byte numbers as packed bits*/
 extern int          include_attrs; /* Display attributes */
+extern int          display_vds_first; /* vds display to first missing */
+extern int          vds_gap_size; /* vds skip missing files */
 
 /* sort parameters */
 extern H5_index_t   sort_by; /*sort_by [creation_order | name]  */
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index 0eeaec5..46386a0 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -111,6 +111,7 @@
 #define FILE78  "tscalarintattrsize.h5"
 #define FILE79  "tintsattrs.h5"
 #define FILE80  "tbitnopaque.h5"
+#define FILE81  "tints4dims.h5"
 
 /*-------------------------------------------------------------------------
  * prototypes
@@ -272,20 +273,20 @@ typedef struct s1_t {
 #define THRESHOLD10   10          /* Free space section threshold */
 
 /* "FILE66" macros and for FILE69 */
-#define F66_XDIM	    8
+#define F66_XDIM        8
 #define F66_DATASETU08        "DU08BITS"
 #define F66_DATASETS08        "DS08BITS"
-#define F66_YDIM8	    8
+#define F66_YDIM8        8
 #define F66_DATASETU16       "DU16BITS"
 #define F66_DATASETS16       "DS16BITS"
-#define F66_YDIM16	    16
+#define F66_YDIM16        16
 #define F66_DATASETU32       "DU32BITS"
 #define F66_DATASETS32       "DS32BITS"
-#define F66_YDIM32	    32
+#define F66_YDIM32        32
 #define F66_DATASETU64       "DU64BITS"
 #define F66_DATASETS64       "DS64BITS"
 #define F66_YDIM64      64
-#define F66_DUMMYDBL	    "DummyDBL"
+#define F66_DUMMYDBL        "DummyDBL"
 
 /* Declarations for gent_dataset_idx() for "FILE68a" */
 #define F68a_DSET_FIXED		"dset_fixed"
@@ -363,6 +364,13 @@ typedef struct s1_t {
 
 #define F80_DIM32      32
 
+#define F81_DATASETNAME   "FourDimInts"
+#define F81_RANK        4
+#define F81_WDIM        10
+#define F81_XDIM        8
+#define F81_YDIM        6
+#define F81_ZDIM        4
+
 static void
 gent_group(void)
 {
@@ -579,7 +587,7 @@ static void gent_softlink(void)
  * Function: gent_softlink2
  *
  * Purpose: Create soft links to various objects.
- * Return: 
+ * Return:
  *    SUCCEED
  *    FAIL
  * Programmer: Jonathan Kim
@@ -593,7 +601,7 @@ static int gent_softlink2(void)
     hid_t       gid1 = -1, gid2 = -1;
     hid_t       datatype = -1;
     hid_t       dset1 = -1, dset2 = -1;
-    hid_t       dataspace = -1;   
+    hid_t       dataspace = -1;
     hsize_t     dimsf[2];              /* dataset dimensions */
     int data1[NX][NY] = {{0,0},{1,1},{2,2},{3,3}};
     int data2[NX][NY] = {{0,0},{0,1},{0,2},{3,3}};
@@ -637,7 +645,7 @@ static int gent_softlink2(void)
     status = H5Tcommit2(fileid1, "dtype", datatype, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     if (status < 0)
     {
-        fprintf(stderr, "Error: %s> H5Tcommit2 failed.\n", FILE4_1); 
+        fprintf(stderr, "Error: %s> H5Tcommit2 failed.\n", FILE4_1);
         status = FAIL;
         goto out;
     }
@@ -2907,9 +2915,9 @@ static void gent_vldatatypes5(void)
 }
 
 /* This is big enough to make h5dump to use hyperslap to read
-   from file and display portion by portion. This also prints out array indices 
+   from file and display portion by portion. This also prints out array indices
    via region reference for testing refion reference output.
-   Note: this was added originally prepared for bug2092. before the fix h5dump didn't 
+   Note: this was added originally prepared for bug2092. before the fix h5dump didn't
          display array indices every 262 x N (N > 0) based on 2000x1000 dims.
  */
 #define SPACE_ARRAY1BIG_DIM 2000
@@ -2956,7 +2964,7 @@ static void gent_array1_big(void)
     fid1 = H5Fcreate(FILE25_BIG, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
 
     /*-------------------------
-     * Array type dataset 
+     * Array type dataset
      */
     /* Create dataspace for datasets */
     sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
@@ -2972,7 +2980,7 @@ static void gent_array1_big(void)
     HDassert(ret >= 0);
 
     /*---------------------------
-     * Region Reference dataset 
+     * Region Reference dataset
      */
     /* Create dataspace for the reference dataset */
     sid2 = H5Screate_simple(SPACE1_RANK, dims2, NULL);
@@ -5221,7 +5229,7 @@ static void gent_zero_dim_size(void)
     space = H5Screate_simple(SPACE3_RANK, dims1, NULL);
 
     /* dataset */
-    dataset = H5Dcreate2(fid, "dset of 0 dimension size", H5T_STD_I32BE, space, H5P_DEFAULT, 
+    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);
@@ -7159,7 +7167,7 @@ gent_packedbits(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETU16, H5T_STD_U16LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    valu16bits = (uint16_t) ~0u;	/* all 1s */
+    valu16bits = (uint16_t) ~0u;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dsetu16[i][0] = valu16bits;
         for(j = 1; j < dims[1]; j++)
@@ -7176,7 +7184,7 @@ gent_packedbits(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETU32, H5T_STD_U32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    valu32bits = (uint32_t) ~0u;	/* all 1s */
+    valu32bits = (uint32_t) ~0u;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dsetu32[i][0] = valu32bits;
         for(j = 1; j < dims[1]; j++)
@@ -7210,7 +7218,7 @@ gent_packedbits(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS08, H5T_STD_I8LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val8bits = (int8_t) ~0;	/* all 1s */
+    val8bits = (int8_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset8[i][0] = val8bits;
         for(j = 1; j < dims[1]; j++)
@@ -7227,7 +7235,7 @@ gent_packedbits(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS16, H5T_STD_I16LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val16bits = (int16_t) ~0;	/* all 1s */
+    val16bits = (int16_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset16[i][0] = val16bits;
         for(j = 1; j < dims[1]; j++)
@@ -7244,7 +7252,7 @@ gent_packedbits(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS32, H5T_STD_I32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val32bits = (int32_t) ~0;	/* all 1s */
+    val32bits = (int32_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset32[i][0] = val32bits;
         for(j = 1; j < dims[1]; j++)
@@ -8733,7 +8741,7 @@ static void gent_compound_int_array(void) {
 
         valu8bits = (uint8_t) ~0u;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dsetu8[n] = valu8bits;
+            Cmpd1[m].dsetu8[n] = valu8bits;
             valu8bits <<= 1;
         }
 
@@ -8742,7 +8750,7 @@ static void gent_compound_int_array(void) {
 
         valu16bits = (uint16_t) ~0u;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dsetu16[n] = valu16bits;
+            Cmpd1[m].dsetu16[n] = valu16bits;
             valu16bits <<= 1;
         }
 
@@ -8751,7 +8759,7 @@ static void gent_compound_int_array(void) {
 
         valu32bits = (uint32_t) ~0u;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dsetu32[n] = valu32bits;
+            Cmpd1[m].dsetu32[n] = valu32bits;
             valu32bits <<= 1;
         }
 
@@ -8760,7 +8768,7 @@ static void gent_compound_int_array(void) {
 
         valu64bits = (uint64_t) ~0Lu;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dsetu64[n] = valu64bits;
+            Cmpd1[m].dsetu64[n] = valu64bits;
             valu64bits <<= 1;
         }
 
@@ -8769,7 +8777,7 @@ static void gent_compound_int_array(void) {
 
         val8bits = (int8_t) ~0;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dset8[n] = val8bits;
+            Cmpd1[m].dset8[n] = val8bits;
             val8bits <<= 1;
         }
 
@@ -8778,7 +8786,7 @@ static void gent_compound_int_array(void) {
 
         val16bits = (int16_t) ~0;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dset16[n] = val16bits;
+            Cmpd1[m].dset16[n] = val16bits;
             val16bits <<= 1;
         }
 
@@ -8787,7 +8795,7 @@ static void gent_compound_int_array(void) {
 
         val32bits = (int32_t) ~0;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dset32[n] = val32bits;
+            Cmpd1[m].dset32[n] = val32bits;
             val32bits <<= 1;
         }
 
@@ -8796,7 +8804,7 @@ static void gent_compound_int_array(void) {
 
         val64bits = (int64_t) ~0L;  /* all 1s */
         for(n = 0; n < dims[0]; n++){
-        	Cmpd1[m].dset64[n] = val64bits;
+            Cmpd1[m].dset64[n] = val64bits;
             val64bits <<= 1;
         }
 
@@ -8804,7 +8812,7 @@ static void gent_compound_int_array(void) {
         dims[0] = F76_DIM8;
 
         for(n = 0; n < dims[0]; n++)
-           	Cmpd1[m].dsetdbl[n] = 0.0001F + n;
+            Cmpd1[m].dsetdbl[n] = 0.0001F + n;
     }
 
     /* Create the array data type for the 8 bits signed int array             */
@@ -8979,64 +8987,64 @@ static void gent_compound_ints(void) {
     for (m = 0; m < F77_LENGTH; m++) {
 
         /* Array of 8 bits unsigned int */
-    	if((m % F76_DIM8) == 0)
-    		valu8bits = (uint8_t) ~0u;  /* all 1s */
-       	Cmpd1[m].dsetu8 = valu8bits;
-       	Cmpd2[m].dsetu8 = valu8bits;
+        if((m % F76_DIM8) == 0)
+            valu8bits = (uint8_t) ~0u;  /* all 1s */
+        Cmpd1[m].dsetu8 = valu8bits;
+        Cmpd2[m].dsetu8 = valu8bits;
         valu8bits <<= 1;
 
         /* Array of 16 bits unsigned int */
-    	if((m % F76_DIM16) == 0)
+        if((m % F76_DIM16) == 0)
             valu16bits = (uint16_t) ~0u;  /* all 1s */
-		Cmpd1[m].dsetu16 = valu16bits;
-		Cmpd2[m].dsetu16 = valu16bits;
-		valu16bits <<= 1;
+        Cmpd1[m].dsetu16 = valu16bits;
+        Cmpd2[m].dsetu16 = valu16bits;
+        valu16bits <<= 1;
 
         /* Array of 32 bits unsigned int */
-    	if((m % F76_DIM32) == 0)
+        if((m % F76_DIM32) == 0)
             valu32bits = (uint32_t) ~0u;  /* all 1s */
-		Cmpd1[m].dsetu32 = valu32bits;
-		Cmpd2[m].dsetu32 = valu32bits;
-		valu32bits <<= 1;
+        Cmpd1[m].dsetu32 = valu32bits;
+        Cmpd2[m].dsetu32 = valu32bits;
+        valu32bits <<= 1;
 
         /* Array of 64 bits unsigned int */
-    	if((m % F76_DIM64) == 0)
+        if((m % F76_DIM64) == 0)
             valu64bits = (uint64_t) ~0Lu;  /* all 1s */
-		Cmpd1[m].dsetu64 = valu64bits;
-		Cmpd2[m].dsetu64 = valu64bits;
-		valu64bits <<= 1;
+        Cmpd1[m].dsetu64 = valu64bits;
+        Cmpd2[m].dsetu64 = valu64bits;
+        valu64bits <<= 1;
 
         /* Array of 8 bits signed int */
-    	if((m % F76_DIM8) == 0)
+        if((m % F76_DIM8) == 0)
             val8bits = (int8_t) ~0;  /* all 1s */
-		Cmpd1[m].dset8 = val8bits;
-		Cmpd2[m].dset8 = val8bits;
-		val8bits <<= 1;
+        Cmpd1[m].dset8 = val8bits;
+        Cmpd2[m].dset8 = val8bits;
+        val8bits <<= 1;
 
         /* Array of 16 bits signed int */
-    	if((m % F76_DIM16) == 0)
+        if((m % F76_DIM16) == 0)
             val16bits = (int16_t) ~0;  /* all 1s */
-		Cmpd1[m].dset16 = val16bits;
-		Cmpd2[m].dset16 = val16bits;
-		val16bits <<= 1;
+        Cmpd1[m].dset16 = val16bits;
+        Cmpd2[m].dset16 = val16bits;
+        val16bits <<= 1;
 
         /* Array of 32 bits signed int */
-    	if((m % F76_DIM32) == 0)
+        if((m % F76_DIM32) == 0)
             val32bits = (int32_t) ~0;  /* all 1s */
-		Cmpd1[m].dset32 = val32bits;
-		Cmpd2[m].dset32 = val32bits;
-		val32bits <<= 1;
+        Cmpd1[m].dset32 = val32bits;
+        Cmpd2[m].dset32 = val32bits;
+        val32bits <<= 1;
 
         /* Array of 64 bits signed int */
-    	if((m % F76_DIM64) == 0)
+        if((m % F76_DIM64) == 0)
             val64bits = (int64_t) ~0L;  /* all 1s */
-		Cmpd1[m].dset64 = val64bits;
-		Cmpd2[m].dset64 = val64bits;
-		val64bits <<= 1;
+        Cmpd1[m].dset64 = val64bits;
+        Cmpd2[m].dset64 = val64bits;
+        val64bits <<= 1;
 
         /* Double Dummy set for failure tests */
-       	Cmpd1[m].dsetdbl = 0.0001F + m;
-       	Cmpd2[m].dsetdbl = 0.0001F + m;
+        Cmpd1[m].dsetdbl = 0.0001F + m;
+        Cmpd2[m].dsetdbl = 0.0001F + m;
     }
 
     /* Create the dataspace                                           */
@@ -9447,7 +9455,7 @@ gent_intsattrs(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETU16, H5T_STD_U16LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    valu16bits = (uint16_t) ~0u;	/* all 1s */
+    valu16bits = (uint16_t) ~0u;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dsetu16[i][0] = valu16bits;
         asetu16[i*dims[1]] = dsetu16[i][0];
@@ -9474,7 +9482,7 @@ gent_intsattrs(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETU32, H5T_STD_U32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    valu32bits = (uint32_t) ~0u;	/* all 1s */
+    valu32bits = (uint32_t) ~0u;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dsetu32[i][0] = valu32bits;
         asetu32[i*dims[1]] = dsetu32[i][0];
@@ -9528,7 +9536,7 @@ gent_intsattrs(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS08, H5T_STD_I8LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val8bits = (int8_t) ~0;	/* all 1s */
+    val8bits = (int8_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset8[i][0] = val8bits;
         aset8[i*dims[1]] = dset8[i][0];
@@ -9555,7 +9563,7 @@ gent_intsattrs(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS16, H5T_STD_I16LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val16bits = (int16_t) ~0;	/* all 1s */
+    val16bits = (int16_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset16[i][0] = val16bits;
         aset16[i*dims[1]] = dset16[i][0];
@@ -9582,7 +9590,7 @@ gent_intsattrs(void)
     space = H5Screate_simple(2, dims, NULL);
     dataset = H5Dcreate2(fid, F66_DATASETS32, H5T_STD_I32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
-    val32bits = (int32_t) ~0;	/* all 1s */
+    val32bits = (int32_t) ~0;    /* all 1s */
     for(i = 0; i < dims[0]; i++){
         dset32[i][0] = val32bits;
         aset32[i*dims[1]] = dset32[i][0];
@@ -9805,6 +9813,41 @@ static void gent_bitnopaquefields(void)
     H5Fclose(file);
 }
 
+/*-------------------------------------------------------------------------
+ * Function:    gent_intsfourdims
+ *
+ * Purpose:     Generate a file to be used in the h5dump subsetting tests.
+ *   One datasets of unsigned int types are created in four dimensions 2,4,6,10.
+ *-------------------------------------------------------------------------
+ */
+static void
+gent_intsfourdims(void)
+{
+    hid_t fid, dataset, space, tid;
+    hsize_t dims[F81_RANK];
+    uint32_t dset1[F81_ZDIM][F81_YDIM][F81_XDIM][F81_WDIM];
+    unsigned int i, j, k, l;
+
+    fid = H5Fcreate(FILE81, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Dataset of 32 bits unsigned int */
+    dims[0] = F81_ZDIM; dims[1] = F81_YDIM; dims[2] = F81_XDIM; dims[3] = F81_WDIM;
+    space = H5Screate_simple(F81_RANK, dims, NULL);
+    dataset = H5Dcreate2(fid, F81_DATASETNAME, H5T_STD_U32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    for(i = 0; i < F81_ZDIM; i++)
+        for(j = 0; j < F81_YDIM; j++)
+            for(k = 0; k < F81_XDIM; k++)
+                for(l = 0; l < F81_WDIM; l++)
+            dset1[i][j][k][l] = i*F81_YDIM*F81_XDIM*F81_WDIM + j*F81_XDIM*F81_WDIM + k*F81_WDIM + l;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+    H5Sclose(space);
+    H5Dclose(dataset);
+
+    H5Fclose(fid);
+}
+
 
 /*-------------------------------------------------------------------------
  * Function: main
@@ -9898,6 +9941,8 @@ int main(void)
     gent_intsattrs();
     gent_bitnopaquefields();
 
+    gent_intsfourdims();
+
     return 0;
 }
 
diff --git a/tools/h5dump/testh5dump.sh.in b/tools/h5dump/testh5dump.sh.in
index 267ac44..6d481c6 100644
--- a/tools/h5dump/testh5dump.sh.in
+++ b/tools/h5dump/testh5dump.sh.in
@@ -133,6 +133,7 @@ $SRC_H5DUMP_TESTFILES/tgrp_comments.h5
 $SRC_H5DUMP_TESTFILES/thlink.h5
 $SRC_H5DUMP_TESTFILES/thyperslab.h5
 $SRC_H5DUMP_TESTFILES/tintsattrs.h5
+$SRC_H5DUMP_TESTFILES/tints4dims.h5
 $SRC_H5DUMP_TESTFILES/tlarge_objname.h5
 #$SRC_H5DUMP_TESTFILES/tldouble.h5
 $SRC_H5DUMP_TESTFILES/tlonglinks.h5
@@ -265,6 +266,12 @@ $SRC_H5DUMP_TESTFILES/tindicessub2.ddl
 $SRC_H5DUMP_TESTFILES/tindicessub3.ddl
 $SRC_H5DUMP_TESTFILES/tindicessub4.ddl
 $SRC_H5DUMP_TESTFILES/tindicesyes.ddl
+$SRC_H5DUMP_TESTFILES/tints4dims.ddl
+$SRC_H5DUMP_TESTFILES/tints4dimsBlock2.ddl
+$SRC_H5DUMP_TESTFILES/tints4dimsBlockEq.ddl
+$SRC_H5DUMP_TESTFILES/tints4dimsCount2.ddl
+$SRC_H5DUMP_TESTFILES/tints4dimsCountEq.ddl
+$SRC_H5DUMP_TESTFILES/tints4dimsStride2.ddl
 $SRC_H5DUMP_TESTFILES/tintsattrs.ddl
 $SRC_H5DUMP_TESTFILES/tlarge_objname.ddl
 #$SRC_H5DUMP_TESTFILES/tldouble.ddl
@@ -1106,6 +1113,12 @@ TOOLTEST tall-5s.ddl --enable-error-stack -d "/g1/g1.1/dset1.1.2[0;2;10;]" tall.
 TOOLTEST tdset-3s.ddl --enable-error-stack -d "/dset1[1,1;;;]" tdset.h5
 TOOLTEST tno-subset.ddl --enable-error-stack --no-compact-subset -d "AHFINDERDIRECT::ah_centroid_t[0] it=0 tl=0" tno-subset.h5
 
+TOOLTEST tints4dimsCount2.ddl --enable-error-stack -d FourDimInts -s 0,0,0,0 -c 2,2,2,2 tints4dims.h5
+TOOLTEST tints4dimsBlock2.ddl --enable-error-stack -d FourDimInts -s 0,0,0,0 -c 1,1,1,1 -k 2,2,2,2 tints4dims.h5
+TOOLTEST tints4dimsStride2.ddl --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,2,2 -c 2,2,2,2 tints4dims.h5
+TOOLTEST tints4dimsCountEq.ddl --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,1,1 -k 1,2,1,1 -c 2,2,4,4 tints4dims.h5
+TOOLTEST tints4dimsBlockEq.ddl --enable-error-stack -d FourDimInts -s 0,0,0,0 -S 2,2,1,1 -c 2,2,1,1 -k 1,2,4,4 tints4dims.h5
+
 # test printing characters in ASCII instead of decimal
 TOOLTEST tchar1.ddl --enable-error-stack -r tchar.h5
 
diff --git a/tools/h5dump/testh5dumpvds.sh.in b/tools/h5dump/testh5dumpvds.sh.in
index b15606f..850c03a 100644
--- a/tools/h5dump/testh5dumpvds.sh.in
+++ b/tools/h5dump/testh5dumpvds.sh.in
@@ -98,6 +98,14 @@ $SRC_H5DUMP_TESTFILES/vds/5_a.h5
 $SRC_H5DUMP_TESTFILES/vds/5_b.h5
 $SRC_H5DUMP_TESTFILES/vds/5_c.h5
 $SRC_H5DUMP_TESTFILES/vds/5_vds.h5
+$SRC_H5DUMP_TESTFILES/vds/a.h5
+$SRC_H5DUMP_TESTFILES/vds/b.h5
+$SRC_H5DUMP_TESTFILES/vds/c.h5
+$SRC_H5DUMP_TESTFILES/vds/d.h5
+$SRC_H5DUMP_TESTFILES/vds/vds-percival-unlim-maxmin.h5
+$SRC_H5DUMP_TESTFILES/vds/f-0.h5
+$SRC_H5DUMP_TESTFILES/vds/f-3.h5
+$SRC_H5DUMP_TESTFILES/vds/vds-eiger.h5
 "
 
 LIST_OTHER_TEST_FILES="
@@ -113,6 +121,11 @@ $SRC_H5DUMP_TESTFILES/vds/tvds_layout-3_1.ddl
 $SRC_H5DUMP_TESTFILES/vds/tvds_layout-3_2.ddl
 $SRC_H5DUMP_TESTFILES/vds/tvds_layout-4.ddl
 $SRC_H5DUMP_TESTFILES/vds/tvds_layout-5.ddl
+$SRC_H5DUMP_TESTFILES/vds/vds-first.ddl
+$SRC_H5DUMP_TESTFILES/vds/vds-gap1.ddl
+$SRC_H5DUMP_TESTFILES/vds/vds-gap2.ddl
+$SRC_H5DUMP_TESTFILES/vds/vds_layout-eiger.ddl
+$SRC_H5DUMP_TESTFILES/vds/vds_layout-maxmin.ddl
 "
 
 LIST_ERROR_TEST_FILES="
@@ -480,6 +493,9 @@ if test $USE_FILTER_DEFLATE = "yes" ; then
     TOOLTEST tvds-3_2.ddl --enable-error-stack 3_2_vds.h5
     TOOLTEST tvds-4.ddl --enable-error-stack 4_vds.h5
     TOOLTEST tvds-5.ddl --enable-error-stack 5_vds.h5
+    TOOLTEST vds-first.ddl --vds-view-first-missing --enable-error-stack vds-percival-unlim-maxmin.h5
+    TOOLTEST vds-gap1.ddl -d /VDS-Eiger --vds-gap-size=1 --enable-error-stack vds-eiger.h5
+    TOOLTEST vds-gap2.ddl --vds-gap-size=2 --enable-error-stack vds-eiger.h5
 fi
 
   # Layout read
@@ -490,6 +506,8 @@ if test $USE_FILTER_DEFLATE = "yes" ; then
     TOOLTEST tvds_layout-3_2.ddl -p --enable-error-stack 3_2_vds.h5
     TOOLTEST tvds_layout-4.ddl -p --enable-error-stack 4_vds.h5
     TOOLTEST tvds_layout-5.ddl -p --enable-error-stack 5_vds.h5
+    TOOLTEST vds_layout-eiger.ddl -p --enable-error-stack vds-eiger.h5
+    TOOLTEST vds_layout-maxmin.ddl -p --enable-error-stack vds-percival-unlim-maxmin.h5
 fi
 
 # Clean up temporary files/directories
diff --git a/tools/h5format_convert/Makefile.in b/tools/h5format_convert/Makefile.in
index d192622..de362a4 100644
--- a/tools/h5format_convert/Makefile.in
+++ b/tools/h5format_convert/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5format_convert
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -430,18 +443,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -454,7 +471,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -492,10 +508,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -506,6 +526,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -516,8 +537,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -532,6 +565,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -539,6 +574,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -562,6 +598,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -577,7 +614,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -586,8 +625,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -666,6 +707,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5format_convert/h5fc_gentest.c b/tools/h5format_convert/h5fc_gentest.c
index 888aa27..54ef3df 100644
--- a/tools/h5format_convert/h5fc_gentest.c
+++ b/tools/h5format_convert/h5fc_gentest.c
@@ -23,338 +23,52 @@
  * of the expected output and update the corresponding *.ddl files.
  */
 #include "hdf5.h"
+#include "H5private.h"
+
+#define NON_V3_FILE		"h5fc_non_v3.h5"
+#define EDGE_V3_FILE		"h5fc_edge_v3.h5"
+
+const char *FILENAME[] = {
+    "h5fc_ext1_i.h5",	/* 0 */
+    "h5fc_ext1_s.h5",	/* 1 */
+    "h5fc_ext1_f.h5",	/* 2 */
+    "h5fc_ext2_is.h5", 	/* 3 */
+    "h5fc_ext2_if.h5",	/* 4 */
+    "h5fc_ext2_sf.h5", 	/* 5 */
+    "h5fc_ext3_isf.h5",	/* 6 */ 
+    "h5fc_ext_none.h5",	/* 7 */ 
+    NULL
+};
 
 #define GROUP			"GROUP"
 
-#define OLD_V1_FILE		"h5fc_v1.h5"
-#define DSET_NON_CHUNKED	"DSET_NON_CHUNKED"
 #define DSET_BT1		"DSET_BT1"
 #define DSET_NDATA_BT1		"DSET_NDATA_BT1"
+#define DSET_COMPACT		"DSET_COMPACT"
+#define DSET_CONTIGUOUS		"DSET_CONTIGUOUS"
 
-#define LATEST_V3_FILE		"h5fc_latest_v3.h5"
 #define DSET_EA			"DSET_EA"
 #define DSET_NDATA_EA		"DSET_NDATA_EA"
 #define DSET_BT2		"DSET_BT2"
 #define DSET_NDATA_BT2		"DSET_NDATA_BT2"
 #define DSET_FA			"DSET_FA"
-#define DSET_NDATA_FA		"DSET_NDATA_FA"
-#define DSET_NONE		"DSET_NONE"
-#define DSET_NDATA_NONE		"DSET_NDATA_NONE"
-
-#define NON_V3_FILE		"h5fc_non_v3.h5"
-
-#define EDGE_V3_FILE		"h5fc_edge_v3.h5"
-#define DSET_EDGE		"DSET_EDGE"
-
-/*
- * Function: gen_old() 
- *
- * Create an old format file with:
- *	1) 1 non-chunked dataset
- *	2) 2 chunked datasets with version 1 B-tree chunk indexing type: with/without data
- */
-static void
-gen_old(const char *fname)
-{
-    hid_t	fid = -1;	 	/* file id */
-    hid_t	fcpl = -1;	 	
-    hid_t	gid = -1;	 	/* group id */
-    hid_t   	sid = -1;	 	/* space id */
-    hid_t	dcpl = -1;	 	/* dataset creation property id */
-    hid_t	did1 = -1, did2 = -1;	/* dataset id */
-    hsize_t 	dims1[1] = {10};     	/* dataset dimension */
-    hsize_t 	dims2[2] = {4, 6};     	/* dataset dimension */
-    hsize_t 	c_dims[2] = {2, 3};    	/* chunk dimension */
-    int		i;		    	/* local index variable */
-    int     	buf[24];            	/* data buffer */
-
-    if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
-        goto error;
-
-    if(H5Pset_istore_k(fcpl, 64) < 0)
-        goto error;
-
-    /* Create file */
-    if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Create a group */
-    if((gid = H5Gcreate2(fid, GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-	goto error;
-
-
-    /* 
-     * Create a non-chunked dataset 
-     */
-
-    /* Create dataspace */
-    if((sid = H5Screate_simple(1, dims1, NULL)) < 0)
-	goto error;
-
-    /* Create the dataset */
-    if((did1  = H5Dcreate2(fid, DSET_NON_CHUNKED, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Sclose(sid) < 0)
-	goto error;
-    if(H5Dclose(did1) < 0)
-	goto error;
-
-    /* 
-     * Create two chunked datasets with version 1 B-tree chunk indexing type
-     * (one with data, one without data)
-     */
-
-    /* Create data */
-    for(i = 0; i < 24; i++)
-	buf[i] = i;
-
-    /* Set chunk */
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
-	goto error;
-    if(H5Pset_chunk(dcpl, 2, c_dims) < 0)
-	goto error;
-
-    /* Create dataspace */
-    if((sid = H5Screate_simple(2, dims2, NULL)) < 0)
-	goto error;
-
-    /* Create the 2 datasets */
-    if((did1 = H5Dcreate2(fid, DSET_NDATA_BT1, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    if((did2 = H5Dcreate2(gid, DSET_BT1, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-    
-    /* Write to one dataset */
-    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Pclose(dcpl) < 0)
-	goto error;
-    if(H5Sclose(sid) < 0)
-	goto error;
-    if(H5Dclose(did1) < 0)
-	goto error;
-    if(H5Dclose(did2) < 0)
-	goto error;
-
-    if(H5Gclose(gid) < 0)
-	goto error;
-    if(H5Fclose(fid) < 0)
-	goto error;
-
-error:
-    H5E_BEGIN_TRY {
-        H5Pclose(dcpl);
-        H5Sclose(sid);
-        H5Dclose(did1);
-        H5Dclose(did2);
-        H5Gclose(gid);
-        H5Fclose(fid);
-    } H5E_END_TRY;
-
-} /* gen_old() */
-
-/*
- * Function: gen_latest() 
- *
- * Create a file with write+latest-format--this will result in v3 superblock+latest version support:
- *	1) 2 chunked datasets with extensible array chunk indexing type (with/without data)
- *	2) 2 chunked datasets with version 2 B-tree chunk indexing type (with/without data)
- *	3) 2 chunked datasets with fixed array chunk indexing type (with/without data)
- *	4) 2 chunked datasets with implicit array chunk indexing type (with/without data)
- */
-static void
-gen_latest(const char *fname)
-{
-    hid_t	fid = -1;	 	/* file id */
-    hid_t	fapl = -1;	       	/* file access property list */
-    hid_t	fcpl = -1;	       	/* file creation property list */
-    hid_t	gid = -1;	       	/* group id */
-    hid_t   	sid = -1;       	/* space id */
-    hid_t	dcpl = -1;	    	/* dataset creation property id */
-    hid_t	did1 = -1, did2 = -1;	/* dataset id */
-    hsize_t 	dims2[2] = {4, 6};     	/* dataset dimension */
-    hsize_t	max_dims[2];		/* maximum dataset dimension */
-    hsize_t 	c_dims[2] = {2, 3};    	/* chunk dimension */
-    int		i;		    	/* local index variable */
-    int     	buf[24];            	/* data buffer */
-
-    /* Create a new format file */
-    if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
-	goto error;
-    if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
-	goto error;
-
-    if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0)
-        goto error;
-    if(H5Pset_shared_mesg_nindexes(fcpl, 4) < 0)
-        goto error;
-
-    if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
-	goto error;
-
-    /* Create a group */
-    if((gid = H5Gcreate2(fid, GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Set chunk */
-    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
-	goto error;
-    if(H5Pset_chunk(dcpl, 2, c_dims) < 0)
-	goto error;
-
-    /* 
-     * Create 2 chunked datasets with extensible array chunk indexing type 
-     * (one with data; one without data)
-     */
-
-    /* Create dataspace */
-    max_dims[0] = 10;
-    max_dims[1] = H5S_UNLIMITED;
-    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
-	goto error;
-
-    /* Create the 2 datasets */
-    if((did1  = H5Dcreate2(gid, DSET_NDATA_EA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    if((did2  = H5Dcreate2(fid, DSET_EA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Create data */
-    for(i = 0; i < 24; i++)
-	buf[i] = i;
-
-    /* Write to one dataset */
-    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Sclose(sid) < 0)
-	goto error;
-    if(H5Dclose(did1) < 0)
-	goto error;
-    if(H5Dclose(did2) < 0)
-	goto error;
-
-
-    /* 
-     * Create 2 chunked datasets with version 2 B-tree chunk indexing type 
-     * (one with data; one without data)
-     */
-
-    /* Create dataspace */
-    max_dims[0] = 10;
-    max_dims[0] = H5S_UNLIMITED;
-    max_dims[1] = H5S_UNLIMITED;
-    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
-	goto error;
-
-    /* Create the 2 datasets */
-    if((did1  = H5Dcreate2(fid, DSET_NDATA_BT2, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    if((did2  = H5Dcreate2(gid, DSET_BT2, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Write to one dataset */
-    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Sclose(sid) < 0)
-	goto error;
-    if(H5Dclose(did1) < 0)
-	goto error;
-    if(H5Dclose(did2) < 0)
-	goto error;
-
-    /*
-     * Create 2 chunked datasets with fixed array chunk indexing type 
-     * (one with data; one without data)
-     */
-
-    /* Create dataspace */
-    max_dims[0] = 20;
-    max_dims[1] = 10;
-    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
-	goto error;
-
-    /* Create the datasets */
-    if((did1  = H5Dcreate2(fid, DSET_FA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    if((did2  = H5Dcreate2(gid, DSET_NDATA_FA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Write to the dataset */
-    if(H5Dwrite(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Sclose(sid) < 0)
-	goto error;
-    if(H5Dclose(did1) < 0)
-	goto error;
-    if(H5Dclose(did2) < 0)
-	goto error;
-
-
-    /* 
-     * Create 2 chunked datasets with implicit chunk indexing type 
-     * (one with data; one without data)
-     */
-
-    /* Create dataspace */
-    if((sid = H5Screate_simple(2, dims2, NULL)) < 0)
-	goto error;
-
-    /* Set early allocation */
-    if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY) < 0)
-	goto error;
-
-    /* Create the 2 datasets */
-    if((did1  = H5Dcreate2(fid, DSET_NONE, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    if((did2  = H5Dcreate2(gid, DSET_NDATA_NONE, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
-	goto error;
-
-    /* Write to one dataset */
-    if(H5Dwrite(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-	goto error;
-
-    /* Closing */
-    if(H5Dclose(did1) < 0)
-	goto error;
-    if(H5Dclose(did2) < 0)
-	goto error;
-    if(H5Sclose(sid) < 0)
-	goto error;
-
-    if(H5Pclose(dcpl) < 0)
-	goto error;
-    if(H5Gclose(gid) < 0)
-	goto error;
-    if(H5Fclose(fid) < 0)
-	goto error;
-
-error:
-    H5E_BEGIN_TRY {
-        H5Pclose(dcpl);
-        H5Sclose(sid);
-        H5Dclose(did1);
-        H5Dclose(did2);
-        H5Gclose(gid);
-        H5Fclose(fid);
-        H5Pclose(fapl);
-    } H5E_END_TRY;
+#define DSET_NDATA_FA		"DSET_NDATA_FA"
+#define DSET_NONE		"DSET_NONE"
+#define DSET_NDATA_NONE		"DSET_NDATA_NONE"
+
+#define DSET_EDGE		"DSET_EDGE"
+
+#define ISTORE_IK  64
 
-} /* gen_latest() */
+/*
+ * Function: gen_latest() 
+ *
+ * Create a file with write+latest-format--this will result in v3 superblock+latest version support:
+ *	1) 2 chunked datasets with extensible array chunk indexing type (with/without data)
+ *	2) 2 chunked datasets with version 2 B-tree chunk indexing type (with/without data)
+ *	3) 2 chunked datasets with fixed array chunk indexing type (with/without data)
+ *	4) 2 chunked datasets with implicit array chunk indexing type (with/without data)
+ */
 
 /*
  * Function: gen_non() 
@@ -365,7 +79,7 @@ error:
  * Re-open the file with write+non-latest-format and create:
  *	3) 1 chunked dataset with version 2 B-tree chunk indexing type (without data)
  * 	4) 1 chunked dataset with extensible array indexing type (with data)
- *	5) 1 non-chunked dataset
+ *	5) 1 compact and 1 contiguous datasets
  */
 static void
 gen_non(const char *fname)
@@ -409,7 +123,7 @@ gen_non(const char *fname)
 	goto error;
 
     /* 
-     * Create a chunked dataset with extensible array chunk indexing type  (without data)
+     * Create a chunked dataset with extensible array chunk indexing type (without data)
      */
 
     /* Create dataspace */
@@ -492,7 +206,7 @@ gen_non(const char *fname)
 	goto error;
 
     /*
-     * Create a dataset with version extensible array chunk indexing type (with data) in the group
+     * Create a dataset with extensible array chunk indexing type (with data) in the group
      */
 
     /* Create dataspace */
@@ -512,35 +226,68 @@ gen_non(const char *fname)
     /* Closing */
     if(H5Sclose(sid) < 0)
 	goto error;
+    if(H5Pclose(dcpl) < 0)
+	goto error;
     if(H5Dclose(did1) < 0)
 	goto error;
     if(H5Dclose(did2) < 0)
 	goto error;
 
     /* 
-     * Create a non-chunked dataset in the group
+     * Create a compact dataset in the group
      */
 
     /* Create dataspace */
     if((sid = H5Screate_simple(1, dims1, NULL)) < 0)
 	goto error;
 
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+	goto error;
+    if(H5Pset_layout(dcpl, H5D_COMPACT) < 0)
+	goto error;
+
     /* Create the dataset */
-    if((did1  = H5Dcreate2(gid, DSET_NON_CHUNKED, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+    if((did1  = H5Dcreate2(gid, DSET_COMPACT, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
 	goto error;
 
     /* Closing */
+    if(H5Dclose(did1) < 0)
+	goto error;
+    if(H5Pclose(dcpl) < 0)
+	goto error;
     if(H5Sclose(sid) < 0)
 	goto error;
-    if(H5Dclose(did1) < 0)
+
+    /* 
+     * Create a contiguous dataset with (2d with data) in the file
+     */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+	goto error;
+    if(H5Pset_layout(dcpl, H5D_CONTIGUOUS) < 0)
 	goto error;
 
-    if(H5Gclose(gid) < 0)
+    if((sid = H5Screate_simple(2, dims2, NULL)) < 0)
 	goto error;
-    if(H5Fclose(fid) < 0)
+
+    /* Create the dataset */
+    if((did2  = H5Dcreate2(fid, DSET_CONTIGUOUS, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+	goto error;
+    /* Write to the dataset */
+    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+	goto error;
+
+    /* Closing */
+    if(H5Dclose(did2) < 0)
 	goto error;
     if(H5Pclose(dcpl) < 0)
 	goto error;
+    if(H5Sclose(sid) < 0)
+	goto error;
+
+    if(H5Gclose(gid) < 0)
+	goto error;
+    if(H5Fclose(fid) < 0)
+	goto error;
 
 error:
     H5E_BEGIN_TRY {
@@ -632,18 +379,286 @@ error:
 
 } /* gen_edge() */
 
-int main(void)
+
+/*
+ * Function: gen_ext() 
+ *
+ * Create a file with/without latest format with:
+ *	1) 1 contiguous dataset (without data)
+ *	2) 2 chunked datasets with extensible array chunk indexing type (with/without data)
+ *	3) 2 chunked datasets with version 2 B-tree chunk indexing type (with/without data)
+ *	4) 2 chunked datasets with fixed array chunk indexing type (with/without data)
+ *	5) 2 chunked datasets with implicit array chunk indexing type (with/without data)
+ * It will create the file with/without messages in the superblock extension depending
+ * on the parameter "what".
+ */
+static void
+gen_ext(const char *fname, unsigned new, unsigned what)
 {
-    /* Generate an old format file with v1 superbock */
-    gen_old(OLD_V1_FILE);
+    hid_t	fid = -1;	 	/* file id */
+    hid_t	fapl = -1;	       	/* file access property list */
+    hid_t	fcpl = -1;	       	/* file creation property list */
+    hid_t	gid = -1;	       	/* group id */
+    hid_t   	sid = -1;       	/* space id */
+    hid_t	dcpl = -1;	    	/* dataset creation property id */
+    hid_t	did1 = -1, did2 = -1;	/* dataset id */
+    hsize_t 	dims1[1] = {10};     	/* dataset dimension */
+    hsize_t 	dims2[2] = {4, 6};     	/* dataset dimension */
+    hsize_t	max_dims[2];		/* maximum dataset dimension */
+    hsize_t 	c_dims[2] = {2, 3};    	/* chunk dimension */
+    int		i;		    	/* local index variable */
+    int     	buf[24];            	/* data buffer */
+
+    if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+	goto error;
+
+    if(new) {
+	/* Create a new format file */
+	if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+	    goto error;
+    }
+
+    /* Create a file creation property list */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+
+    /* Generate messages that might be placed in superblock extension */
+    switch(what) {
+	case 0:
+	    H5Pset_istore_k(fcpl, ISTORE_IK);
+	    break;
+	case 1:
+	    H5Pset_shared_mesg_nindexes(fcpl, 4);
+	    break;
+	case 2:
+	    H5Pset_file_space(fcpl, H5F_FILE_SPACE_ALL_PERSIST, (hsize_t)0);
+	    break;
+	case 3:
+	    H5Pset_istore_k(fcpl, ISTORE_IK);
+	    H5Pset_shared_mesg_nindexes(fcpl, 4);
+	    break;
+	case 4:
+	    H5Pset_istore_k(fcpl, ISTORE_IK);
+	    H5Pset_file_space(fcpl, 0, (hsize_t)2);
+	    break;
+	case 5:
+	    H5Pset_shared_mesg_nindexes(fcpl, 4);
+	    H5Pset_file_space(fcpl, H5F_FILE_SPACE_VFD, (hsize_t)0);
+	    break;
+	case 6:
+	    H5Pset_istore_k(fcpl, ISTORE_IK);
+	    H5Pset_shared_mesg_nindexes(fcpl, 4);
+	    H5Pset_file_space(fcpl, H5F_FILE_SPACE_AGGR_VFD, (hsize_t)0);
+	    break;
+	default:
+	    break;
+    }
+
+    /* Create the file */
+    if((fid = H5Fcreate(fname, H5F_ACC_TRUNC, fcpl, fapl)) < 0)
+	goto error;
+
+    /* Create a group */
+    if((gid = H5Gcreate2(fid, GROUP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Set chunk */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+	goto error;
+    if(H5Pset_chunk(dcpl, 2, c_dims) < 0)
+	goto error;
+
+
+    /* 
+     * Create a contiguous dataset 
+     */
+
+    /* Create dataspace */
+    if((sid = H5Screate_simple(1, dims1, NULL)) < 0)
+	goto error;
+
+    /* Create the dataset */
+    if((did1  = H5Dcreate2(fid, DSET_CONTIGUOUS, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Closing */
+    if(H5Sclose(sid) < 0)
+	goto error;
+    if(H5Dclose(did1) < 0)
+	goto error;
+
+    /* 
+     * Create 2 chunked datasets with extensible array chunk indexing type 
+     * (one with data; one without data)
+     */
+
+    /* Create dataspace */
+    max_dims[0] = 10;
+    max_dims[1] = H5S_UNLIMITED;
+    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
+	goto error;
+
+    /* Create the 2 datasets */
+    if((did1  = H5Dcreate2(gid, DSET_NDATA_EA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    if((did2  = H5Dcreate2(fid, DSET_EA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Create data */
+    for(i = 0; i < 24; i++)
+	buf[i] = i;
+
+    /* Write to one dataset */
+    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+	goto error;
 
-    /* Generate a latest-format file with v3 superblock */
-    gen_latest(LATEST_V3_FILE);
+    /* Closing */
+    if(H5Sclose(sid) < 0)
+	goto error;
+    if(H5Dclose(did1) < 0)
+	goto error;
+    if(H5Dclose(did2) < 0)
+	goto error;
+
+
+    /* 
+     * Create 2 chunked datasets with version 2 B-tree chunk indexing type 
+     * (one with data; one without data)
+     */
+
+    /* Create dataspace */
+    max_dims[0] = 10;
+    max_dims[0] = H5S_UNLIMITED;
+    max_dims[1] = H5S_UNLIMITED;
+    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
+	goto error;
+
+    /* Create the 2 datasets */
+    if((did1  = H5Dcreate2(fid, DSET_NDATA_BT2, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    if((did2  = H5Dcreate2(gid, DSET_BT2, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Write to one dataset */
+    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+	goto error;
+
+    /* Closing */
+    if(H5Sclose(sid) < 0)
+	goto error;
+    if(H5Dclose(did1) < 0)
+	goto error;
+    if(H5Dclose(did2) < 0)
+	goto error;
+
+    /*
+     * Create 2 chunked datasets with fixed array chunk indexing type 
+     * (one with data; one without data)
+     */
+
+    /* Create dataspace */
+    max_dims[0] = 20;
+    max_dims[1] = 10;
+    if((sid = H5Screate_simple(2, dims2, max_dims)) < 0)
+	goto error;
+
+    /* Create the datasets */
+    if((did1  = H5Dcreate2(fid, DSET_FA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    if((did2  = H5Dcreate2(gid, DSET_NDATA_FA, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Write to the dataset */
+    if(H5Dwrite(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+	goto error;
+
+    /* Closing */
+    if(H5Sclose(sid) < 0)
+	goto error;
+    if(H5Dclose(did1) < 0)
+	goto error;
+    if(H5Dclose(did2) < 0)
+	goto error;
+
+
+    /* 
+     * Create 2 chunked datasets with implicit chunk indexing type 
+     * (one with data; one without data)
+     */
+
+    /* Create dataspace */
+    if((sid = H5Screate_simple(2, dims2, NULL)) < 0)
+	goto error;
+
+    /* Set early allocation */
+    if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY) < 0)
+	goto error;
+
+    /* Create the 2 datasets */
+    if((did1  = H5Dcreate2(fid, DSET_NONE, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    if((did2  = H5Dcreate2(gid, DSET_NDATA_NONE, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+	goto error;
+
+    /* Write to one dataset */
+    if(H5Dwrite(did1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+	goto error;
+
+    /* Closing */
+    if(H5Dclose(did1) < 0)
+	goto error;
+    if(H5Dclose(did2) < 0)
+	goto error;
+    if(H5Sclose(sid) < 0)
+	goto error;
+
+    if(H5Pclose(dcpl) < 0)
+	goto error;
+    if(H5Gclose(gid) < 0)
+	goto error;
+    if(H5Fclose(fid) < 0)
+	goto error;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Sclose(sid);
+        H5Dclose(did1);
+        H5Dclose(did2);
+        H5Gclose(gid);
+        H5Fclose(fid);
+        H5Pclose(fapl);
+        H5Pclose(fcpl);
+    } H5E_END_TRY;
+
+} /* gen_ext() */
+
+int main(void)
+{
+    unsigned i, new;
 
     /* Generate a non-latest-format file with v3 superblock */
     gen_non(NON_V3_FILE);
 
-    /* Generate a new format file with a no-filter-edge-chunk dataset for testing */
+    /* Generate a new format file with a no-filter-edge-chunk dataset */
     gen_edge(EDGE_V3_FILE);
+
+    /* Generate old/new format file with/without messages in the superblock extension */
+    for(new = FALSE; new <= TRUE; new++) {
+	for(i = 0; i < 8; i++) {
+            char filename[50];
+
+	    HDmemset(filename, 0, sizeof(filename));
+	    if(!new)
+		HDstrcat(filename, "old_");
+	    HDstrcat(filename, FILENAME[i]);
+
+	    gen_ext(filename, new, i);
+	}
+    } /* end for new */
+
     return 0;
 }
diff --git a/tools/h5format_convert/h5format_convert.c b/tools/h5format_convert/h5format_convert.c
index a80e332..105ac5d 100644
--- a/tools/h5format_convert/h5format_convert.c
+++ b/tools/h5format_convert/h5format_convert.c
@@ -88,16 +88,20 @@ static void usage(const char *prog)
 	printf("Examples of use:\n");
 	printf("\n");
 	printf("h5format_convert -d /group/dataset file_name\n");
-	printf("  Convert the chunk indexing type to version 1 B-tree\n");
-	printf("  for the chunked dataset </group/dataset> in the HDF5 file <file_name>.\n");
+	printf("  Convert the dataset </group/dataset> in the HDF5 file <file_name>:\n");
+	printf("    a. chunked dataset: convert the chunk indexing type to version 1 B-tree\n");
+	printf("    b. compact/contiguous dataset: downgrade the layout version to 3\n");
+	printf("    c. virtual dataset: no action\n");
 	printf("\n");
 	printf("h5format_convert file_name\n");
-	printf("  Convert the chunk indexing type to version 1 B-tree\n");
-	printf("  for all the chunked datasets in the HDF5 file <file_name>.\n");
+	printf("  Convert all datasets in the HDF5 file <file_name>:\n");
+	printf("    a. chunked dataset: convert the chunk indexing type to version 1 B-tree\n");
+	printf("    b. compact/contiguous dataset: downgrade the layout version to 3\n");
+	printf("    c. virtual dataset: no action\n");
 	printf("\n");
 	printf("h5format_convert -n -d /group/dataset file_name\n");
 	printf("  Go through all the steps except the actual conversion when \n");
-	printf("  converting the chunked dataset </group/dataset> in the HDF5 file <file_name>.\n");
+	printf("  converting the dataset </group/dataset> in the HDF5 file <file_name>.\n");
 } /* usage() */
 
 /*-------------------------------------------------------------------------
@@ -200,11 +204,15 @@ leave(int ret)
 /*-------------------------------------------------------------------------
  * Function: convert()
  *
- * Purpose: To change the chunk indexing type for the dataset to version 1 B-tree.
- *	    -- the dataset has to be chunked
- *	    -- the dataset's chunk indexing type is not already version 1 B-tree.
- *	    If the above conditions are not fulfilled, the tool will not perform
- *	    the conversion but will exit with success.
+ * Purpose: To downgrade a dataset's indexing type or layout version:
+ *		For chunked:
+ *		  Downgrade the chunk indexing type to version 1 B-tree
+ *	    	  If type is already version 1 B-tree, no further action
+ *		For compact/contiguous:
+ *		  Downgrade the layout version from 4 to 3
+ *		  If version is already <= 3, no further action
+ *		For virtual:
+ *		  No further action
  *
  * Return: Success: 0
  *  	   Failure: 1
@@ -244,34 +252,49 @@ convert(hid_t fid, const char *dname)
     } else if(verbose_g)
 	printf("Retrieve the dataset's layout\n");
 
-    /* No further action if not a chunked dataset */
-    if(layout_type != H5D_CHUNKED) {
-	if(verbose_g)
-	    printf("Dataset is not chunked: no further action\n");
-	h5tools_setstatus(EXIT_SUCCESS);
-	goto done;
+    switch(layout_type) {
+	case H5D_CHUNKED:
+	    if(verbose_g)
+		printf("Dataset is a chunked dataset\n");
 
-    } else if(verbose_g)
-	printf("Verify the dataset is a chunked dataset\n");
+	    /* Get the dataset's chunk indexing type */
+	    if(H5Dget_chunk_index_type(did, &idx_type) < 0) {
+		error_msg("unable to get the chunk indexing type for \"%s\"\n", dname);
+		h5tools_setstatus(EXIT_FAILURE);
+		goto error;
+	    } else if(verbose_g)
+		printf("Retrieve the dataset's chunk indexing type\n");
 
-    /* Get the dataset's chunk indexing type */
-    if(H5Dget_chunk_index_type(did, &idx_type) < 0) {
-	error_msg("unable to get the chunk indexing type for \"%s\"\n", dname);
-	h5tools_setstatus(EXIT_FAILURE);
-	goto error;
+	    if(idx_type == H5D_CHUNK_IDX_BTREE) {
+		if(verbose_g)
+		    printf("Dataset's chunk indexing type is already version 1 B-tree: no further action\n");
+		h5tools_setstatus(EXIT_SUCCESS);
+		goto done;
+	    } else if (verbose_g)
+		printf("Dataset's chunk indexing type is not version 1 B-tree\n");
+	    break;
 
-    } else if(verbose_g)
-	printf("Retrieve the dataset's chunk indexing type\n");
+	case H5D_CONTIGUOUS:
+	    if(verbose_g)
+		printf("Dataset is a contiguous dataset: downgrade layout version as needed\n");
+	    break;
 
-    /* No further action if the chunk indexing type is already version 1 B-tree */
-    if(idx_type == H5D_CHUNK_IDX_BTREE) {
-	if(verbose_g)
-	    printf("Chunk indexing type is already version 1 B-tree: no further action\n");
-	h5tools_setstatus(EXIT_SUCCESS);
-	goto done;
+        case H5D_COMPACT:
+	    if(verbose_g)
+		printf("Dataset is a compact dataset: downgrade layout version as needed\n");
+	    break;
+
+        case H5D_VIRTUAL:
+	    if(verbose_g)
+		printf("No further action for virtual dataset\n");
+	    goto done;
 
-    } else if (verbose_g)
-	printf("Verify the dataset's chunk indexing type is not version 1 B-tree\n");
+	default:
+	    error_msg("unknown layout type for \"%s\"\n", dname);
+	    h5tools_setstatus(EXIT_FAILURE);
+	    goto error;
+
+    } /* end switch */
 
     /* No further action if it is a noop */
     if(noop_g) {
@@ -284,12 +307,11 @@ convert(hid_t fid, const char *dname)
     if(verbose_g)
 	printf("Converting the dataset...\n");
 
-    /* Convert the dataset's chunk indexing type to version 1 B-tree */
+    /* Downgrade the dataset */
     if(H5Dformat_convert(did) < 0) {
-	error_msg("unable to convert chunk indexing for \"%s\"\n", dname);
+	error_msg("unable to downgrade dataset for \"%s\"\n", dname);
 	h5tools_setstatus(EXIT_FAILURE);
 	goto error;
-
     } else if(verbose_g)
 	printf("Done\n");
 
@@ -377,9 +399,6 @@ main(int argc, const char *argv[])
     H5E_auto2_t func;
     void *edata;
     hid_t fid = -1;
-    hid_t fcpl = -1;
-    H5F_file_space_type_t strategy;
-    hsize_t threshold;
 
     h5tools_setprogname(PROGRAMNAME);
     h5tools_setstatus(EXIT_SUCCESS);
@@ -408,28 +427,6 @@ main(int argc, const char *argv[])
     } else if(verbose_g)
 	printf("Open the file %s\n", fname_g);
 
-    /* A temporaray fix: 
-     * need to handle H5O_FSINFO_ID message when downgrade superblock version from 3 to 2 
-     */
-    if((fcpl = H5Fget_create_plist(fid)) < 0) {
-	error_msg("unable to get file creation property list for \"%s\"\n", fname_g);
-	h5tools_setstatus(EXIT_FAILURE);
-	goto done;
-    }
-    if(H5Pget_file_space(fcpl, &strategy, &threshold) < 0) {
-	error_msg("unable to get file space strategy/threshold\n");
-	h5tools_setstatus(EXIT_FAILURE);
-	goto done;
-    }
-    /* Check for non-default strategy/threshold: 
-     * --whether there is H5O_FSINFO_ID message in the superblock extension 
-     */
-    if(strategy != H5F_FILE_SPACE_ALL || threshold != 1) {
-	error_msg("unable to convert due to non-default file space strategy/threshold\n");
-	h5tools_setstatus(EXIT_FAILURE);
-	goto done;
-    }
-
     if(dset_g) { /* Convert a specified dataset in the file */
 	if(verbose_g)
 	    printf("Going to process dataset: %s...\n", dname_g);
@@ -443,16 +440,17 @@ main(int argc, const char *argv[])
     }
 
     if(verbose_g) {
-	if(noop_g) {
-            printf("Not processing the file's superblock version...\n");
-	    h5tools_setstatus(EXIT_SUCCESS);
-	    goto done;
-	}
-	printf("Processing the file's superblock version...\n");
+        if(noop_g) {
+            printf("Not processing the file's superblock...\n");
+            h5tools_setstatus(EXIT_SUCCESS);
+            goto done;
+        }
+        printf("Processing the file's superblock...\n");
     }
 
-    if(H5Fformat_convert_super(fid) < 0) {
-        error_msg("unable to convert file's superblock version\"%s\"\n", fname_g);
+    /* Process superblock */
+    if(H5Fformat_convert(fid) < 0) {
+        error_msg("unable to convert file's superblock\"%s\"\n", fname_g);
         h5tools_setstatus(EXIT_FAILURE);
         goto done;
     }
diff --git a/tools/h5format_convert/testfiles/h5fc_d_file.ddl b/tools/h5format_convert/testfiles/h5fc_d_file.ddl
index 3641a4f..ad7a2f4 100644
--- a/tools/h5format_convert/testfiles/h5fc_d_file.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_d_file.ddl
@@ -9,14 +9,18 @@ usage: h5format_convert [OPTIONS] file_name
 Examples of use:
 
 h5format_convert -d /group/dataset file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  Convert the dataset </group/dataset> in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for all the chunked datasets in the HDF5 file <file_name>.
+  Convert all datasets in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert -n -d /group/dataset file_name
   Go through all the steps except the actual conversion when 
-  converting the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  converting the dataset </group/dataset> in the HDF5 file <file_name>.
 h5format_convert error: missing file name
diff --git a/tools/h5format_convert/testfiles/h5fc_dname.ddl b/tools/h5format_convert/testfiles/h5fc_dname.ddl
index c391764..0de42cb 100644
--- a/tools/h5format_convert/testfiles/h5fc_dname.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_dname.ddl
@@ -9,14 +9,18 @@ usage: h5format_convert [OPTIONS] file_name
 Examples of use:
 
 h5format_convert -d /group/dataset file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  Convert the dataset </group/dataset> in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for all the chunked datasets in the HDF5 file <file_name>.
+  Convert all datasets in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert -n -d /group/dataset file_name
   Go through all the steps except the actual conversion when 
-  converting the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  converting the dataset </group/dataset> in the HDF5 file <file_name>.
 h5format_convert error: No dataset name
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_f.ddl b/tools/h5format_convert/testfiles/h5fc_ext1_f.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext1_f.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_f.h5 b/tools/h5format_convert/testfiles/h5fc_ext1_f.h5
new file mode 100644
index 0000000..b5c5867
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext1_f.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_i.ddl b/tools/h5format_convert/testfiles/h5fc_ext1_i.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext1_i.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_i.h5 b/tools/h5format_convert/testfiles/h5fc_ext1_i.h5
new file mode 100644
index 0000000..960a8d5
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext1_i.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_s.ddl b/tools/h5format_convert/testfiles/h5fc_ext1_s.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext1_s.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext1_s.h5 b/tools/h5format_convert/testfiles/h5fc_ext1_s.h5
new file mode 100644
index 0000000..103bde6
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext1_s.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_if.ddl b/tools/h5format_convert/testfiles/h5fc_ext2_if.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext2_if.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_if.h5 b/tools/h5format_convert/testfiles/h5fc_ext2_if.h5
new file mode 100644
index 0000000..88e42e7
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext2_if.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_is.ddl b/tools/h5format_convert/testfiles/h5fc_ext2_is.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext2_is.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_is.h5 b/tools/h5format_convert/testfiles/h5fc_ext2_is.h5
new file mode 100644
index 0000000..4d76436
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext2_is.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_sf.ddl b/tools/h5format_convert/testfiles/h5fc_ext2_sf.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext2_sf.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext2_sf.h5 b/tools/h5format_convert/testfiles/h5fc_ext2_sf.h5
new file mode 100644
index 0000000..c59a3ca
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext2_sf.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext3_isf.ddl b/tools/h5format_convert/testfiles/h5fc_ext3_isf.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/h5fc_ext3_isf.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/h5fc_ext3_isf.h5 b/tools/h5format_convert/testfiles/h5fc_ext3_isf.h5
new file mode 100644
index 0000000..d00fc55
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext3_isf.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_ext_none.h5 b/tools/h5format_convert/testfiles/h5fc_ext_none.h5
new file mode 100644
index 0000000..b1b1553
Binary files /dev/null and b/tools/h5format_convert/testfiles/h5fc_ext_none.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_help.ddl b/tools/h5format_convert/testfiles/h5fc_help.ddl
index 9081ab8..aef8c63 100644
--- a/tools/h5format_convert/testfiles/h5fc_help.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_help.ddl
@@ -9,13 +9,17 @@ usage: h5format_convert [OPTIONS] file_name
 Examples of use:
 
 h5format_convert -d /group/dataset file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  Convert the dataset </group/dataset> in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for all the chunked datasets in the HDF5 file <file_name>.
+  Convert all datasets in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert -n -d /group/dataset file_name
   Go through all the steps except the actual conversion when 
-  converting the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  converting the dataset </group/dataset> in the HDF5 file <file_name>.
diff --git a/tools/h5format_convert/testfiles/h5fc_latest_v3.h5 b/tools/h5format_convert/testfiles/h5fc_latest_v3.h5
deleted file mode 100644
index f7de743..0000000
Binary files a/tools/h5format_convert/testfiles/h5fc_latest_v3.h5 and /dev/null differ
diff --git a/tools/h5format_convert/testfiles/h5fc_non_v3.h5 b/tools/h5format_convert/testfiles/h5fc_non_v3.h5
index b1bffa8..af2e8c4 100644
Binary files a/tools/h5format_convert/testfiles/h5fc_non_v3.h5 and b/tools/h5format_convert/testfiles/h5fc_non_v3.h5 differ
diff --git a/tools/h5format_convert/testfiles/h5fc_nooption.ddl b/tools/h5format_convert/testfiles/h5fc_nooption.ddl
index 9081ab8..aef8c63 100644
--- a/tools/h5format_convert/testfiles/h5fc_nooption.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_nooption.ddl
@@ -9,13 +9,17 @@ usage: h5format_convert [OPTIONS] file_name
 Examples of use:
 
 h5format_convert -d /group/dataset file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  Convert the dataset </group/dataset> in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert file_name
-  Convert the chunk indexing type to version 1 B-tree
-  for all the chunked datasets in the HDF5 file <file_name>.
+  Convert all datasets in the HDF5 file <file_name>:
+    a. chunked dataset: convert the chunk indexing type to version 1 B-tree
+    b. compact/contiguous dataset: downgrade the layout version to 3
+    c. virtual dataset: no action
 
 h5format_convert -n -d /group/dataset file_name
   Go through all the steps except the actual conversion when 
-  converting the chunked dataset </group/dataset> in the HDF5 file <file_name>.
+  converting the dataset </group/dataset> in the HDF5 file <file_name>.
diff --git a/tools/h5format_convert/testfiles/h5fc_v1.h5 b/tools/h5format_convert/testfiles/h5fc_v1.h5
deleted file mode 100644
index d3d66f8..0000000
Binary files a/tools/h5format_convert/testfiles/h5fc_v1.h5 and /dev/null differ
diff --git a/tools/h5format_convert/testfiles/h5fc_v_all.ddl b/tools/h5format_convert/testfiles/h5fc_v_all.ddl
index 5a35c55..5e7365d 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_all.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_all.ddl
@@ -1,27 +1,77 @@
 Process command line options
 Open the file tmp.h5
 Processing all datasets in the file...
-Going to process dataset:/DSET_NDATA_BT1...
+Going to process dataset:/DSET_CONTIGUOUS...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a contiguous dataset: downgrade layout version as needed
+Converting the dataset...
+Done
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/DSET_EA...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/DSET_FA...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/DSET_NDATA_BT2...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/DSET_NONE...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Chunk indexing type is already version 1 B-tree: no further action
+Dataset's chunk indexing type is already version 1 B-tree: no further action
 Close the dataset
 Close the dataset creation property list
-Going to process dataset:/DSET_NON_CHUNKED...
+Going to process dataset:/GROUP/DSET_BT2...
 Open the dataset
 Retrieve the dataset's layout
-Dataset is not chunked: no further action
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/GROUP/DSET_NDATA_EA...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
+Close the dataset
+Close the dataset creation property list
+Going to process dataset:/GROUP/DSET_NDATA_FA...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is already version 1 B-tree: no further action
 Close the dataset
 Close the dataset creation property list
-Going to process dataset:/GROUP/DSET_BT1...
+Going to process dataset:/GROUP/DSET_NDATA_NONE...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Chunk indexing type is already version 1 B-tree: no further action
+Dataset's chunk indexing type is already version 1 B-tree: no further action
 Close the dataset
 Close the dataset creation property list
-Processing the file's superblock version...
+Processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/h5fc_v_bt1.ddl b/tools/h5format_convert/testfiles/h5fc_v_bt1.ddl
index c96b647..c501eb0 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_bt1.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_bt1.ddl
@@ -1,12 +1,12 @@
 Process command line options
 Open the file tmp.h5
-Going to process dataset: /GROUP/DSET_BT1...
+Going to process dataset: /GROUP/DSET_BT2...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Chunk indexing type is already version 1 B-tree: no further action
+Dataset's chunk indexing type is already version 1 B-tree: no further action
 Close the dataset
 Close the dataset creation property list
-Processing the file's superblock version...
+Processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl b/tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl
index a7a622a..ff5da4a 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_n_1d.ddl
@@ -4,11 +4,11 @@ Open the file tmp.h5
 Going to process dataset: /DSET_EA...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Verify the dataset's chunk indexing type is not version 1 B-tree
+Dataset's chunk indexing type is not version 1 B-tree
 Not converting the dataset
 Close the dataset
 Close the dataset creation property list
-Not processing the file's superblock version...
+Not processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/h5fc_v_n_all.ddl b/tools/h5format_convert/testfiles/h5fc_v_n_all.ddl
index 3e92568..d2ffbbf 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_n_all.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_n_all.ddl
@@ -2,47 +2,55 @@ Process command line options
 It is noop...
 Open the file tmp.h5
 Processing all datasets in the file...
+Going to process dataset:/DSET_CONTIGUOUS...
+Open the dataset
+Retrieve the dataset's layout
+Dataset is a contiguous dataset: downgrade layout version as needed
+Not converting the dataset
+Close the dataset
+Close the dataset creation property list
 Going to process dataset:/DSET_NDATA_BT2...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Verify the dataset's chunk indexing type is not version 1 B-tree
+Dataset's chunk indexing type is not version 1 B-tree
 Not converting the dataset
 Close the dataset
 Close the dataset creation property list
 Going to process dataset:/DSET_NDATA_EA...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Verify the dataset's chunk indexing type is not version 1 B-tree
+Dataset's chunk indexing type is not version 1 B-tree
 Not converting the dataset
 Close the dataset
 Close the dataset creation property list
 Going to process dataset:/GROUP/DSET_BT2...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Verify the dataset's chunk indexing type is not version 1 B-tree
+Dataset's chunk indexing type is not version 1 B-tree
 Not converting the dataset
 Close the dataset
 Close the dataset creation property list
-Going to process dataset:/GROUP/DSET_EA...
+Going to process dataset:/GROUP/DSET_COMPACT...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
-Retrieve the dataset's chunk indexing type
-Verify the dataset's chunk indexing type is not version 1 B-tree
+Dataset is a contiguous dataset: downgrade layout version as needed
 Not converting the dataset
 Close the dataset
 Close the dataset creation property list
-Going to process dataset:/GROUP/DSET_NON_CHUNKED...
+Going to process dataset:/GROUP/DSET_EA...
 Open the dataset
 Retrieve the dataset's layout
-Dataset is not chunked: no further action
+Dataset is a chunked dataset
+Retrieve the dataset's chunk indexing type
+Dataset's chunk indexing type is not version 1 B-tree
+Not converting the dataset
 Close the dataset
 Close the dataset creation property list
-Not processing the file's superblock version...
+Not processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/h5fc_v_ndata_bt1.ddl b/tools/h5format_convert/testfiles/h5fc_v_ndata_bt1.ddl
index bdf3380..ba794a7 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_ndata_bt1.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_ndata_bt1.ddl
@@ -1,13 +1,13 @@
 Process command line options
 It is noop...
 Open the file tmp.h5
-Going to process dataset: /DSET_NDATA_BT1...
+Going to process dataset: /DSET_NDATA_BT2...
 Open the dataset
 Retrieve the dataset's layout
-Verify the dataset is a chunked dataset
+Dataset is a chunked dataset
 Retrieve the dataset's chunk indexing type
-Chunk indexing type is already version 1 B-tree: no further action
+Dataset's chunk indexing type is already version 1 B-tree: no further action
 Close the dataset
 Close the dataset creation property list
-Not processing the file's superblock version...
+Not processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/h5fc_v_non_chunked.ddl b/tools/h5format_convert/testfiles/h5fc_v_non_chunked.ddl
index 4caafe9..aba0740 100644
--- a/tools/h5format_convert/testfiles/h5fc_v_non_chunked.ddl
+++ b/tools/h5format_convert/testfiles/h5fc_v_non_chunked.ddl
@@ -1,10 +1,12 @@
 Process command line options
 Open the file tmp.h5
-Going to process dataset: /DSET_NON_CHUNKED...
+Going to process dataset: /DSET_CONTIGUOUS...
 Open the dataset
 Retrieve the dataset's layout
-Dataset is not chunked: no further action
+Dataset is a contiguous dataset: downgrade layout version as needed
+Converting the dataset...
+Done
 Close the dataset
 Close the dataset creation property list
-Processing the file's superblock version...
+Processing the file's superblock...
 Close the file
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_f.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext1_f.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext1_f.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_f.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext1_f.h5
new file mode 100644
index 0000000..3cbc7f4
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext1_f.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_i.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext1_i.ddl
new file mode 100644
index 0000000..c906082
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext1_i.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 1
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_i.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext1_i.h5
new file mode 100644
index 0000000..a2c9187
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext1_i.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_s.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext1_s.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext1_s.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext1_s.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext1_s.h5
new file mode 100644
index 0000000..fdf4f33
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext1_s.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_if.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext2_if.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext2_if.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_if.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext2_if.h5
new file mode 100644
index 0000000..6bf0a2f
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext2_if.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_is.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext2_is.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext2_is.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_is.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext2_is.h5
new file mode 100644
index 0000000..c0c7ecc
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext2_is.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.ddl
new file mode 100644
index 0000000..fb5192d
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 32
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.h5
new file mode 100644
index 0000000..055cabf
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext2_sf.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.ddl b/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.ddl
new file mode 100644
index 0000000..2fff4ac
--- /dev/null
+++ b/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.ddl
@@ -0,0 +1,58 @@
+HDF5 "./testfiles/tmp.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 2
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   ISTORE_K 64
+   FILE_SPACE_STRATEGY H5F_FILE_SPACE_ALL
+   FREE_SPACE_THRESHOLD 1
+   USER_BLOCK {
+      USERBLOCK_SIZE 0
+   }
+}
+GROUP "/" {
+   DATASET "DSET_CONTIGUOUS" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   }
+   DATASET "DSET_EA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_FA" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+   }
+   DATASET "DSET_NDATA_BT2" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+   }
+   DATASET "DSET_NONE" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+   }
+   GROUP "GROUP" {
+      DATASET "DSET_BT2" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( H5S_UNLIMITED, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_EA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 10, H5S_UNLIMITED ) }
+      }
+      DATASET "DSET_NDATA_FA" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 20, 10 ) }
+      }
+      DATASET "DSET_NDATA_NONE" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 6 ) / ( 4, 6 ) }
+      }
+   }
+}
+}
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.h5
new file mode 100644
index 0000000..f4caaf4
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext3_isf.h5 differ
diff --git a/tools/h5format_convert/testfiles/old_h5fc_ext_none.h5 b/tools/h5format_convert/testfiles/old_h5fc_ext_none.h5
new file mode 100644
index 0000000..d0bf344
Binary files /dev/null and b/tools/h5format_convert/testfiles/old_h5fc_ext_none.h5 differ
diff --git a/tools/h5format_convert/testh5fc.sh.in b/tools/h5format_convert/testh5fc.sh.in
index dc5aa48..f712434 100644
--- a/tools/h5format_convert/testh5fc.sh.in
+++ b/tools/h5format_convert/testh5fc.sh.in
@@ -41,6 +41,8 @@ RM='rm -rf'
 CMP='cmp -s'
 DIFF='diff -c'
 CP='cp'
+H5DUMP=../h5dump/h5dump         # The h5dump tool name
+H5DUMP_BIN=`pwd`/$H5DUMP        # The path of the h5dump tool binary
 DIRNAME='dirname'
 LS='ls'
 AWK='awk'
@@ -79,10 +81,24 @@ TMPFILE=tmp.h5
 #       Comment '#' without space can be used.
 # --------------------------------------------------------------------
 LIST_HDF5_TEST_FILES="
-$SRC_H5FORMCONV_TESTFILES/h5fc_v1.h5
-$SRC_H5FORMCONV_TESTFILES/h5fc_latest_v3.h5
 $SRC_H5FORMCONV_TESTFILES/h5fc_non_v3.h5
 $SRC_H5FORMCONV_TESTFILES/h5fc_edge_v3.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext_none.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext_none.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_i.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_s.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_f.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_if.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_is.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_sf.h5
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext3_isf.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_i.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_s.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_f.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_if.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_is.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_sf.h5
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext3_isf.h5
 "
 
 LIST_OTHER_TEST_FILES="
@@ -98,6 +114,20 @@ $SRC_H5FORMCONV_TESTFILES/h5fc_v_ndata_bt1.ddl
 $SRC_H5FORMCONV_TESTFILES/h5fc_v_all.ddl
 $SRC_H5FORMCONV_TESTFILES/h5fc_v_n_1d.ddl
 $SRC_H5FORMCONV_TESTFILES/h5fc_v_n_all.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_i.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_s.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext1_f.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_if.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_is.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext2_sf.ddl
+$SRC_H5FORMCONV_TESTFILES/h5fc_ext3_isf.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_i.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_s.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext1_f.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_if.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_is.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext2_sf.ddl
+$SRC_H5FORMCONV_TESTFILES/old_h5fc_ext3_isf.ddl
 "
 
 #
@@ -199,14 +229,7 @@ TOOLTEST_OUT() {
     cat $actual_err >> $actual
 
     # Compare output
-    if $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
+    COMPARE_OUT $expect $actual
 
     # Clean up output file
     if test -z "$HDF5_NOCLEANUP"; then
@@ -243,8 +266,8 @@ CHECKING() {
    echo "Verifying $* $SPACES" | cut -c1-80 | tr -d '\012'
 }
 
-# $1 dataset name
 # Assume $TESTDIR/$TMPFILE is the converted test file
+# $1 dataset name
 IDX_CHECK() {
     CHECKING $1
     $RUNSERIAL $CHK_IDX_BIN $TESTDIR/$TMPFILE $1
@@ -258,6 +281,39 @@ IDX_CHECK() {
     fi
 }
 
+# $1 is the expected output
+# $2 is the output from testing
+COMPARE_OUT() {
+    if $CMP $1 $2; 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
+}
+
+# Assume $TESTDIR/$TMPFILE is the converted test file
+# $1 is the test file for verifying h5dump output
+# $2 is the expected output from h5dump
+H5DUMP_CHECK() {
+    CHECKING h5dump output for $1
+    expect="$TESTDIR/$2"
+    actual="$TESTDIR/`basename $2 .ddl`.out"
+    actual_err="$TESTDIR/`basename $2 .ddl`.err"
+    $RUNSERIAL $H5DUMP_BIN -BH $TESTDIR/$TMPFILE > $actual 2>$actual_err
+    cat $actual_err >> $actual
+
+    # Compare output
+    COMPARE_OUT $expect $actual
+
+    # Clean up output file
+    if test -z "$HDF5_NOCLEANUP"; then
+	$RM $actual $actual_err
+    fi
+}
+
 # Print a "SKIP" message
 SKIP() {
     TESTING $STAT $@
@@ -284,31 +340,31 @@ TOOLTEST_OUT h5fc_nooption.ddl ''
 TOOLTEST_OUT h5fc_nonexistfile.ddl nonexist.h5
 #
 #
-# h5format_convert -d h5fc_v1.h5 (just -d option, file exists)
-# h5format_convert --dname h5fc_v1.h5 (just --dname option, file exists)
+# h5format_convert -d old_h5fc_ext_none.h5 (just -d option, file exists)
+# h5format_convert --dname old_h5fc_ext_none.h5 (just --dname option, file exists)
 # h5format_convert --dname (just --dname option)
-# h5format_convert --dname=nonexist h5fc_v1.h5 (dataset does not exist, file exists)
-TOOLTEST_OUT h5fc_d_file.ddl h5fc_v1.h5 -d
-TOOLTEST_OUT h5fc_d_file.ddl h5fc_v1.h5 --dname
+# h5format_convert --dname=nonexist old_h5fc_ext_none.h5 (dataset does not exist, file exists)
+TOOLTEST_OUT h5fc_d_file.ddl old_h5fc_ext_none.h5 -d
+TOOLTEST_OUT h5fc_d_file.ddl old_h5fc_ext_none.h5 --dname
 TOOLTEST_OUT h5fc_dname.ddl '' --dname
-TOOLTEST_OUT h5fc_nonexistdset_file.ddl h5fc_v1.h5 --dname=nonexist
+TOOLTEST_OUT h5fc_nonexistdset_file.ddl old_h5fc_ext_none.h5 --dname=nonexist
 #
 #
 #
-# h5format_convert -d /DSET_NON_CHUNKED -v h5fc_v1.h5 (verbose, non-chunked dataset)
-# h5format_convert -d /GROUP/DSET_BT1 --verbose h5fc_v1.h5 (verbose, bt1 dataset)
-# h5format_convert -d /DSET_NDATA_BT1 -v -n h5fc_v1.h5 (verbose, noop, bt1+nodata dataset)
-# h5format_convert -v h5fc_v1.h5 (verbose, all datasets)
-TOOLTEST_OUT h5fc_v_non_chunked.ddl h5fc_v1.h5 -d /DSET_NON_CHUNKED -v
-TOOLTEST_OUT h5fc_v_bt1.ddl h5fc_v1.h5 -d /GROUP/DSET_BT1 --verbose
-TOOLTEST_OUT h5fc_v_ndata_bt1.ddl h5fc_v1.h5 -d /DSET_NDATA_BT1 -v -n
-TOOLTEST_OUT h5fc_v_all.ddl h5fc_v1.h5 -v
+# h5format_convert -d /DSET_CONTIGUOUS -v old_h5fc_ext_none.h5 (verbose, contiguous dataset)
+# h5format_convert -d /GROUP/DSET_BT2 --verbose old_h5fc_ext_none.h5 (verbose, bt1 dataset)
+# h5format_convert -d /DSET_NDATA_BT2 -v -n old_h5fc_ext_none.h5 (verbose, noop, bt1+nodata dataset)
+# h5format_convert -v old_h5fc_ext_none.h5 (verbose, all datasets)
+TOOLTEST_OUT h5fc_v_non_chunked.ddl old_h5fc_ext_none.h5 -d /DSET_CONTIGUOUS -v
+TOOLTEST_OUT h5fc_v_bt1.ddl old_h5fc_ext_none.h5 -d /GROUP/DSET_BT2 --verbose
+TOOLTEST_OUT h5fc_v_ndata_bt1.ddl old_h5fc_ext_none.h5 -d /DSET_NDATA_BT2 -v -n
+TOOLTEST_OUT h5fc_v_all.ddl old_h5fc_ext_none.h5 -v
 #
 #
 #
-# h5format_convert -d /DSET_EA -v -n h5fc_latest_v3.h5 (verbose, noop, one ea dataset)
+# h5format_convert -d /DSET_EA -v -n h5fc_ext_none.h5 (verbose, noop, one ea dataset)
 # h5format_convert -v -n h5fc_non_v3.h5 (verbose, noop, all datasets)
-TOOLTEST_OUT h5fc_v_n_1d.ddl h5fc_latest_v3.h5 -d /DSET_EA -v -n
+TOOLTEST_OUT h5fc_v_n_1d.ddl h5fc_ext_none.h5 -d /DSET_EA -v -n
 TOOLTEST_OUT h5fc_v_n_all.ddl h5fc_non_v3.h5 -v -n
 #
 #
@@ -316,45 +372,45 @@ TOOLTEST_OUT h5fc_v_n_all.ddl h5fc_non_v3.h5 -v -n
 # No output from tests
 # 1) Use the tool to convert the dataset
 # 2) Verify the chunk indexing type is correct
-# h5format_convert -d /DSET_EA h5fc_latest_v3.h5
-# h5format_convert -d /GROUP/DSET_NDATA_EA h5fc_latest_v3.h5
-# h5format_convert -d /GROUP/DSET_BT2 h5fc_latest_v3.h5
-# h5format_convert -d /DSET_NDATA_BT2 h5fc_latest_v3.h5
-# h5format_convert -d /DSET_FA h5fc_latest_v3.h5
-# h5format_convert -d /GROUP/DSET_FA h5fc_latest_v3.h5
-# h5format_convert -d /DSET_NONE h5fc_latest_v3.h5
-# h5format_convert -d /GROUP/DSET_NONE h5fc_latest_v3.h5
-TOOLTEST h5fc_latest_v3.h5 -d /DSET_EA
+# h5format_convert -d /DSET_EA h5fc_ext_none.h5
+# h5format_convert -d /GROUP/DSET_NDATA_EA h5fc_ext_none.h5
+# h5format_convert -d /GROUP/DSET_BT2 h5fc_ext_none.h5
+# h5format_convert -d /DSET_NDATA_BT2 h5fc_ext_none.h5
+# h5format_convert -d /DSET_FA h5fc_ext_none.h5
+# h5format_convert -d /GROUP/DSET_FA h5fc_ext_none.h5
+# h5format_convert -d /DSET_NONE h5fc_ext_none.h5
+# h5format_convert -d /GROUP/DSET_NDATA_NONE h5fc_ext_none.h5
+TOOLTEST h5fc_ext_none.h5 -d /DSET_EA
 IDX_CHECK /DSET_EA
 #
-TOOLTEST h5fc_latest_v3.h5 -d /GROUP/DSET_NDATA_EA
+TOOLTEST h5fc_ext_none.h5 -d /GROUP/DSET_NDATA_EA
 IDX_CHECK /GROUP/DSET_NDATA_EA
 #
-TOOLTEST h5fc_latest_v3.h5 -d /GROUP/DSET_BT2
+TOOLTEST h5fc_ext_none.h5 -d /GROUP/DSET_BT2
 IDX_CHECK /GROUP/DSET_BT2
 #
-TOOLTEST h5fc_latest_v3.h5 -d /DSET_NDATA_BT2
+TOOLTEST h5fc_ext_none.h5 -d /DSET_NDATA_BT2
 IDX_CHECK /DSET_NDATA_BT2
 #
-TOOLTEST h5fc_latest_v3.h5 -d /DSET_FA
+TOOLTEST h5fc_ext_none.h5 -d /DSET_FA
 IDX_CHECK /DSET_FA
 #
-TOOLTEST h5fc_latest_v3.h5 -d /GROUP/DSET_NDATA_FA
+TOOLTEST h5fc_ext_none.h5 -d /GROUP/DSET_NDATA_FA
 IDX_CHECK /GROUP/DSET_NDATA_FA
 #
-TOOLTEST h5fc_latest_v3.h5 -d /DSET_NONE
+TOOLTEST h5fc_ext_none.h5 -d /DSET_NONE
 IDX_CHECK /DSET_NONE
 #
-TOOLTEST h5fc_latest_v3.h5 -d /GROUP/DSET_NDATA_NONE
+TOOLTEST h5fc_ext_none.h5 -d /GROUP/DSET_NDATA_NONE
 IDX_CHECK /GROUP/DSET_NDATA_NONE
 #
 #
 #
 # No output from tests: just check exit code
-# h5format_convert -d /DSET_NDATA_BT1 h5fc_v1.h5 (v1-btree dataset)
-# h5format_convert -d /GROUP/DSET_NON_CHUNKED h5fc_non_v3.h5 (non-chunked dataset)
-TOOLTEST h5fc_v1.h5 -d /DSET_NDATA_BT1
-TOOLTEST h5fc_non_v3.h5 -d /GROUP/DSET_NON_CHUNKED
+# h5format_convert -d /DSET_NDATA_BT2 old_h5fc_ext_none.h5 (v1-btree dataset)
+# h5format_convert -d /DSET_CONTIGUOUS h5fc_non_v3.h5 (non-chunked dataset)
+TOOLTEST old_h5fc_ext_none.h5 -d /DSET_NDATA_BT2
+TOOLTEST h5fc_non_v3.h5 -d /DSET_CONTIGUOUS
 #
 #
 #
@@ -386,6 +442,44 @@ TOOLTEST h5fc_edge_v3.h5
 IDX_CHECK /DSET_EDGE
 #
 #
+
+# The following test files have messages in the superblock extension.
+# Verify h5dump output for correctness after conversion
+TOOLTEST h5fc_ext1_i.h5
+H5DUMP_CHECK h5fc_ext1_i.h5 h5fc_ext1_i.ddl
+TOOLTEST h5fc_ext1_s.h5
+H5DUMP_CHECK h5fc_ext1_s.h5 h5fc_ext1_s.ddl
+TOOLTEST h5fc_ext1_f.h5
+H5DUMP_CHECK h5fc_ext1_f.h5 h5fc_ext1_f.ddl
+#
+TOOLTEST h5fc_ext2_if.h5
+H5DUMP_CHECK h5fc_ext2_if.h5 h5fc_ext2_if.ddl
+TOOLTEST h5fc_ext2_is.h5
+H5DUMP_CHECK h5fc_ext2_is.h5 h5fc_ext2_is.ddl
+TOOLTEST h5fc_ext2_sf.h5
+H5DUMP_CHECK h5fc_ext2_sf.h5 h5fc_ext2_sf.ddl
+#
+TOOLTEST h5fc_ext3_isf.h5
+H5DUMP_CHECK h5fc_ext3_isf.h5 h5fc_ext3_isf.ddl
+#
+#
+#
+TOOLTEST old_h5fc_ext1_i.h5
+H5DUMP_CHECK old_h5fc_ext1_i.h5 old_h5fc_ext1_i.ddl
+TOOLTEST old_h5fc_ext1_s.h5
+H5DUMP_CHECK old_h5fc_ext1_s.h5 old_h5fc_ext1_s.ddl
+TOOLTEST old_h5fc_ext1_f.h5
+H5DUMP_CHECK old_h5fc_ext1_f.h5 old_h5fc_ext1_f.ddl
+#
+TOOLTEST old_h5fc_ext2_if.h5
+H5DUMP_CHECK old_h5fc_ext2_if.h5 old_h5fc_ext2_if.ddl
+TOOLTEST old_h5fc_ext2_is.h5
+H5DUMP_CHECK old_h5fc_ext2_is.h5 old_h5fc_ext2_is.ddl
+TOOLTEST old_h5fc_ext2_sf.h5
+H5DUMP_CHECK old_h5fc_ext2_sf.h5 old_h5fc_ext2_sf.ddl
+#
+TOOLTEST old_h5fc_ext3_isf.h5
+H5DUMP_CHECK old_h5fc_ext3_isf.h5 old_h5fc_ext3_isf.ddl
 #
 # Clean up temporary files/directories
 CLEAN_TESTFILES_AND_TESTDIR
diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in
index 8db3f74..dd401fa 100644
--- a/tools/h5import/Makefile.in
+++ b/tools/h5import/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5import
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -425,18 +438,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -449,7 +466,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -487,10 +503,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -501,6 +521,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -511,8 +532,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -527,6 +560,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -534,6 +569,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -557,6 +593,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -572,7 +609,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -581,8 +620,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -661,6 +702,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in
index 0a14c43..9d3a3e4 100644
--- a/tools/h5jam/Makefile.in
+++ b/tools/h5jam/Makefile.in
@@ -111,10 +111,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = tools/h5jam
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -437,18 +450,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -461,7 +478,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -499,10 +515,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -513,6 +533,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -523,8 +544,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -539,6 +572,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -546,6 +581,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -569,6 +605,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -584,7 +621,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -593,8 +632,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -673,6 +714,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in
index cfb169c..fe76617 100644
--- a/tools/h5ls/Makefile.in
+++ b/tools/h5ls/Makefile.in
@@ -110,10 +110,23 @@ TESTS = $(TEST_SCRIPT)
 subdir = tools/h5ls
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -417,18 +430,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -441,7 +458,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -479,10 +495,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -493,6 +513,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -503,8 +524,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -519,6 +552,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -526,6 +561,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -549,6 +585,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -564,7 +601,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -573,8 +612,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -653,6 +694,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c
index c962e80..91e1c93 100644
--- a/tools/h5ls/h5ls.c
+++ b/tools/h5ls/h5ls.c
@@ -974,7 +974,7 @@ print_enum_type(h5tools_str_t *buffer, hid_t type, int ind)
 
         /* Release resources */
         for(i = 0; i < (unsigned)nmembs; i++)
-            HDfree(name[i]);
+            H5free_memory(name[i]);
         HDfree(name);
         HDfree(value);
     }
@@ -1857,13 +1857,10 @@ dataset_list2(hid_t dset, const char H5_ATTR_UNUSED *name)
 
                     if (vmaps) {
                         size_t next;
-                        ssize_t ssize_out;
 
                         h5tools_str_append(&buffer, "    %-10s {%ld} Source {\n", "Maps:", vmaps);
                         for (next = 0; next < (unsigned) vmaps; next++) {
-                            ssize_out = H5Pget_virtual_filename(dcpl, next, NULL, 0);
                             H5Pget_virtual_filename(dcpl, next, f_name, sizeof(f_name));
-                            ssize_out = H5Pget_virtual_dsetname(dcpl, next, NULL, 0);
                             H5Pget_virtual_dsetname(dcpl, next, dset_name, sizeof(dset_name));
                             h5tools_str_append(&buffer, "    %-10s        ", " ");
                             print_string(&buffer, f_name, TRUE);
diff --git a/tools/h5repack/CMakeLists.txt b/tools/h5repack/CMakeLists.txt
index 7631ae8..d8542a4 100644
--- a/tools/h5repack/CMakeLists.txt
+++ b/tools/h5repack/CMakeLists.txt
@@ -56,12 +56,7 @@ if (BUILD_TESTING)
   add_library (${HDF5_TOOL_PLUGIN_LIB_TARGET} SHARED dynlib_rpk.c)
   TARGET_C_PROPERTIES (${HDF5_TOOL_PLUGIN_LIB_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_TOOL_PLUGIN_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
-  H5_SET_LIB_OPTIONS (
-      ${HDF5_TOOL_PLUGIN_LIB_TARGET} ${HDF5_TOOL_PLUGIN_LIB_NAME}
-      SHARED
-      HDF5_TOOL_PLUGIN_LIB_NAME_RELEASE
-      HDF5_TOOL_PLUGIN_LIB_NAME_DEBUG
-  )
+  H5_SET_LIB_OPTIONS (${HDF5_TOOL_PLUGIN_LIB_TARGET} ${HDF5_TOOL_PLUGIN_LIB_NAME} SHARED ${HDF5_PACKAGE_SOVERSION})
 
   # make plugins dir
   file (MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/plugins")
@@ -72,13 +67,13 @@ if (BUILD_TESTING)
       TARGET     ${HDF5_TOOL_PLUGIN_LIB_TARGET}
       POST_BUILD
       COMMAND    ${CMAKE_COMMAND}
-      ARGS       -E copy_if_different 
+      ARGS       -E copy_if_different
           "$<TARGET_FILE:${HDF5_TOOL_PLUGIN_LIB_TARGET}>"
           "${CMAKE_BINARY_DIR}/plugins/$<TARGET_FILE_NAME:${HDF5_TOOL_PLUGIN_LIB_TARGET}>"
   )
 
   include (CMakeTests.cmake)
-  
+
 endif (BUILD_TESTING)
 
 ##############################################################################
diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in
index 2402615..7fb265c 100644
--- a/tools/h5repack/Makefile.in
+++ b/tools/h5repack/Makefile.in
@@ -114,10 +114,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5repack
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -449,18 +462,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -473,7 +490,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -511,10 +527,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -525,6 +545,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -535,8 +556,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -551,6 +584,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -558,6 +593,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -581,6 +617,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -596,7 +633,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -605,8 +644,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -685,6 +726,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/h5repack/testfiles/deflate_limit.h5repack_layout.h5.ddl b/tools/h5repack/testfiles/deflate_limit.h5repack_layout.h5.ddl
index b8e7e68..80b8a19 100644
--- a/tools/h5repack/testfiles/deflate_limit.h5repack_layout.h5.ddl
+++ b/tools/h5repack/testfiles/deflate_limit.h5repack_layout.h5.ddl
@@ -12,7 +12,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -30,7 +30,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -48,7 +48,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -66,7 +66,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -84,7 +84,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -102,7 +102,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -120,7 +120,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
diff --git a/tools/h5repack/testfiles/h5repack_layout.UD.h5-plugin_none.ddl b/tools/h5repack/testfiles/h5repack_layout.UD.h5-plugin_none.ddl
index fb94c21..66c4c69 100644
--- a/tools/h5repack/testfiles/h5repack_layout.UD.h5-plugin_none.ddl
+++ b/tools/h5repack/testfiles/h5repack_layout.UD.h5-plugin_none.ddl
@@ -12,7 +12,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -30,7 +30,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -48,7 +48,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -66,7 +66,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -84,7 +84,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -102,7 +102,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -120,7 +120,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
diff --git a/tools/h5repack/testfiles/h5repack_layout.h5-plugin_test.ddl b/tools/h5repack/testfiles/h5repack_layout.h5-plugin_test.ddl
index 7a3a01e..87b133d 100644
--- a/tools/h5repack/testfiles/h5repack_layout.h5-plugin_test.ddl
+++ b/tools/h5repack/testfiles/h5repack_layout.h5-plugin_test.ddl
@@ -16,7 +16,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -38,7 +38,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -60,7 +60,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -82,7 +82,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -104,7 +104,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -126,7 +126,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
@@ -148,7 +148,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_INCR
diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in
index 5988f7e..10a3ae8 100644
--- a/tools/h5stat/Makefile.in
+++ b/tools/h5stat/Makefile.in
@@ -112,10 +112,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/h5stat
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -427,18 +440,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -451,7 +468,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -489,10 +505,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -503,6 +523,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -513,8 +534,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -529,6 +562,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -536,6 +571,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -559,6 +595,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -574,7 +611,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -583,8 +622,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -663,6 +704,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt
index 38c84a2..ce1ad34 100644
--- a/tools/lib/CMakeLists.txt
+++ b/tools/lib/CMakeLists.txt
@@ -41,13 +41,8 @@ add_library (${HDF5_TOOLS_LIB_TARGET} STATIC ${H5_TOOLS_LIB_SRCS} ${H5_TOOLS_LIB
 TARGET_C_PROPERTIES (${HDF5_TOOLS_LIB_TARGET} STATIC " " " ")
 target_link_libraries (${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_TOOLS_LIB_TARGET}")
-H5_SET_LIB_OPTIONS (
-    ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TOOLS_LIB_NAME}
-    STATIC
-    HDF5_TOOLS_LIB_NAME_RELEASE
-    HDF5_TOOLS_LIB_NAME_DEBUG
-)
-set_target_properties (${HDF5_TOOLS_LIB_TARGET} PROPERTIES 
+H5_SET_LIB_OPTIONS (${HDF5_TOOLS_LIB_TARGET} ${HDF5_TOOLS_LIB_NAME} STATIC)
+set_target_properties (${HDF5_TOOLS_LIB_TARGET} PROPERTIES
     FOLDER libraries/tools
     INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
 )
@@ -59,13 +54,8 @@ if (BUILD_SHARED_LIBS)
   TARGET_C_PROPERTIES (${HDF5_TOOLS_LIBSH_TARGET} SHARED " " " ")
   target_link_libraries (${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_LIBSH_TARGET})
   set_global_variable (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_TOOLS_LIBSH_TARGET}")
-  H5_SET_LIB_OPTIONS (
-      ${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_TOOLS_LIB_NAME}
-      SHARED
-      HDF5_TOOLS_LIB_NAME_RELEASE
-      HDF5_TOOLS_LIB_NAME_DEBUG
-  )
-  set_target_properties (${HDF5_TOOLS_LIBSH_TARGET} PROPERTIES 
+  H5_SET_LIB_OPTIONS (${HDF5_TOOLS_LIBSH_TARGET} ${HDF5_TOOLS_LIB_NAME} SHARED ${HDF5_TOOLS_PACKAGE_SOVERSION})
+  set_target_properties (${HDF5_TOOLS_LIBSH_TARGET} PROPERTIES
       FOLDER libraries/tools
       COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB"
       INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in
index 0f27b53..fbc8bc4 100644
--- a/tools/lib/Makefile.in
+++ b/tools/lib/Makefile.in
@@ -110,10 +110,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = tools/lib
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -414,18 +427,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -438,7 +455,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -476,10 +492,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -490,6 +510,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -500,8 +521,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -516,6 +549,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -523,6 +558,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -546,6 +582,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -561,7 +598,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -570,8 +609,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -650,6 +691,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/lib/h5tools_dump.c b/tools/lib/h5tools_dump.c
index 39cfbeb..9e285a9 100644
--- a/tools/lib/h5tools_dump.c
+++ b/tools/lib/h5tools_dump.c
@@ -1360,7 +1360,7 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
 
     if (ctx->ndims > 2) {
         for (i = 0; i < (size_t) ctx->ndims - 2; i++) {
-            max_start[i] = temp_start[i] + sset->count.data[i];
+            max_start[i] = temp_start[i] + sset->count.data[i] * sset->stride.data[i];
             temp_count[i] = 1;
         }
     }
@@ -1402,14 +1402,10 @@ h5tools_display_simple_subset(FILE *stream, const h5tool_format_t *info, h5tools
             /* increment start dimension */
             do {
                 reset_dim = 0;
-                temp_start[current_outer_dim]++;
+                temp_start[current_outer_dim] += sset->stride.data[current_outer_dim];
                 if (temp_start[current_outer_dim] >= max_start[current_outer_dim]) {
                     temp_start[current_outer_dim] = sset->start.data[current_outer_dim];
 
-                    /* consider block */
-                    if (sset->block.data[current_outer_dim] > 1)
-                        temp_start[current_outer_dim]++;
-
                     current_outer_dim--;
                     reset_dim = 1;
                 }
@@ -2873,7 +2869,7 @@ h5tools_dump_oid(FILE *stream, const h5tool_format_t *info,
  *-------------------------------------------------------------------------
  */
 static void
-h5tools_print_virtual_selection(hid_t vspace, 
+h5tools_print_virtual_selection(hid_t vspace,
         FILE *stream, const h5tool_format_t *info,
         h5tools_context_t *ctx/*in,out*/,
         h5tools_str_t *buffer/*string into which to render */,
@@ -3312,175 +3308,176 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
     * FILTERS
     *-------------------------------------------------------------------------
     */
-
+    if (H5D_VIRTUAL != stl) {
     ctx->need_prefix = TRUE;
-    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
-
-    h5tools_str_reset(&buffer);
-    h5tools_str_append(&buffer, "%s %s", FILTERS, BEGIN);
-    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-    ctx->indent_level++;
+        h5tools_str_reset(&buffer);
+        h5tools_str_append(&buffer, "%s %s", FILTERS, BEGIN);
+        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-    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);
+        ctx->indent_level++;
 
-            if(filtn < 0)
-                continue; /* nothing to print for invalid filter */
+        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);
 
-            ctx->need_prefix = TRUE;
-            h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                if(filtn < 0)
+                    continue; /* nothing to print for invalid filter */
 
-            h5tools_str_reset(&buffer);
-            switch(filtn) {
-                case H5Z_FILTER_DEFLATE:
-                    h5tools_str_append(&buffer, "%s %s %s %d %s", DEFLATE, BEGIN, DEFLATE_LEVEL, cd_values[0], END);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                case H5Z_FILTER_SHUFFLE:
-                    h5tools_str_append(&buffer, "%s", SHUFFLE);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                case H5Z_FILTER_FLETCHER32:
-                    h5tools_str_append(&buffer, "%s", FLETCHER32);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                case H5Z_FILTER_SZIP:
-                    szip_options_mask = cd_values[0];;
-                    szip_pixels_per_block = cd_values[1];
-
-                    h5tools_str_append(&buffer, "%s %s", SZIP, BEGIN);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                ctx->need_prefix = TRUE;
+                h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    ctx->indent_level++;
+                h5tools_str_reset(&buffer);
+                switch(filtn) {
+                    case H5Z_FILTER_DEFLATE:
+                        h5tools_str_append(&buffer, "%s %s %s %d %s", DEFLATE, BEGIN, DEFLATE_LEVEL, cd_values[0], END);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    case H5Z_FILTER_SHUFFLE:
+                        h5tools_str_append(&buffer, "%s", SHUFFLE);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    case H5Z_FILTER_FLETCHER32:
+                        h5tools_str_append(&buffer, "%s", FLETCHER32);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    case H5Z_FILTER_SZIP:
+                        szip_options_mask = cd_values[0];;
+                        szip_pixels_per_block = cd_values[1];
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                        h5tools_str_append(&buffer, "%s %s", SZIP, BEGIN);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-                    h5tools_str_reset(&buffer);
-                    h5tools_str_append(&buffer, "PIXELS_PER_BLOCK %d", szip_pixels_per_block);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        ctx->indent_level++;
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                        ctx->need_prefix = TRUE;
+                        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    h5tools_str_reset(&buffer);
-                    if(szip_options_mask & H5_SZIP_CHIP_OPTION_MASK)
-                        h5tools_str_append(&buffer, "MODE %s", "HARDWARE");
-                    else if(szip_options_mask & H5_SZIP_ALLOW_K13_OPTION_MASK)
-                        h5tools_str_append(&buffer, "MODE %s", "K13");
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        h5tools_str_reset(&buffer);
+                        h5tools_str_append(&buffer, "PIXELS_PER_BLOCK %d", szip_pixels_per_block);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                        ctx->need_prefix = TRUE;
+                        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    h5tools_str_reset(&buffer);
-                    if(szip_options_mask & H5_SZIP_EC_OPTION_MASK)
-                        h5tools_str_append(&buffer, "CODING %s", "ENTROPY");
-                    else if(szip_options_mask & H5_SZIP_NN_OPTION_MASK)
-                        h5tools_str_append(&buffer, "CODING %s", "NEAREST NEIGHBOUR");
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        h5tools_str_reset(&buffer);
+                        if(szip_options_mask & H5_SZIP_CHIP_OPTION_MASK)
+                            h5tools_str_append(&buffer, "MODE %s", "HARDWARE");
+                        else if(szip_options_mask & H5_SZIP_ALLOW_K13_OPTION_MASK)
+                            h5tools_str_append(&buffer, "MODE %s", "K13");
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                        ctx->need_prefix = TRUE;
+                        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    h5tools_str_reset(&buffer);
-                    if(szip_options_mask & H5_SZIP_LSB_OPTION_MASK)
-                        h5tools_str_append(&buffer, "BYTE_ORDER %s", "LSB");
-                    else if(szip_options_mask & H5_SZIP_MSB_OPTION_MASK)
-                        h5tools_str_append(&buffer, "BYTE_ORDER %s", "MSB");
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        h5tools_str_reset(&buffer);
+                        if(szip_options_mask & H5_SZIP_EC_OPTION_MASK)
+                            h5tools_str_append(&buffer, "CODING %s", "ENTROPY");
+                        else if(szip_options_mask & H5_SZIP_NN_OPTION_MASK)
+                            h5tools_str_append(&buffer, "CODING %s", "NEAREST NEIGHBOUR");
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-                    if(szip_options_mask & H5_SZIP_RAW_OPTION_MASK) {
                         ctx->need_prefix = TRUE;
                         h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
                         h5tools_str_reset(&buffer);
-                        h5tools_str_append(&buffer, "HEADER %s", "RAW");
+                        if(szip_options_mask & H5_SZIP_LSB_OPTION_MASK)
+                            h5tools_str_append(&buffer, "BYTE_ORDER %s", "LSB");
+                        else if(szip_options_mask & H5_SZIP_MSB_OPTION_MASK)
+                            h5tools_str_append(&buffer, "BYTE_ORDER %s", "MSB");
                         h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    }
 
-                    ctx->indent_level--;
+                        if(szip_options_mask & H5_SZIP_RAW_OPTION_MASK) {
+                            ctx->need_prefix = TRUE;
+                            h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                            h5tools_str_reset(&buffer);
+                            h5tools_str_append(&buffer, "HEADER %s", "RAW");
+                            h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        }
 
-                    h5tools_str_reset(&buffer);
-                    h5tools_str_append(&buffer, "%s", END);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                case H5Z_FILTER_NBIT:
-                    h5tools_str_append(&buffer, "%s", NBIT);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                case H5Z_FILTER_SCALEOFFSET:
-                    h5tools_str_append(&buffer, "%s %s %s %d %s", SCALEOFFSET, BEGIN, SCALEOFFSET_MINBIT, cd_values[0], END);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-                default:
-                    h5tools_str_append(&buffer, "%s %s", "USER_DEFINED_FILTER", BEGIN);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        ctx->indent_level--;
 
-                    ctx->indent_level++;
+                        ctx->need_prefix = TRUE;
+                        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+                        h5tools_str_reset(&buffer);
+                        h5tools_str_append(&buffer, "%s", END);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    case H5Z_FILTER_NBIT:
+                        h5tools_str_append(&buffer, "%s", NBIT);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    case H5Z_FILTER_SCALEOFFSET:
+                        h5tools_str_append(&buffer, "%s %s %s %d %s", SCALEOFFSET, BEGIN, SCALEOFFSET_MINBIT, cd_values[0], END);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        break;
+                    default:
+                        h5tools_str_append(&buffer, "%s %s", "USER_DEFINED_FILTER", BEGIN);
+                        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-                    h5tools_str_reset(&buffer);
-                    h5tools_str_append(&buffer, "FILTER_ID %d", filtn);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        ctx->indent_level++;
 
-                    if(f_name[0] != '\0') {
                         ctx->need_prefix = TRUE;
                         h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
                         h5tools_str_reset(&buffer);
-                        h5tools_str_append(&buffer, "COMMENT %s", f_name);
+                        h5tools_str_append(&buffer, "FILTER_ID %d", filtn);
                         h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    }
-                    if (cd_nelmts) {
+
+                        if(f_name[0] != '\0') {
+                            ctx->need_prefix = TRUE;
+                            h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+
+                            h5tools_str_reset(&buffer);
+                            h5tools_str_append(&buffer, "COMMENT %s", f_name);
+                            h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        }
+                        if (cd_nelmts) {
+                            ctx->need_prefix = TRUE;
+                            h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+
+                            h5tools_str_reset(&buffer);
+                            h5tools_str_append(&buffer, "%s %s ","PARAMS", BEGIN);
+                            for (j=0; j<cd_nelmts; j++)
+                                h5tools_str_append(&buffer, "%d ", cd_values[j]);
+                            h5tools_str_append(&buffer, "%s", END);
+                            h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+                        }
+                        ctx->indent_level--;
+
                         ctx->need_prefix = TRUE;
                         h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
                         h5tools_str_reset(&buffer);
-                        h5tools_str_append(&buffer, "%s %s ","PARAMS", BEGIN);
-                        for (j=0; j<cd_nelmts; j++)
-                            h5tools_str_append(&buffer, "%d ", cd_values[j]);
-                        h5tools_str_append(&buffer, "%s", END);
+                        h5tools_str_append(&buffer, "%s",END);
                         h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    }
-                    ctx->indent_level--;
+                        break;
+                }/*switch*/
+            } /*i*/
+        }/*nfilters*/
+        else {
 
-                    ctx->need_prefix = TRUE;
-                    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+            ctx->need_prefix = TRUE;
+            h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-                    h5tools_str_reset(&buffer);
-                    h5tools_str_append(&buffer, "%s",END);
-                    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-                    break;
-            }/*switch*/
-        } /*i*/
-    }/*nfilters*/
-    else {
+            h5tools_str_reset(&buffer);
+            h5tools_str_append(&buffer, "NONE");
+            h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+        }
+        ctx->indent_level--;
 
         ctx->need_prefix = TRUE;
         h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
         h5tools_str_reset(&buffer);
-        h5tools_str_append(&buffer, "NONE");
+        h5tools_str_append(&buffer, "%s",END);
         h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
-    }
-    ctx->indent_level--;
-
-    ctx->need_prefix = TRUE;
-    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
-
-    h5tools_str_reset(&buffer);
-    h5tools_str_append(&buffer, "%s",END);
-    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+    } /* end if (H5D_VIRTUAL != stl) */
 
     /*-------------------------------------------------------------------------
     * FILLVALUE
@@ -3525,12 +3522,22 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
     h5tools_str_reset(&buffer);
     h5tools_str_append(&buffer, "%s ", "VALUE ");
     H5Pfill_value_defined(dcpl_id, &fvstatus);
-    if(fvstatus == H5D_FILL_VALUE_UNDEFINED)
-        h5tools_str_append(&buffer, "%s", "H5D_FILL_VALUE_UNDEFINED");
-    else {
-        ctx->indent_level--;
-        h5tools_print_fill_value(&buffer, info, ctx, dcpl_id, type_id, obj_id);
-        ctx->indent_level++;
+    switch (fvstatus) {
+        case H5D_FILL_VALUE_UNDEFINED:
+            h5tools_str_append(&buffer, "%s", "H5D_FILL_VALUE_UNDEFINED");
+            break;
+        case H5D_FILL_VALUE_DEFAULT:
+            h5tools_str_append(&buffer, "%s", "H5D_FILL_VALUE_DEFAULT");
+            break;
+        case H5D_FILL_VALUE_USER_DEFINED:
+            ctx->indent_level--;
+            h5tools_print_fill_value(&buffer, info, ctx, dcpl_id, type_id, obj_id);
+            ctx->indent_level++;
+            break;
+        case H5D_FILL_VALUE_ERROR:
+        default:
+            HDassert(0);
+            break;
     }
     h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
     ctx->indent_level--;
@@ -3546,46 +3553,48 @@ h5tools_dump_dcpl(FILE *stream, const h5tool_format_t *info,
     * ALLOCATION_TIME
     *-------------------------------------------------------------------------
     */
-    ctx->need_prefix = TRUE;
-    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+    if (H5D_VIRTUAL != stl) {
+        ctx->need_prefix = TRUE;
+        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-    h5tools_str_reset(&buffer);
-    h5tools_str_append(&buffer, "ALLOCATION_TIME %s", BEGIN);
-    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+        h5tools_str_reset(&buffer);
+        h5tools_str_append(&buffer, "ALLOCATION_TIME %s", BEGIN);
+        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-    ctx->indent_level++;
+        ctx->indent_level++;
 
-    ctx->need_prefix = TRUE;
-    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+        ctx->need_prefix = TRUE;
+        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-    h5tools_str_reset(&buffer);
-    H5Pget_alloc_time(dcpl_id, &at);
-    switch(at) {
-        case H5D_ALLOC_TIME_EARLY:
-            h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_EARLY");
-            break;
-        case H5D_ALLOC_TIME_INCR:
-            h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_INCR");
-            break;
-        case H5D_ALLOC_TIME_LATE:
-            h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_LATE");
-            break;
-        case H5D_ALLOC_TIME_ERROR:
-        case H5D_ALLOC_TIME_DEFAULT:
-        default:
-            HDassert(0);
-            break;
-    }
-    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+        h5tools_str_reset(&buffer);
+        H5Pget_alloc_time(dcpl_id, &at);
+        switch(at) {
+            case H5D_ALLOC_TIME_EARLY:
+                h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_EARLY");
+                break;
+            case H5D_ALLOC_TIME_INCR:
+                h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_INCR");
+                break;
+            case H5D_ALLOC_TIME_LATE:
+                h5tools_str_append(&buffer, "%s", "H5D_ALLOC_TIME_LATE");
+                break;
+            case H5D_ALLOC_TIME_ERROR:
+            case H5D_ALLOC_TIME_DEFAULT:
+            default:
+                HDassert(0);
+                break;
+        }
+        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
 
-    ctx->indent_level--;
+        ctx->indent_level--;
 
-    ctx->need_prefix = TRUE;
-    h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
+        ctx->need_prefix = TRUE;
+        h5tools_simple_prefix(stream, info, ctx, curr_pos, 0);
 
-    h5tools_str_reset(&buffer);
-    h5tools_str_append(&buffer, "%s", END);
-    h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+        h5tools_str_reset(&buffer);
+        h5tools_str_append(&buffer, "%s", END);
+        h5tools_render_element(stream, info, ctx, &buffer, &curr_pos, (size_t)ncols, (hsize_t)0, (hsize_t)0);
+    } /* end if (H5D_VIRTUAL != stl) */
 
     h5tools_str_close(&buffer);
 }
diff --git a/tools/lib/h5tools_utils.c b/tools/lib/h5tools_utils.c
index a09a003..b87abf6 100644
--- a/tools/lib/h5tools_utils.c
+++ b/tools/lib/h5tools_utils.c
@@ -177,7 +177,7 @@ warn_msg(const char *fmt, ...)
 /*-------------------------------------------------------------------------
  * Function:  help_ref_msg
  *
- * Purpose: Print a message to refer help page 
+ * Purpose: Print a message to refer help page
  *
  * Return:  Nothing
  *
@@ -224,7 +224,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
         /* check for more flag-like tokens */
         if (opt_ind >= argc || argv[opt_ind][0] != '-' || argv[opt_ind][1] == '\0') {
             return EOF;
-        } 
+        }
         else if (HDstrcmp(argv[opt_ind], "--") == 0) {
             opt_ind++;
             return EOF;
@@ -248,10 +248,10 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
                         opt_arg = &arg[len + 1];
                     }
                     else if (l_opts[i].has_arg != optional_arg) {
-                        if (opt_ind < (argc - 1)) 
+                        if (opt_ind < (argc - 1))
                             if (argv[opt_ind + 1][0] != '-')
                                 opt_arg = argv[++opt_ind];
-                    } 
+                    }
                     else if (l_opts[i].has_arg == require_arg) {
                         if (opt_err)
                             HDfprintf(rawerrorstream,
@@ -262,7 +262,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
                     }
                     else
                         opt_arg = NULL;
-                } 
+                }
                 else {
                     if (arg[len] == '=') {
                         if (opt_err)
@@ -288,7 +288,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
 
         opt_ind++;
         sp = 1;
-    } 
+    }
     else {
         register char *cp;    /* pointer into current token */
 
@@ -313,7 +313,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
             if (argv[opt_ind][sp + 1] != '\0') {
                 /* flag value is rest of current token */
                 opt_arg = &argv[opt_ind++][sp + 1];
-            } 
+            }
             else if (++opt_ind >= argc) {
                 if (opt_err)
                     HDfprintf(rawerrorstream,
@@ -321,7 +321,7 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
                             argv[0], opt_opt);
 
                 opt_opt = '?';
-            } 
+            }
             else {
                 /* flag value is next token */
                 opt_arg = argv[opt_ind++];
@@ -334,8 +334,13 @@ get_option(int argc, const char **argv, const char *opts, const struct long_opti
             /* check the next argument */
             opt_ind++;
             /* we do have an extra argument, check if not last */
-            if ( argv[opt_ind][0] != '-' && (opt_ind+1) < argc ) {
-                opt_arg = argv[opt_ind++];
+            if ( (opt_ind+1) < argc ) {
+                if ( argv[opt_ind][0] != '-' ) {
+                    opt_arg = argv[opt_ind++];
+                }
+                else {
+                    opt_arg = NULL;
+                }
             }
             else {
                 opt_arg = NULL;
@@ -376,7 +381,7 @@ indentation(int x)
     if (x < h5tools_nCols) {
         while (x-- > 0)
             PRINTVALSTREAM(rawoutstream, " ");
-    } 
+    }
     else {
         HDfprintf(rawerrorstream, "error: the indentation exceeds the number of cols.\n");
         HDexit(1);
@@ -721,7 +726,7 @@ tmpfile(void)
 /*-------------------------------------------------------------------------
  * Function: H5tools_get_symlink_info
  *
- * Purpose: Get symbolic link (soft, external) info and its target object type 
+ * Purpose: Get symbolic link (soft, external) info and its target object type
             (dataset, group, named datatype) and path, if exist
  *
  * Patameters:
@@ -729,9 +734,9 @@ tmpfile(void)
  *  - [IN]  linkpath : link path
  *  - [OUT] link_info: returning target object info (h5tool_link_info_t)
  *
- * Return: 
- *   2 : given pathname is object 
- *   1 : Succed to get link info.  
+ * Return:
+ *   2 : given pathname is object
+ *   1 : Succed to get link info.
  *   0 : Detected as a dangling link
  *  -1 : H5 API failed.
  *
@@ -795,7 +800,7 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
     } /* end if */
 
     /*-----------------------------------------------------
-     * if link type is external link use different lapl to 
+     * if link type is external link use different lapl to
      * follow object in other file
      */
     if(link_info->linfo.type == H5L_TYPE_EXTERNAL) {
@@ -816,7 +821,7 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
          */
          /* check if target object exist */
         l_ret = H5Oexists_by_name(file_id, linkpath, lapl);
-        
+
         /* detect dangling link */
         if(l_ret == FALSE) {
             ret = 0;
@@ -824,7 +829,7 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
         } /* end if */
         /* function failed */
         else if(l_ret < 0)
-            goto out;    
+            goto out;
 
         /* get target object info */
         if(H5Oget_info_by_name(file_id, linkpath, &trg_oinfo, lapl) < 0) {
@@ -889,8 +894,8 @@ int h5tools_getstatus(void)
 }
 
 /*-----------------------------------------------------------
- * PURPOSE : 
- * if environment variable H5TOOLS_BUFSIZE is set, 
+ * PURPOSE :
+ * if environment variable H5TOOLS_BUFSIZE is set,
  * update H5TOOLS_BUFSIZE and H5TOOLS_MALLOCSIZE from the env
  * This can be called from each tools main() as part of initial act.
  * Note: this is more of debugging purpose for now.
@@ -907,11 +912,11 @@ int h5tools_getenv_update_hyperslab_bufsize(void)
         hyperslab_bufsize_mb = HDstrtol(env_str, (char**)NULL, 10);
         if (errno != 0 || hyperslab_bufsize_mb <= 0)
         {
-            
-            /* TODO: later when pubilshed  
+
+            /* TODO: later when pubilshed
             HDfprintf(rawerrorstream,"Error: Invalid environment variable \"H5TOOLS_BUFSIZE\" : %s\n", env_str);
             */
-            
+
             goto error;
         }
 
diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in
index bd16d06..41c3928 100644
--- a/tools/misc/Makefile.in
+++ b/tools/misc/Makefile.in
@@ -115,10 +115,23 @@ TESTS = $(am__EXEEXT_1) $(TEST_SCRIPT)
 subdir = tools/misc
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -512,18 +525,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -536,7 +553,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -574,10 +590,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -588,6 +608,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -598,8 +619,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -614,6 +647,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -621,6 +656,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -644,6 +680,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -659,7 +696,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -668,8 +707,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -748,6 +789,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
index aac14db..4df501a 100644
--- a/tools/misc/h5debug.c
+++ b/tools/misc/h5debug.c
@@ -129,6 +129,10 @@ get_H5B2_class(const uint8_t *sig)
             cls = H5D_BT2_FILT;
             break;
 
+        case H5B2_TEST2_ID:
+            cls = H5B2_TEST2;
+            break;
+
         case H5B2_NUM_BTREE_ID:
         default:
             HDfprintf(stderr, "Unknown v2 B-tree subtype %u\n", (unsigned)(subtype));
@@ -326,13 +330,13 @@ main(int argc, char *argv[])
         /*
          * Debug a local heap.
          */
-        status = H5HL_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+        status = H5HL_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else if(!HDmemcmp (sig, H5HG_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
 	/*
 	 * Debug a global heap collection.
 	 */
-	status = H5HG_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+	status = H5HG_debug (f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else if(!HDmemcmp(sig, H5G_NODE_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -346,7 +350,7 @@ main(int argc, char *argv[])
             HDfprintf(stderr, "\th5debug <filename> <Symbol table node address> <address of local heap>\n\n");
         } /* end if */
 
-        status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
+        status = H5G_node_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, extra);
 
     } else if(!HDmemcmp(sig, H5B_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -368,7 +372,7 @@ main(int argc, char *argv[])
                     HDexit(4);
                 } /* end if */
 
-                status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
+                status = H5G_node_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, extra);
                 break;
 
             case H5B_CHUNK_ID:
@@ -406,7 +410,7 @@ main(int argc, char *argv[])
                 /* Set the last dimension (the element size) to zero */
                 dim[ndims] = 0;
 
-                status = H5D_btree_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims, dim);
+                status = H5D_btree_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, ndims, dim);
                 break;
 
             case H5B_NUM_BTREE_ID:
@@ -422,14 +426,14 @@ main(int argc, char *argv[])
         const H5B2_class_t *cls = get_H5B2_class(sig);
         HDassert(cls);
 
-	if((cls == H5D_BT2 || cls == H5D_BT2_FILT) && extra == 0) {
-            fprintf(stderr, "ERROR: Need v2 B-tree header address and object header address containing the layout message in order to dump header\n");
-            fprintf(stderr, "v2 B-tree hdr usage:\n");
-            fprintf(stderr, "\th5debug <filename> <v2 B-tree header address> <object header address>\n");
+	    if((cls == H5D_BT2 || cls == H5D_BT2_FILT) && extra == 0) {
+            HDfprintf(stderr, "ERROR: Need v2 B-tree header address and object header address containing the layout message in order to dump header\n");
+            HDfprintf(stderr, "v2 B-tree hdr usage:\n");
+            HDfprintf(stderr, "\th5debug <filename> <v2 B-tree header address> <object header address>\n");
             HDexit(4);
-	}
+	    } /* end if */
 
-        status = H5B2__hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, (haddr_t)extra);
+        status = H5B2__hdr_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, (haddr_t)extra);
 
     } else if(!HDmemcmp(sig, H5B2_INT_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -456,7 +460,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5B2__int_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (unsigned)extra3, (haddr_t)extra4);
+        status = H5B2__int_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (unsigned)extra3, (haddr_t)extra4);
 
     } else if(!HDmemcmp(sig, H5B2_LEAF_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -481,13 +485,13 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5B2__leaf_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (haddr_t)extra3);
+        status = H5B2__leaf_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, (haddr_t)extra3);
 
     } else if(!HDmemcmp(sig, H5HF_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
          * Debug a fractal heap header.
          */
-        status = H5HF_hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+        status = H5HF_hdr_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else if(!HDmemcmp(sig, H5HF_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -502,7 +506,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5HF_dblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra, (size_t)extra2);
+        status = H5HF_dblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, extra, (size_t)extra2);
 
     } else if(!HDmemcmp(sig, H5HF_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -517,14 +521,14 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5HF_iblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra, (unsigned)extra2);
+        status = H5HF_iblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, extra, (unsigned)extra2);
 
     } else if(!HDmemcmp(sig, H5FS_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
          * Debug a free space header.
          */
 
-        status = H5FS_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+        status = H5FS_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else if(!HDmemcmp(sig, H5FS_SINFO_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -539,14 +543,14 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5FS_sects_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra, extra2);
+        status = H5FS_sects_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, extra, extra2);
 
     } else if(!HDmemcmp(sig, H5SM_TABLE_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
          * Debug shared message master table.
          */
 
-        status = H5SM_table_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, (unsigned) UFAIL, (unsigned) UFAIL);
+        status = H5SM_table_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, (unsigned) UFAIL, (unsigned) UFAIL);
 
     } else if(!HDmemcmp(sig, H5SM_LIST_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -561,7 +565,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5SM_list_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, (haddr_t)extra);
+        status = H5SM_list_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, (haddr_t)extra);
 
     } else if(!HDmemcmp(sig, H5EA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -578,7 +582,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5EA__hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra);
+        status = H5EA__hdr_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra);
 
     } else if(!HDmemcmp(sig, H5EA_IBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -595,7 +599,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5EA__iblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, extra2);
+        status = H5EA__iblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, extra2);
 
     } else if(!HDmemcmp(sig, H5EA_SBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -612,7 +616,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5EA__sblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, extra3);
+        status = H5EA__sblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, (unsigned)extra2, extra3);
 
     } else if(!HDmemcmp(sig, H5EA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -629,7 +633,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5EA__dblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, (size_t)extra2, extra3);
+        status = H5EA__dblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, (size_t)extra2, extra3);
 
     } else if(!HDmemcmp(sig, H5FA_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -646,7 +650,7 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5FA__hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra);
+        status = H5FA__hdr_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra);
 
     } else if(!HDmemcmp(sig, H5FA_DBLOCK_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
@@ -663,21 +667,21 @@ main(int argc, char *argv[])
             HDexit(4);
         } /* end if */
 
-        status = H5FA__dblock_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, cls, extra, extra2);
+        status = H5FA__dblock_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL, cls, extra, extra2);
 
     } else if(!HDmemcmp(sig, H5O_HDR_MAGIC, (size_t)H5_SIZEOF_MAGIC)) {
         /*
          * Debug v2 object header (which have signatures).
          */
 
-        status = H5O_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+        status = H5O_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else if(sig[0] == H5O_VERSION_1) {
         /*
          * This could be a v1 object header.  Since they don't have a signature
          * it's a somewhat "ify" detection.
          */
-        status = H5O_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+        status = H5O_debug(f, H5AC_ind_read_dxpl_id, addr, stdout, 0, VCOL);
 
     } else {
         /*
diff --git a/tools/misc/vds/Makefile.in b/tools/misc/vds/Makefile.in
index e44f611..d093227 100644
--- a/tools/misc/vds/Makefile.in
+++ b/tools/misc/vds/Makefile.in
@@ -109,10 +109,23 @@ TESTS = $(am__EXEEXT_1)
 subdir = tools/misc/vds
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -433,18 +446,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -457,7 +474,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -495,10 +511,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -509,6 +529,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -519,8 +540,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -535,6 +568,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -542,6 +577,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -565,6 +601,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -580,7 +617,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -589,8 +628,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -669,6 +710,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/perform/Makefile.in b/tools/perform/Makefile.in
index 6e34cb7..baad0c3 100644
--- a/tools/perform/Makefile.in
+++ b/tools/perform/Makefile.in
@@ -117,10 +117,23 @@ TESTS = $(am__EXEEXT_3)
 subdir = tools/perform
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_cxx.m4 \
-	$(top_srcdir)/m4/aclocal_fc.m4 $(top_srcdir)/m4/libtool.m4 \
-	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-	$(top_srcdir)/configure.ac
+	$(top_srcdir)/m4/aclocal_fc.m4 \
+	$(top_srcdir)/m4/ax_check_class.m4 \
+	$(top_srcdir)/m4/ax_check_classpath.m4 \
+	$(top_srcdir)/m4/ax_check_java_home.m4 \
+	$(top_srcdir)/m4/ax_check_junit.m4 \
+	$(top_srcdir)/m4/ax_java_options.m4 \
+	$(top_srcdir)/m4/ax_jni_include_dir.m4 \
+	$(top_srcdir)/m4/ax_prog_jar.m4 \
+	$(top_srcdir)/m4/ax_prog_java.m4 \
+	$(top_srcdir)/m4/ax_prog_java_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javac.m4 \
+	$(top_srcdir)/m4/ax_prog_javac_works.m4 \
+	$(top_srcdir)/m4/ax_prog_javadoc.m4 \
+	$(top_srcdir)/m4/ax_try_compile_java.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
@@ -455,18 +468,22 @@ AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \
 AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@
+AM_JAVACFLAGS = @AM_JAVACFLAGS@
+AM_JAVAFLAGS = @AM_JAVAFLAGS@
+AM_JNIFLAGS = @AM_JNIFLAGS@
 AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@
 AR = @AR@
+ASSERTS = @ASSERTS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BUILD_MODE = @BUILD_MODE@
 BYTESEX = @BYTESEX@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CC_VERSION = @CC_VERSION@
 CFLAGS = @CFLAGS@
-CLEARFILEBUF = @CLEARFILEBUF@
 CODESTACK = @CODESTACK@
 CONFIG_DATE = @CONFIG_DATE@
 CONFIG_MODE = @CONFIG_MODE@
@@ -479,7 +496,6 @@ CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CXX_VERSION = @CXX_VERSION@
 CYGPATH_W = @CYGPATH_W@
-DEBUG_PKG = @DEBUG_PKG@
 DEFAULT_API_VERSION = @DEFAULT_API_VERSION@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -517,10 +533,14 @@ H5CONFIG_F_NUM_RKIND = @H5CONFIG_F_NUM_RKIND@
 H5CONFIG_F_RKIND = @H5CONFIG_F_RKIND@
 H5CONFIG_F_RKIND_SIZEOF = @H5CONFIG_F_RKIND_SIZEOF@
 H5_CFLAGS = @H5_CFLAGS@
+H5_CLASSPATH = @H5_CLASSPATH@
 H5_CPPFLAGS = @H5_CPPFLAGS@
 H5_CXXFLAGS = @H5_CXXFLAGS@
 H5_FCFLAGS = @H5_FCFLAGS@
 H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@
+H5_JAVACFLAGS = @H5_JAVACFLAGS@
+H5_JAVAFLAGS = @H5_JAVAFLAGS@
+H5_JNIFLAGS = @H5_JNIFLAGS@
 H5_LDFLAGS = @H5_LDFLAGS@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
@@ -531,6 +551,7 @@ HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_JAVA = @HDF_JAVA@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -541,8 +562,20 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTRUMENT = @INSTRUMENT@
 INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@
+INTERNAL_DEBUG_OUTPUT = @INTERNAL_DEBUG_OUTPUT@
+JAR = @JAR@
+JAVA = @JAVA@
+JAVAC = @JAVAC@
+JAVACFLAGS = @JAVACFLAGS@
+JAVADOC = @JAVADOC@
+JAVAFLAGS = @JAVAFLAGS@
+JAVAPREFIX = @JAVAPREFIX@
+JAVA_JUNIT = @JAVA_JUNIT@
+JAVA_PATH_NAME = @JAVA_PATH_NAME@
+JAVA_VERSION = @JAVA_VERSION@
+JNIFLAGS = @JNIFLAGS@
+JUNIT = @JUNIT@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
@@ -557,6 +590,8 @@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
+MEMORYALLOCSANITYCHECK = @MEMORYALLOCSANITYCHECK@
+METADATATRACEFILE = @METADATATRACEFILE@
 MKDIR_P = @MKDIR_P@
 MPE = @MPE@
 NM = @NM@
@@ -564,6 +599,7 @@ NMEDIT = @NMEDIT@
 OBJDUMP = @OBJDUMP@
 OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
 OBJEXT = @OBJEXT@
+OPTIMIZATION = @OPTIMIZATION@
 OTOOL = @OTOOL@
 OTOOL64 = @OTOOL64@
 PACKAGE = @PACKAGE@
@@ -587,6 +623,7 @@ PAC_FORTRAN_NATIVE_REAL_KIND = @PAC_FORTRAN_NATIVE_REAL_KIND@
 PAC_FORTRAN_NATIVE_REAL_SIZEOF = @PAC_FORTRAN_NATIVE_REAL_SIZEOF@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PROFILING = @PROFILING@
 RANLIB = @RANLIB@
 ROOT = @ROOT@
 RUNPARALLEL = @RUNPARALLEL@
@@ -602,7 +639,9 @@ STATIC_EXEC = @STATIC_EXEC@
 STATIC_SHARED = @STATIC_SHARED@
 STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@
 STRIP = @STRIP@
+SYMBOLS = @SYMBOLS@
 TESTPARALLEL = @TESTPARALLEL@
+TESTS_JUNIT = @TESTS_JUNIT@
 THREADSAFE = @THREADSAFE@
 TIME = @TIME@
 TR = @TR@
@@ -611,8 +650,10 @@ UNAME_INFO = @UNAME_INFO@
 USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@
 USE_FILTER_SZIP = @USE_FILTER_SZIP@
 USINGMEMCHECKER = @USINGMEMCHECKER@
+UUDECODE = @UUDECODE@
 VERSION = @VERSION@
 WORDS_BIGENDIAN = @WORDS_BIGENDIAN@
+_ACJNI_JAVAC = @_ACJNI_JAVAC@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -691,6 +732,7 @@ LIBH5TEST = $(top_builddir)/test/libh5test.la
 LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la
 LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la
 LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la
+LIBH5JNI = $(top_builddir)/java/src/jni/libhdf5_java.la
 LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la
 LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la
 LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la
diff --git a/tools/testfiles/h5dump-help.txt b/tools/testfiles/h5dump-help.txt
index 444dd97..fe22a1b 100644
--- a/tools/testfiles/h5dump-help.txt
+++ b/tools/testfiles/h5dump-help.txt
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tnofilename-with-packed-bits.ddl b/tools/testfiles/pbits/tnofilename-with-packed-bits.ddl
index 64a2880..767cbbf 100644
--- a/tools/testfiles/pbits/tnofilename-with-packed-bits.ddl
+++ b/tools/testfiles/pbits/tnofilename-with-packed-bits.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsIncomplete.ddl b/tools/testfiles/pbits/tpbitsIncomplete.ddl
index cdb1f91..d791b41 100644
--- a/tools/testfiles/pbits/tpbitsIncomplete.ddl
+++ b/tools/testfiles/pbits/tpbitsIncomplete.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsLengthExceeded.ddl b/tools/testfiles/pbits/tpbitsLengthExceeded.ddl
index 6d2492a..5235aa7 100644
--- a/tools/testfiles/pbits/tpbitsLengthExceeded.ddl
+++ b/tools/testfiles/pbits/tpbitsLengthExceeded.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsLengthPositive.ddl b/tools/testfiles/pbits/tpbitsLengthPositive.ddl
index 4f56619..697bff8 100644
--- a/tools/testfiles/pbits/tpbitsLengthPositive.ddl
+++ b/tools/testfiles/pbits/tpbitsLengthPositive.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsMaxExceeded.ddl b/tools/testfiles/pbits/tpbitsMaxExceeded.ddl
index 3432433..900c0b5 100644
--- a/tools/testfiles/pbits/tpbitsMaxExceeded.ddl
+++ b/tools/testfiles/pbits/tpbitsMaxExceeded.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsOffsetExceeded.ddl b/tools/testfiles/pbits/tpbitsOffsetExceeded.ddl
index e51a09e..65123d0 100644
--- a/tools/testfiles/pbits/tpbitsOffsetExceeded.ddl
+++ b/tools/testfiles/pbits/tpbitsOffsetExceeded.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/pbits/tpbitsOffsetNegative.ddl b/tools/testfiles/pbits/tpbitsOffsetNegative.ddl
index ba6e46d..d352e34 100644
--- a/tools/testfiles/pbits/tpbitsOffsetNegative.ddl
+++ b/tools/testfiles/pbits/tpbitsOffsetNegative.ddl
@@ -11,7 +11,7 @@ usage: h5dump [OPTIONS] files
      -o F, --output=F     Output raw data into file F
      -b B, --binary=B     Binary file output, of form B
      -O F, --ddl=F        Output ddl text into file F
-                          Do not use filename F to suppress ddl display
+                          Use blank(empty) filename F to suppress ddl display
 --------------- Object Options ---------------
      -a P, --attribute=P  Print the specified attribute
                           If an attribute name contains a slash (/), escape the
@@ -25,6 +25,8 @@ usage: h5dump [OPTIONS] files
                           P can be the absolute path or just a relative path.
      -A,   --onlyattr     Print the header and value of attributes
                           Optional value 0 suppresses printing attributes.
+     --vds-view-first-missing Set the VDS bounds to first missing mapped elements.
+     --vds-gap-size=N     Set the missing file gap size, N=non-negative integers
 --------------- Object Property Options ---------------
      -i,   --object-ids   Print the object ids
      -p,   --properties   Print dataset filters, storage layout and fill value
diff --git a/tools/testfiles/tallfilters.ddl b/tools/testfiles/tallfilters.ddl
index ac6762a..ff2454c 100644
--- a/tools/testfiles/tallfilters.ddl
+++ b/tools/testfiles/tallfilters.ddl
@@ -21,7 +21,7 @@ DATASET "all" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tchunked.ddl b/tools/testfiles/tchunked.ddl
index b68b233..bf620fe 100644
--- a/tools/testfiles/tchunked.ddl
+++ b/tools/testfiles/tchunked.ddl
@@ -12,7 +12,7 @@ COMMENT "This is a dataset with chunked storage"
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tcompact.ddl b/tools/testfiles/tcompact.ddl
index 918e2eb..977f959 100644
--- a/tools/testfiles/tcompact.ddl
+++ b/tools/testfiles/tcompact.ddl
@@ -12,7 +12,7 @@ COMMENT "This is a dataset with compact storage"
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_EARLY
diff --git a/tools/testfiles/tcontiguos.ddl b/tools/testfiles/tcontiguos.ddl
index 8e0158e..3f045e5 100644
--- a/tools/testfiles/tcontiguos.ddl
+++ b/tools/testfiles/tcontiguos.ddl
@@ -13,7 +13,7 @@ COMMENT "This is a dataset with contiguous storage"
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_LATE
diff --git a/tools/testfiles/tdeflate.ddl b/tools/testfiles/tdeflate.ddl
index 5603911..9b92d0e 100644
--- a/tools/testfiles/tdeflate.ddl
+++ b/tools/testfiles/tdeflate.ddl
@@ -11,7 +11,7 @@ DATASET "deflate" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/texternal.ddl b/tools/testfiles/texternal.ddl
index 279831a..59cd22c 100644
--- a/tools/testfiles/texternal.ddl
+++ b/tools/testfiles/texternal.ddl
@@ -14,7 +14,7 @@ DATASET "external" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_LATE
diff --git a/tools/testfiles/tfill.ddl b/tools/testfiles/tfill.ddl
index 45497fd..556f4f2 100644
--- a/tools/testfiles/tfill.ddl
+++ b/tools/testfiles/tfill.ddl
@@ -13,7 +13,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  [ 0, 0, 0 ]
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_LATE
@@ -136,7 +136,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_ALLOC
-         VALUE  ()
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_LATE
@@ -158,7 +158,7 @@ GROUP "/" {
       }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
-         VALUE  0
+         VALUE  H5D_FILL_VALUE_DEFAULT
       }
       ALLOCATION_TIME {
          H5D_ALLOC_TIME_LATE
diff --git a/tools/testfiles/tfletcher32.ddl b/tools/testfiles/tfletcher32.ddl
index c341ded..01460e2 100644
--- a/tools/testfiles/tfletcher32.ddl
+++ b/tools/testfiles/tfletcher32.ddl
@@ -11,7 +11,7 @@ DATASET "fletcher32" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tints4dims.ddl b/tools/testfiles/tints4dims.ddl
new file mode 100644
index 0000000..ba5c852
--- /dev/null
+++ b/tools/testfiles/tints4dims.ddl
@@ -0,0 +1,202 @@
+HDF5 "tints4dims.h5" {
+GROUP "/" {
+   DATASET "FourDimInts" {
+      DATATYPE  H5T_STD_U32LE
+      DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+      DATA {
+      (0,0,0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+      (0,0,1,0): 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+      (0,0,2,0): 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+      (0,0,3,0): 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+      (0,0,4,0): 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+      (0,0,5,0): 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+      (0,0,6,0): 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+      (0,0,7,0): 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+      (0,1,0,0): 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+      (0,1,1,0): 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+      (0,1,2,0): 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+      (0,1,3,0): 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+      (0,1,4,0): 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+      (0,1,5,0): 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+      (0,1,6,0): 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+      (0,1,7,0): 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+      (0,2,0,0): 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+      (0,2,1,0): 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+      (0,2,2,0): 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+      (0,2,3,0): 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+      (0,2,4,0): 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+      (0,2,5,0): 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+      (0,2,6,0): 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+      (0,2,7,0): 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+      (0,3,0,0): 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+      (0,3,1,0): 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+      (0,3,2,0): 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+      (0,3,3,0): 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+      (0,3,4,0): 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+      (0,3,5,0): 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+      (0,3,6,0): 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+      (0,3,7,0): 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+      (0,4,0,0): 320, 321, 322, 323, 324, 325, 326, 327, 328, 329,
+      (0,4,1,0): 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+      (0,4,2,0): 340, 341, 342, 343, 344, 345, 346, 347, 348, 349,
+      (0,4,3,0): 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+      (0,4,4,0): 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
+      (0,4,5,0): 370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
+      (0,4,6,0): 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
+      (0,4,7,0): 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
+      (0,5,0,0): 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
+      (0,5,1,0): 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
+      (0,5,2,0): 420, 421, 422, 423, 424, 425, 426, 427, 428, 429,
+      (0,5,3,0): 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
+      (0,5,4,0): 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
+      (0,5,5,0): 450, 451, 452, 453, 454, 455, 456, 457, 458, 459,
+      (0,5,6,0): 460, 461, 462, 463, 464, 465, 466, 467, 468, 469,
+      (0,5,7,0): 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
+      (1,0,0,0): 480, 481, 482, 483, 484, 485, 486, 487, 488, 489,
+      (1,0,1,0): 490, 491, 492, 493, 494, 495, 496, 497, 498, 499,
+      (1,0,2,0): 500, 501, 502, 503, 504, 505, 506, 507, 508, 509,
+      (1,0,3,0): 510, 511, 512, 513, 514, 515, 516, 517, 518, 519,
+      (1,0,4,0): 520, 521, 522, 523, 524, 525, 526, 527, 528, 529,
+      (1,0,5,0): 530, 531, 532, 533, 534, 535, 536, 537, 538, 539,
+      (1,0,6,0): 540, 541, 542, 543, 544, 545, 546, 547, 548, 549,
+      (1,0,7,0): 550, 551, 552, 553, 554, 555, 556, 557, 558, 559,
+      (1,1,0,0): 560, 561, 562, 563, 564, 565, 566, 567, 568, 569,
+      (1,1,1,0): 570, 571, 572, 573, 574, 575, 576, 577, 578, 579,
+      (1,1,2,0): 580, 581, 582, 583, 584, 585, 586, 587, 588, 589,
+      (1,1,3,0): 590, 591, 592, 593, 594, 595, 596, 597, 598, 599,
+      (1,1,4,0): 600, 601, 602, 603, 604, 605, 606, 607, 608, 609,
+      (1,1,5,0): 610, 611, 612, 613, 614, 615, 616, 617, 618, 619,
+      (1,1,6,0): 620, 621, 622, 623, 624, 625, 626, 627, 628, 629,
+      (1,1,7,0): 630, 631, 632, 633, 634, 635, 636, 637, 638, 639,
+      (1,2,0,0): 640, 641, 642, 643, 644, 645, 646, 647, 648, 649,
+      (1,2,1,0): 650, 651, 652, 653, 654, 655, 656, 657, 658, 659,
+      (1,2,2,0): 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
+      (1,2,3,0): 670, 671, 672, 673, 674, 675, 676, 677, 678, 679,
+      (1,2,4,0): 680, 681, 682, 683, 684, 685, 686, 687, 688, 689,
+      (1,2,5,0): 690, 691, 692, 693, 694, 695, 696, 697, 698, 699,
+      (1,2,6,0): 700, 701, 702, 703, 704, 705, 706, 707, 708, 709,
+      (1,2,7,0): 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
+      (1,3,0,0): 720, 721, 722, 723, 724, 725, 726, 727, 728, 729,
+      (1,3,1,0): 730, 731, 732, 733, 734, 735, 736, 737, 738, 739,
+      (1,3,2,0): 740, 741, 742, 743, 744, 745, 746, 747, 748, 749,
+      (1,3,3,0): 750, 751, 752, 753, 754, 755, 756, 757, 758, 759,
+      (1,3,4,0): 760, 761, 762, 763, 764, 765, 766, 767, 768, 769,
+      (1,3,5,0): 770, 771, 772, 773, 774, 775, 776, 777, 778, 779,
+      (1,3,6,0): 780, 781, 782, 783, 784, 785, 786, 787, 788, 789,
+      (1,3,7,0): 790, 791, 792, 793, 794, 795, 796, 797, 798, 799,
+      (1,4,0,0): 800, 801, 802, 803, 804, 805, 806, 807, 808, 809,
+      (1,4,1,0): 810, 811, 812, 813, 814, 815, 816, 817, 818, 819,
+      (1,4,2,0): 820, 821, 822, 823, 824, 825, 826, 827, 828, 829,
+      (1,4,3,0): 830, 831, 832, 833, 834, 835, 836, 837, 838, 839,
+      (1,4,4,0): 840, 841, 842, 843, 844, 845, 846, 847, 848, 849,
+      (1,4,5,0): 850, 851, 852, 853, 854, 855, 856, 857, 858, 859,
+      (1,4,6,0): 860, 861, 862, 863, 864, 865, 866, 867, 868, 869,
+      (1,4,7,0): 870, 871, 872, 873, 874, 875, 876, 877, 878, 879,
+      (1,5,0,0): 880, 881, 882, 883, 884, 885, 886, 887, 888, 889,
+      (1,5,1,0): 890, 891, 892, 893, 894, 895, 896, 897, 898, 899,
+      (1,5,2,0): 900, 901, 902, 903, 904, 905, 906, 907, 908, 909,
+      (1,5,3,0): 910, 911, 912, 913, 914, 915, 916, 917, 918, 919,
+      (1,5,4,0): 920, 921, 922, 923, 924, 925, 926, 927, 928, 929,
+      (1,5,5,0): 930, 931, 932, 933, 934, 935, 936, 937, 938, 939,
+      (1,5,6,0): 940, 941, 942, 943, 944, 945, 946, 947, 948, 949,
+      (1,5,7,0): 950, 951, 952, 953, 954, 955, 956, 957, 958, 959,
+      (2,0,0,0): 960, 961, 962, 963, 964, 965, 966, 967, 968, 969,
+      (2,0,1,0): 970, 971, 972, 973, 974, 975, 976, 977, 978, 979,
+      (2,0,2,0): 980, 981, 982, 983, 984, 985, 986, 987, 988, 989,
+      (2,0,3,0): 990, 991, 992, 993, 994, 995, 996, 997, 998, 999,
+      (2,0,4,0): 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+      (2,0,5,0): 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+      (2,0,6,0): 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+      (2,0,7,0): 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+      (2,1,0,0): 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
+      (2,1,1,0): 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+      (2,1,2,0): 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
+      (2,1,3,0): 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
+      (2,1,4,0): 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
+      (2,1,5,0): 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
+      (2,1,6,0): 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
+      (2,1,7,0): 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
+      (2,2,0,0): 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+      (2,2,1,0): 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+      (2,2,2,0): 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
+      (2,2,3,0): 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159,
+      (2,2,4,0): 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+      (2,2,5,0): 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
+      (2,2,6,0): 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189,
+      (2,2,7,0): 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199,
+      (2,3,0,0): 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+      (2,3,1,0): 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219,
+      (2,3,2,0): 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229,
+      (2,3,3,0): 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239,
+      (2,3,4,0): 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
+      (2,3,5,0): 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
+      (2,3,6,0): 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269,
+      (2,3,7,0): 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279,
+      (2,4,0,0): 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289,
+      (2,4,1,0): 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299,
+      (2,4,2,0): 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+      (2,4,3,0): 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319,
+      (2,4,4,0): 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329,
+      (2,4,5,0): 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339,
+      (2,4,6,0): 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349,
+      (2,4,7,0): 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359,
+      (2,5,0,0): 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369,
+      (2,5,1,0): 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379,
+      (2,5,2,0): 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389,
+      (2,5,3,0): 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399,
+      (2,5,4,0): 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409,
+      (2,5,5,0): 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419,
+      (2,5,6,0): 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429,
+      (2,5,7,0): 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439,
+      (3,0,0,0): 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449,
+      (3,0,1,0): 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459,
+      (3,0,2,0): 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469,
+      (3,0,3,0): 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479,
+      (3,0,4,0): 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489,
+      (3,0,5,0): 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499,
+      (3,0,6,0): 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509,
+      (3,0,7,0): 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519,
+      (3,1,0,0): 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529,
+      (3,1,1,0): 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539,
+      (3,1,2,0): 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549,
+      (3,1,3,0): 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
+      (3,1,4,0): 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569,
+      (3,1,5,0): 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,
+      (3,1,6,0): 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589,
+      (3,1,7,0): 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599,
+      (3,2,0,0): 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609,
+      (3,2,1,0): 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
+      (3,2,2,0): 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629,
+      (3,2,3,0): 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639,
+      (3,2,4,0): 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649,
+      (3,2,5,0): 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659,
+      (3,2,6,0): 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669,
+      (3,2,7,0): 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679,
+      (3,3,0,0): 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689,
+      (3,3,1,0): 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699,
+      (3,3,2,0): 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709,
+      (3,3,3,0): 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719,
+      (3,3,4,0): 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729,
+      (3,3,5,0): 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
+      (3,3,6,0): 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749,
+      (3,3,7,0): 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759,
+      (3,4,0,0): 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769,
+      (3,4,1,0): 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779,
+      (3,4,2,0): 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789,
+      (3,4,3,0): 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799,
+      (3,4,4,0): 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809,
+      (3,4,5,0): 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819,
+      (3,4,6,0): 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829,
+      (3,4,7,0): 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839,
+      (3,5,0,0): 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849,
+      (3,5,1,0): 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859,
+      (3,5,2,0): 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869,
+      (3,5,3,0): 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879,
+      (3,5,4,0): 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889,
+      (3,5,5,0): 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899,
+      (3,5,6,0): 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909,
+      (3,5,7,0): 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tints4dims.h5 b/tools/testfiles/tints4dims.h5
new file mode 100644
index 0000000..2fe8321
Binary files /dev/null and b/tools/testfiles/tints4dims.h5 differ
diff --git a/tools/testfiles/tints4dimsBlock2.ddl b/tools/testfiles/tints4dimsBlock2.ddl
new file mode 100644
index 0000000..f414e10
--- /dev/null
+++ b/tools/testfiles/tints4dimsBlock2.ddl
@@ -0,0 +1,16 @@
+HDF5 "tints4dims.h5" {
+DATASET "FourDimInts" {
+   DATATYPE  H5T_STD_U32LE
+   DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+   SUBSET {
+      START ( 0, 0, 0, 0 );
+      STRIDE ( 1, 1, 1, 1 );
+      COUNT ( 1, 1, 1, 1 );
+      BLOCK ( 2, 2, 2, 2 );
+      DATA {
+      (0,0,0,0): 0, 1, 80, 81, 480, 481, 560, 561,
+      (0,0,1,0): 10, 11, 90, 91, 490, 491, 570, 571
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tints4dimsBlockEq.ddl b/tools/testfiles/tints4dimsBlockEq.ddl
new file mode 100644
index 0000000..6625780
--- /dev/null
+++ b/tools/testfiles/tints4dimsBlockEq.ddl
@@ -0,0 +1,30 @@
+HDF5 "tints4dims.h5" {
+DATASET "FourDimInts" {
+   DATATYPE  H5T_STD_U32LE
+   DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+   SUBSET {
+      START ( 0, 0, 0, 0 );
+      STRIDE ( 2, 2, 1, 1 );
+      COUNT ( 2, 2, 1, 1 );
+      BLOCK ( 1, 2, 4, 4 );
+      DATA {
+      (0,0,0,0): 0, 1, 2, 3, 80, 81, 82, 83,
+      (0,0,1,0): 10, 11, 12, 13, 90, 91, 92, 93,
+      (0,0,2,0): 20, 21, 22, 23, 100, 101, 102, 103,
+      (0,0,3,0): 30, 31, 32, 33, 110, 111, 112, 113
+      (0,2,0,0): 160, 161, 162, 163, 240, 241, 242, 243,
+      (0,2,1,0): 170, 171, 172, 173, 250, 251, 252, 253,
+      (0,2,2,0): 180, 181, 182, 183, 260, 261, 262, 263,
+      (0,2,3,0): 190, 191, 192, 193, 270, 271, 272, 273
+      (2,0,0,0): 960, 961, 962, 963, 1040, 1041, 1042, 1043,
+      (2,0,1,0): 970, 971, 972, 973, 1050, 1051, 1052, 1053,
+      (2,0,2,0): 980, 981, 982, 983, 1060, 1061, 1062, 1063,
+      (2,0,3,0): 990, 991, 992, 993, 1070, 1071, 1072, 1073
+      (2,2,0,0): 1120, 1121, 1122, 1123, 1200, 1201, 1202, 1203,
+      (2,2,1,0): 1130, 1131, 1132, 1133, 1210, 1211, 1212, 1213,
+      (2,2,2,0): 1140, 1141, 1142, 1143, 1220, 1221, 1222, 1223,
+      (2,2,3,0): 1150, 1151, 1152, 1153, 1230, 1231, 1232, 1233
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tints4dimsCount2.ddl b/tools/testfiles/tints4dimsCount2.ddl
new file mode 100644
index 0000000..500e418
--- /dev/null
+++ b/tools/testfiles/tints4dimsCount2.ddl
@@ -0,0 +1,22 @@
+HDF5 "tints4dims.h5" {
+DATASET "FourDimInts" {
+   DATATYPE  H5T_STD_U32LE
+   DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+   SUBSET {
+      START ( 0, 0, 0, 0 );
+      STRIDE ( 1, 1, 1, 1 );
+      COUNT ( 2, 2, 2, 2 );
+      BLOCK ( 1, 1, 1, 1 );
+      DATA {
+      (0,0,0,0): 0, 1,
+      (0,0,1,0): 10, 11
+      (0,1,0,0): 80, 81,
+      (0,1,1,0): 90, 91
+      (1,0,0,0): 480, 481,
+      (1,0,1,0): 490, 491
+      (1,1,0,0): 560, 561,
+      (1,1,1,0): 570, 571
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tints4dimsCountEq.ddl b/tools/testfiles/tints4dimsCountEq.ddl
new file mode 100644
index 0000000..8b17bfc
--- /dev/null
+++ b/tools/testfiles/tints4dimsCountEq.ddl
@@ -0,0 +1,30 @@
+HDF5 "tints4dims.h5" {
+DATASET "FourDimInts" {
+   DATATYPE  H5T_STD_U32LE
+   DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+   SUBSET {
+      START ( 0, 0, 0, 0 );
+      STRIDE ( 2, 2, 1, 1 );
+      COUNT ( 2, 2, 4, 4 );
+      BLOCK ( 1, 2, 1, 1 );
+      DATA {
+      (0,0,0,0): 0, 1, 2, 3, 80, 81, 82, 83,
+      (0,0,1,0): 10, 11, 12, 13, 90, 91, 92, 93,
+      (0,0,2,0): 20, 21, 22, 23, 100, 101, 102, 103,
+      (0,0,3,0): 30, 31, 32, 33, 110, 111, 112, 113
+      (0,2,0,0): 160, 161, 162, 163, 240, 241, 242, 243,
+      (0,2,1,0): 170, 171, 172, 173, 250, 251, 252, 253,
+      (0,2,2,0): 180, 181, 182, 183, 260, 261, 262, 263,
+      (0,2,3,0): 190, 191, 192, 193, 270, 271, 272, 273
+      (2,0,0,0): 960, 961, 962, 963, 1040, 1041, 1042, 1043,
+      (2,0,1,0): 970, 971, 972, 973, 1050, 1051, 1052, 1053,
+      (2,0,2,0): 980, 981, 982, 983, 1060, 1061, 1062, 1063,
+      (2,0,3,0): 990, 991, 992, 993, 1070, 1071, 1072, 1073
+      (2,2,0,0): 1120, 1121, 1122, 1123, 1200, 1201, 1202, 1203,
+      (2,2,1,0): 1130, 1131, 1132, 1133, 1210, 1211, 1212, 1213,
+      (2,2,2,0): 1140, 1141, 1142, 1143, 1220, 1221, 1222, 1223,
+      (2,2,3,0): 1150, 1151, 1152, 1153, 1230, 1231, 1232, 1233
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tints4dimsStride2.ddl b/tools/testfiles/tints4dimsStride2.ddl
new file mode 100644
index 0000000..7ec98fc
--- /dev/null
+++ b/tools/testfiles/tints4dimsStride2.ddl
@@ -0,0 +1,22 @@
+HDF5 "tints4dims.h5" {
+DATASET "FourDimInts" {
+   DATATYPE  H5T_STD_U32LE
+   DATASPACE  SIMPLE { ( 4, 6, 8, 10 ) / ( 4, 6, 8, 10 ) }
+   SUBSET {
+      START ( 0, 0, 0, 0 );
+      STRIDE ( 2, 2, 2, 2 );
+      COUNT ( 2, 2, 2, 2 );
+      BLOCK ( 1, 1, 1, 1 );
+      DATA {
+      (0,0,0,0): 0, 2,
+      (0,0,2,0): 20, 22
+      (0,2,0,0): 160, 162,
+      (0,2,2,0): 180, 182
+      (2,0,0,0): 960, 962,
+      (2,0,2,0): 980, 982
+      (2,2,0,0): 1120, 1122,
+      (2,2,2,0): 1140, 1142
+      }
+   }
+}
+}
diff --git a/tools/testfiles/tnbit.ddl b/tools/testfiles/tnbit.ddl
index bd32eaa..fd5d1cf 100644
--- a/tools/testfiles/tnbit.ddl
+++ b/tools/testfiles/tnbit.ddl
@@ -11,7 +11,7 @@ DATASET "nbit" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tscaleoffset.ddl b/tools/testfiles/tscaleoffset.ddl
index ba49c70..a039736 100644
--- a/tools/testfiles/tscaleoffset.ddl
+++ b/tools/testfiles/tscaleoffset.ddl
@@ -11,7 +11,7 @@ DATASET "scaleoffset" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tshuffle.ddl b/tools/testfiles/tshuffle.ddl
index 5c183fe..b0477db 100644
--- a/tools/testfiles/tshuffle.ddl
+++ b/tools/testfiles/tshuffle.ddl
@@ -11,7 +11,7 @@ DATASET "shuffle" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tszip.ddl b/tools/testfiles/tszip.ddl
index 6fdd92f..06e2259 100644
--- a/tools/testfiles/tszip.ddl
+++ b/tools/testfiles/tszip.ddl
@@ -17,7 +17,7 @@ DATASET "szip" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/tuserfilter.ddl b/tools/testfiles/tuserfilter.ddl
index 24745b9..f77fb17 100644
--- a/tools/testfiles/tuserfilter.ddl
+++ b/tools/testfiles/tuserfilter.ddl
@@ -15,7 +15,7 @@ DATASET "myfilter" {
    }
    FILLVALUE {
       FILL_TIME H5D_FILL_TIME_IFSET
-      VALUE  0
+      VALUE  H5D_FILL_VALUE_DEFAULT
    }
    ALLOCATION_TIME {
       H5D_ALLOC_TIME_INCR
diff --git a/tools/testfiles/vds/a.h5 b/tools/testfiles/vds/a.h5
new file mode 100644
index 0000000..fa19535
Binary files /dev/null and b/tools/testfiles/vds/a.h5 differ
diff --git a/tools/testfiles/vds/b.h5 b/tools/testfiles/vds/b.h5
new file mode 100644
index 0000000..08449ca
Binary files /dev/null and b/tools/testfiles/vds/b.h5 differ
diff --git a/tools/testfiles/vds/c.h5 b/tools/testfiles/vds/c.h5
new file mode 100644
index 0000000..ba9af30
Binary files /dev/null and b/tools/testfiles/vds/c.h5 differ
diff --git a/tools/testfiles/vds/d.h5 b/tools/testfiles/vds/d.h5
new file mode 100644
index 0000000..8eceb4a
Binary files /dev/null and b/tools/testfiles/vds/d.h5 differ
diff --git a/tools/testfiles/vds/f-0.h5 b/tools/testfiles/vds/f-0.h5
new file mode 100644
index 0000000..242df07
Binary files /dev/null and b/tools/testfiles/vds/f-0.h5 differ
diff --git a/tools/testfiles/vds/f-3.h5 b/tools/testfiles/vds/f-3.h5
new file mode 100644
index 0000000..539c1c9
Binary files /dev/null and b/tools/testfiles/vds/f-3.h5 differ
diff --git a/tools/testfiles/vds/tvds_layout-1.ddl b/tools/testfiles/vds/tvds_layout-1.ddl
index 5d8a62c..b5351f2 100644
--- a/tools/testfiles/vds/tvds_layout-1.ddl
+++ b/tools/testfiles/vds/tvds_layout-1.ddl
@@ -125,16 +125,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): 10, 10, 10, 10, 10, 10, 10, 10,
       (0,1,0): 10, 10, 10, 10, 10, 10, 10, 10,
diff --git a/tools/testfiles/vds/tvds_layout-2.ddl b/tools/testfiles/vds/tvds_layout-2.ddl
index af6b718..53407c7 100644
--- a/tools/testfiles/vds/tvds_layout-2.ddl
+++ b/tools/testfiles/vds/tvds_layout-2.ddl
@@ -105,16 +105,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): 10, 10, 10, 10, 10, 10, 10, 40, 40, 40, 40, 40, 40, 40,
       (0,1,0): 10, 10, 10, 10, 10, 10, 10, 40, 40, 40, 40, 40, 40, 40,
diff --git a/tools/testfiles/vds/tvds_layout-3_1.ddl b/tools/testfiles/vds/tvds_layout-3_1.ddl
index 968327d..e75fe36 100644
--- a/tools/testfiles/vds/tvds_layout-3_1.ddl
+++ b/tools/testfiles/vds/tvds_layout-3_1.ddl
@@ -125,16 +125,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): -9, -9, -9, -9, -9, -9, -9, -9,
       (0,1,0): 10, 10, 10, 10, 10, 10, 10, 10,
diff --git a/tools/testfiles/vds/tvds_layout-3_2.ddl b/tools/testfiles/vds/tvds_layout-3_2.ddl
index 7e14ec2..5b63269 100644
--- a/tools/testfiles/vds/tvds_layout-3_2.ddl
+++ b/tools/testfiles/vds/tvds_layout-3_2.ddl
@@ -105,16 +105,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9,
       (0,0,15): -9, -9, -9, -9,
diff --git a/tools/testfiles/vds/tvds_layout-4.ddl b/tools/testfiles/vds/tvds_layout-4.ddl
index 018644e..a449d0c 100644
--- a/tools/testfiles/vds/tvds_layout-4.ddl
+++ b/tools/testfiles/vds/tvds_layout-4.ddl
@@ -25,16 +25,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): 10, 10, 10, 10,
       (0,1,0): 10, 10, 10, 10,
diff --git a/tools/testfiles/vds/tvds_layout-5.ddl b/tools/testfiles/vds/tvds_layout-5.ddl
index b43629a..1698eb4 100644
--- a/tools/testfiles/vds/tvds_layout-5.ddl
+++ b/tools/testfiles/vds/tvds_layout-5.ddl
@@ -65,16 +65,10 @@ GROUP "/" {
             }
          }
       }
-      FILTERS {
-         NONE
-      }
       FILLVALUE {
          FILL_TIME H5D_FILL_TIME_IFSET
          VALUE  -9
       }
-      ALLOCATION_TIME {
-         H5D_ALLOC_TIME_INCR
-      }
       DATA {
       (0,0,0): 10, 10, 10, 10,
       (0,1,0): 10, 10, 10, 10,
diff --git a/tools/testfiles/vds/vds-eiger.h5 b/tools/testfiles/vds/vds-eiger.h5
new file mode 100644
index 0000000..23d1fd3
Binary files /dev/null and b/tools/testfiles/vds/vds-eiger.h5 differ
diff --git a/tools/testfiles/vds/vds-first.ddl b/tools/testfiles/vds/vds-first.ddl
new file mode 100644
index 0000000..97b1ecf
--- /dev/null
+++ b/tools/testfiles/vds/vds-first.ddl
@@ -0,0 +1,210 @@
+HDF5 "vds-percival-unlim-maxmin.h5" {
+GROUP "/" {
+   DATASET "VDS-Percival-unlim-maxmin" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 20, 10, 10 ) / ( H5S_UNLIMITED, 10, 10 ) }
+      DATA {
+      (0,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (1,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (2,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (3,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (4,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (5,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (6,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (7,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (8,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (9,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (10,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (11,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (12,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (13,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (14,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (16,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (17,0,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,1,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,2,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,3,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,4,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,5,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,6,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,7,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,8,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,9,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (18,0,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,1,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,2,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,3,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,4,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,5,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,6,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,7,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,8,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,9,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (19,0,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,1,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,2,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,3,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,4,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,5,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,6,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,7,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,8,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,9,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
+      }
+   }
+}
+}
diff --git a/tools/testfiles/vds/vds-gap1.ddl b/tools/testfiles/vds/vds-gap1.ddl
new file mode 100644
index 0000000..cace781
--- /dev/null
+++ b/tools/testfiles/vds/vds-gap1.ddl
@@ -0,0 +1,58 @@
+HDF5 "vds-eiger.h5" {
+DATASET "/VDS-Eiger" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 5, 10, 10 ) / ( H5S_UNLIMITED, 10, 10 ) }
+   DATA {
+   (0,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (0,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (1,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (2,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (3,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+   (4,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+   }
+}
+}
diff --git a/tools/testfiles/vds/vds-gap2.ddl b/tools/testfiles/vds/vds-gap2.ddl
new file mode 100644
index 0000000..24da48f
--- /dev/null
+++ b/tools/testfiles/vds/vds-gap2.ddl
@@ -0,0 +1,210 @@
+HDF5 "vds-eiger.h5" {
+GROUP "/" {
+   DATASET "VDS-Eiger" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 20, 10, 10 ) / ( H5S_UNLIMITED, 10, 10 ) }
+      DATA {
+      (0,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (5,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (6,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (7,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (8,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (9,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (10,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (11,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (12,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (13,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (14,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (15,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (16,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (17,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (18,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (19,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
+      }
+   }
+}
+}
diff --git a/tools/testfiles/vds/vds-percival-unlim-maxmin.h5 b/tools/testfiles/vds/vds-percival-unlim-maxmin.h5
new file mode 100644
index 0000000..b7f8827
Binary files /dev/null and b/tools/testfiles/vds/vds-percival-unlim-maxmin.h5 differ
diff --git a/tools/testfiles/vds/vds_layout-eiger.ddl b/tools/testfiles/vds/vds_layout-eiger.ddl
new file mode 100644
index 0000000..d32a139
--- /dev/null
+++ b/tools/testfiles/vds/vds_layout-eiger.ddl
@@ -0,0 +1,81 @@
+HDF5 "vds-eiger.h5" {
+GROUP "/" {
+   DATASET "VDS-Eiger" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 5, 10, 10 ) / ( H5S_UNLIMITED, 10, 10 ) }
+      STORAGE_LAYOUT {
+         MAPPING 0 { 
+            VIRTUAL {
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (5,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (5,10,10)
+               }
+            }
+            SOURCE {
+               FILE "f-%b.h5"
+               DATASET "A"
+               SELECTION ALL
+            }
+         }
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  H5D_FILL_VALUE_DEFAULT
+      }
+      DATA {
+      (0,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (0,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (1,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (2,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (3,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (4,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+      }
+   }
+}
+}
diff --git a/tools/testfiles/vds/vds_layout-maxmin.ddl b/tools/testfiles/vds/vds_layout-maxmin.ddl
new file mode 100644
index 0000000..790fc1c
--- /dev/null
+++ b/tools/testfiles/vds/vds_layout-maxmin.ddl
@@ -0,0 +1,416 @@
+HDF5 "vds-percival-unlim-maxmin.h5" {
+GROUP "/" {
+   DATASET "VDS-Percival-unlim-maxmin" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 32, 10, 10 ) / ( H5S_UNLIMITED, 10, 10 ) }
+      STORAGE_LAYOUT {
+         MAPPING 0 { 
+            VIRTUAL {
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (4,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+            SOURCE {
+               FILE "a.h5"
+               DATASET "A"
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (1,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+         }
+         MAPPING 1 { 
+            VIRTUAL {
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (1,0,0)
+                  STRIDE (4,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+            SOURCE {
+               FILE "b.h5"
+               DATASET "B"
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (1,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+         }
+         MAPPING 2 { 
+            VIRTUAL {
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (2,0,0)
+                  STRIDE (4,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+            SOURCE {
+               FILE "c.h5"
+               DATASET "C"
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (1,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+         }
+         MAPPING 3 { 
+            VIRTUAL {
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (3,0,0)
+                  STRIDE (4,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+            SOURCE {
+               FILE "d.h5"
+               DATASET "D"
+               SELECTION REGULAR_HYPERSLAB { 
+                  START (0,0,0)
+                  STRIDE (1,1,1)
+                  COUNT (H5S_UNLIMITED,1,1)
+                  BLOCK (1,10,10)
+               }
+            }
+         }
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  H5D_FILL_VALUE_DEFAULT
+      }
+      DATA {
+      (0,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (0,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (1,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (1,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (2,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (2,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (3,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (3,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (4,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (4,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (5,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (5,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (6,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (6,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (7,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (7,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (8,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (8,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (9,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (9,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (10,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (10,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (11,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (11,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (12,0,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,1,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,2,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,3,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,4,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,5,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,6,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,7,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,8,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (12,9,0): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+      (13,0,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,1,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,2,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,3,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,4,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,5,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,6,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,7,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,8,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (13,9,0): 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+      (14,0,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,1,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,2,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,3,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,4,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,5,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,6,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,7,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,8,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (14,9,0): 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+      (15,0,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,1,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,2,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,3,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,4,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,5,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,6,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,7,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,8,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (15,9,0): 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+      (16,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (16,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      (17,0,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,1,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,2,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,3,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,4,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,5,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,6,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,7,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,8,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (17,9,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (18,0,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,1,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,2,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,3,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,4,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,5,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,6,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,7,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,8,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (18,9,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (19,0,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,1,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,2,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,3,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,4,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,5,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,6,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,7,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,8,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (19,9,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (20,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (20,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (21,0,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,1,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,2,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,3,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,4,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,5,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,6,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,7,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,8,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (21,9,0): 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+      (22,0,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,1,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,2,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,3,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,4,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,5,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,6,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,7,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,8,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (22,9,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (23,0,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,1,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,2,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,3,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,4,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,5,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,6,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,7,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,8,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (23,9,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (24,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (24,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (25,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (26,0,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,1,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,2,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,3,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,4,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,5,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,6,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,7,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,8,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (26,9,0): 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+      (27,0,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,1,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,2,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,3,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,4,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,5,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,6,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,7,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,8,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (27,9,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (28,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (28,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (29,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (30,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      (31,0,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,1,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,2,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,3,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,4,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,5,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,6,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,7,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,8,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+      (31,9,0): 40, 40, 40, 40, 40, 40, 40, 40, 40, 40
+      }
+   }
+}
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/hdf5.git



More information about the Pkg-grass-devel mailing list